利用微服务构建现代应用(一)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文讲的是利用微服务构建现代应用(一),【编者的话】本文介绍了微服务如何消除传统的整体化软件架构存在的问题,微服务跟SOA的关系,微服务所利用的新技术如容器、编排框架等,以及使用微服务带来的好处。
本文讲的是利用微服务构建现代应用(一) 【编者的话】本文介绍了微服务如何消除传统的整体化软件架构存在的问题,微服务跟SOA的关系,微服务所利用的新技术如容器、编排框架等,以及使用微服务带来的好处。

本文是关于微服务的两篇博文中的第一篇。这篇博文介绍了微服务的背景知识,微服务所使用的新技术以及使用微服务带来的好处。

简介

随着互联网公司在高度竞争性的市场中需要快速灵活的复制其开发环境,应用程序的开发正变得越来越复杂。庞大并且整体的应用程序在过去是企业的竞争力,但是在新的情境中却使得快速部署新的服务成为了问题。而分散的和分布式开发会带来组织架构上的问题。基于此,用户的要求比过去任何时候更高 – 企业需要有效的扩展并且监控已部署的系统以确保高性能和一致的用户体验。当然,这一切都需要在服务不中断的情况下完成。

上述的这些趋势对软件架构模式提出了新的要求以使其能处理在当前时代下的需求。整体化的架构是一种传统的方式,但是存在诸多问题:不易于扩展,大的代码库难于维护,升级过程有很大的风险,前置的准备成本等,所有这些迫使企业寻求新的方法。

在过去几年,微服务的概念进入了人们的视野。由于其在提供模块化、可扩展、高可用的应用方面的能力以及促进组织架构融合方面的优势使得它迅速的被业界所接受。

整体化架构

在微服务之前,一个通用的软件设计模式是使用整体化架构。在这种模式下,应用程序在开发、测试、打包和部署阶段都是作为一个整体存在。代码库被整体编译,应用程序被作为一个实体部署。扩展需要将应用程序的二进制文件和依赖的库文件拷贝到不同的服务器上,这些应用程序一般都是单进程运行。这种整体化架构使得持续交付(一种包含了快速、迭代、升级安全的软件开发过程)变得充满挑战,因为哪怕是应用程序栈的最小增量版本也需要重新编译、重新链接和测试。 

什么是微服务?

微服务是一种将应用分解成小的自治服务的软件架构。服务通常仅关注某个特定的目标并保证服务之间的自治。每个服务被独立的开发、测试和部署,每个服务往往使用约定的API并通过网络进行通信,虽然在某些情况下网络可能是本地的。

微服务从SOA发展而来,SOA在本世纪初曾获得广泛的认可和流行,SOA是一种反对大型的整体化架构应用的方式。SOA和微服务的主要区别有:
  • SOAs是有状态的,而微服务是无状态的
  • SOAs倾向于使用企业级的服务总线进行通信,而微服务则使用更简单的通信系统
  • SOAs或许会有上百万行代码,而微服务往往仅有少于100行代码
  • SOAs强调重用(例如运行时代码、数据库等),而微服务则关注在尽量解耦
  • SOAs里的一个系统性变化需要修改软件的整体结构,而在微服务中的一个系统性变化将产生一个新的服务
  • SOAs更经常使用传统的关系型数据库,而微服务则更倾向于现代的、非关系型数据库。下面几节将介绍在微服务架构中使用非关系型数据库的好处。

许多架构师发现SOA存在通信协议的问题和缺乏有效的如何分割服务的指导,这些问题构成了微服务的基础,使得微服务成为了实现一个真正的SOA的最佳实践方法。

使微服务成为可能的新技术

需要部署成百甚至上千的服务的缺点跟微服务带来的好处(快速开发、可扩展)相比还是值得的。

新的技术的出现例如容器(Docker、LXC)和编排框架(Kubernetes、Mesos)消除了过去阻碍微服务架构使用的很多问题。

容器是轻量级的运行时环境,使用最少的性能和容量影响提供了隔离性和可扩展性。程序打包也被简化成了相同的环境可以同时支持开发、支持、测试和生产环境的版本,因此使得从开发到测试到QA到生产的过程变得更容易。容器在微服务环境中可以工作的很好因为它可以将服务隔离在单个的容器中。升级一个服务变成了一个可以自动化和可控的过程,在APIs保持不变的情况下修改一个服务不会影响到其它的服务。
image03-5eeda117f3.png

图1:微服务中的容器

当组织开始在大规模环境中运行容器时,或许需要考虑使用编排框架来管理持续增加的复杂性。编排框架帮助部署和管理容器:部署主机、示例容器、错误处理、弹性伸缩。Kubernetes和Mesos是两个常见的编排框架可以使得在微服务环境中部署大量容器变得容易。

获取更多关于如何利用容器和MongoDB构建微服务架构的信息,下载我们的指南: 构建微服务:解析容器和编排

微服务的好处

很多组织可以通过实施微服务来满足现代应用的需求,这些好处包括:

缩短产品上市时间 :在整体化架构的应用中,任何微小的修改都需要重新部署整个应用栈,因此带来了更高的风险和复杂度。这造成了更长的版本周期,因为修改可能会被累积,直到达到某个阈值时才发布新的版本。使用微服务,对于某个服务的修改可以被迅速的提交、测试和部署,因为对此服务的修改跟系统的其它部分是不相关的。 

持续集成——一种每天数次集成和测试开发人员的代码改动的软件开发实践 – 因为有更少的功能需要去测试而变得更简单和快速。结果是版本的发布节奏更快,因为更少的代码需要被编译和重新测试。编排框架例如Kubernetes通过自动化上线、容器滚动更新和必要时的回滚进一步加快了产品上市的节奏。

灵活性和可扩展性 :整体架构的应用需要系统中的全部组件同时扩展。如果某个服务需要更高的性能,唯一的选项就是扩展系统中的所有服务而不是仅仅扩展需要扩容的单个服务。使用微服务,仅需要额外能力的单个服务需要扩容。扩容通过部署更多的容器来实现、可以实现更有效的容量计划,更少的软件授权和更低的总体拥有成本;因为服务和软件可以更好的匹配。
image01-2e9915585b.png

图2:容器伸缩

弹性:  整体架构应用的一个主要问题是当某个服务失效时可能整个系统可能都会受到连累。在微服务中,各个服务之间的隔离性使得单个服务的失效不会扩展到系统的其它部分进而造成全局性的影响。如果使用容器,编排框架可以提供额外的弹性:当某个容器失效时,一个新的容器会被启动,进而实现完全的冗余和容量。 

组织架构匹配 :微服务可以更好的匹配组织架构,因为团队的规模可以根据需要完成的任务进行更好的定义。团队可以被分成更小的小组并专注在应用的某个组件上。这对分布在不同地理位置的团队来讲是非常有用的。例如,在新加坡的团队处理三个服务,在旧金山的团队处理五个服务,这两个团队可以独立的发布和部署功能组件。 这可以帮助处理相同组件的不同职能的团队(Ops、Dev、QA)打破疆界和更好的合作。这也可以保证不同团队之间的沟通跟不同的服务之间的API相匹配。本质上来讲,服务之间的API定义了不同开发团队之间应该相互提供的服务的契约。 

降低成本 :通过使用容器,应用和环境(设计、测试、生产、支持)可以共享相同的基础设施,结果是更高的硬件利用率和由于管理简化带来的成本降低。另外,微服务也会降低技术方面的开销。在整体化架构的应用中,重构一个大型应用的代码会带来开销(时间、资源)。通过将应用分解成可以通过API访问的微服务,代码重构可以逐个服务进行,结果是更少的时间去维护和更新代码。

这篇博文系列的第二部分,我们将讨论如何用MongoDB构建微服务。 

原文链接:Building Modern Applications with Microservices: Part 1(翻译:李光成)

================================================================
译者介绍
李光成,IBM中国研究院资深研究员,研究方向是云计算基础设施及技术。目前在做的是Docker资源隔离方面的研究项目。

原文发布时间为:2016-05-11
本文作者:liguangcheng 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:利用微服务构建现代应用(一)
目录
相关文章
|
4天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
5天前
|
Java API 微服务
【Spring Boot系列】通过OpenAPI规范构建微服务服务接口
【4月更文挑战第5天】通过OpenAPI接口构建Spring Boot服务RestAPI接口
|
16天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
20 0
|
4天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
15天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
1天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。
|
5天前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
39 0
|
5天前
|
Cloud Native 算法 Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(上)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
30 0
|
6天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业提升系统灵活性、加速产品迭代的关键。此文深入探讨了构建高效微服务架构的实践方法,包括服务划分原则、容器化部署、持续集成/持续部署(CI/CD)流程以及监控与日志管理等关键技术点。通过分析具体案例,揭示了微服务在提高开发效率、降低维护成本及促进团队协作方面的显著优势。
|
9天前
|
监控 JavaScript 安全
构建微服务架构下的API网关
【4月更文挑战第15天】在微服务架构中,API网关扮演着至关重要的角色。它作为系统的唯一入口,不仅负责请求的路由、负载均衡和认证授权,还涉及到监控、日志记录和服务熔断等关键功能。本文将探讨如何构建一个高效且可靠的API网关,涵盖其设计原则、核心组件以及实现策略,旨在为后端开发人员提供一套实用的指导方案。
22 4