`
m635674608
  • 浏览: 5022018 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[译]微服务架构(Microservices Architecture)

 
阅读更多

This a translation of an article ( http://microservices.io/patterns/microservices.html) originally written and copyrighted by Chris Richardson ( http://twitter.com/crichardson).

模式:微服务架构

背景

假 设你在开发一个服务端应用。该应用必须支持各种各样的客户端,包括桌面浏览器、手机浏览器和本地手机应用。应用可能也需要公开部分API供第三方使用,还 可能与其他应用通过web service或消息代理(message broker)相集成。应用执行业务逻辑来处理请求(HTTP请求或者消息);访问数据库;与其他系统交换消息;并返回HTML/JSON/XML类型的 响应。

应用或是多层架构或是六角架构,并且包含多种类型的组件:

  • 表示组件(Presentation components) - 响应处理HTTP请求,并返回HTML或JSON/XML(对于web service API)

  • 业务逻辑(Business logic) - 应用的业务逻辑

  • 数据库访问逻辑(Database access logic) - 数据访问对象用于访问数据库

  • 应用集成逻辑(Application integration logic) - 消息层,如基于Spring的集成

这些逻辑组件分别响应应用中不同的功能模块。

问题

应用的部署架构是什么?

推动力

  • 该应用由一个开发者团队在维护

  • 团队新成员必须快速上手

  • 应用应该易于理解和修改

  • 你想对应用进行持续集成

  • 你必须在多台机器上部署多份应用的拷贝,以满足可伸缩性和可用性的要求

  • 你想使用新技术(框架、编程语言等)

解决方案

通过采用伸缩立方(Scale Cube)(特别是y轴方向上的伸缩)来架构应用,将应用按功能分解为一组相互协作的服务的集合。每个服务实现一组有限并相关的功能。比如,一个应用可能包含订单管理服务,客户管理服务等。

服务间通过HTTP/REST等同步协议或AMQP等异步协议进行通讯。

服务独立开发和部署。

每个服务为了与其他服务解耦,都有自己的数据库。必要时,数据库间的一致性通过数据库复制机制或应用级事件来维护。

举例

我们假设你在构建一个电子商务应用,应用从客户接收订单,验证库存和可用额度,并派送订单。应用包含多个组件,包括StoreFrontUI,用来实现用户接口,以及一些后台服务,用于检测信用额度、维护库存和派送订单。

应用作为一组服务部署。

结果

这个方案有一些好处:

  • 每个微服务都相对较小

    • 易于开发者理解

    • IDE反应更快,开发者更高效

    • web容器启动更快,开发者更高效,并提升了部署速度

  • 每个服务都可以独立部署 - 易于频繁部署新版本的服务

  • 易于伸缩开发组织结构。你可以对多个团队的开发工作进行组织。每个(双披萨[1])团队负责单个服务。每个团队可以独立于其他团队开发、部署和伸缩服务。

  • 提升故障隔离(fault isolation)。比如,如果一个服务存在内存泄露,那么只有该服务受影响,其他服务仍然可以处理请求。相比之下,一体架构的一个出错组件可以拖垮整个系统。

  • 每个服务可以单独开发和部署

  • 消除了任何对技术栈(technologh stack)的长期投入(long-term commitments)

这个方案也有一些缺点:

  • 开发者要处理分布式系统的额外复杂度。

    • 开发者工具/IDE是面向构建一体应用的,并没有显示提供对开发分布式应用的支持

    • 测试更加困难

    • 开发者需要实现服务间通信机制

    • 不使用分布式事务实现跨服务的用例更加困难

    • 实现跨服务的用例需要团队间的细致协作

  • 生产环境的部署复杂度。对于包含多种不同服务类型的系统,部署和管理的操作复杂度仍然存在。

  • 内存消耗增加。微服务架构使用 NxM个服务实例来替代N个一体应用实例。如果每个服务运行在自己独立的JVM(或类似)上,通常有必要对实例进行隔离,对这么多运行的JVN,就有M倍 的开销。另外,如果每个服务运行在独立的VM(如EC2实例),如Netflix,开销会更高。

使 用该方法的一个挑战就是决定何时使用才合理。在开发应用的初期,你通常不会遇到这种方法试图解决的问题。而且,使用这个精细、分布式的架构将会拖慢开发进 度。对初创公司,这是个严重问题,因为它们的最大挑战通常是如何快速发展业务模型及相关应用。使用Y轴切分使快速迭代更加困难。但是之后,当挑战变成如何 伸缩,你需要使用功能分解将一体应用切分为一组服务时,混乱的依赖关系可能使之变得困难。

另一个挑战是如何将系统分隔为微服务。这是个技术活,但有些策略可能有帮助。一种方法是通过动词或用例来分隔。比如,之后你将看到分隔后的电子商务应用有个负责派送已完成订单的Shipping服务。另一个通过动词分隔的例子是实现登录用例的登录服务。

另一种分隔方法是通过名称或资源来分隔系统。这种服务负责对给定类型的实体/资源的所有操作。比如,之后你会发现为何电子商务系统有个Inventory服务来跟踪产品是否在库存中。

理论上,每个服务应该只承担很小的职责。Bob Martin(大叔)讲过使用单一职责原则(SRP)来设计类。SRP定义类的职责作为变化的原因,而且类应该只有一个变化的原因。使用SRP来设计服务也是合理的。

另一个有助于服务设计的类比是Unix实用工具的设计方法。Unix提供大量的实用工具如grep、cat和find。每个工具只做一件事,通常做得非常好,并且可以跟其他工具使用shell脚本组合来执行复杂任务。

相关模式

一体架构是个替代模式。API网关模式 定义了客户端如何访问服务。

已知案例

大多数大规模的web站点,如 NetflixAmazoneBay都从一体架构转变为微服务架构。

Netflix是个非常受欢迎的视频流服务提供商,占有多达30%的互联网流量,它有着大规模、基于服务的架构。他们每天处理800+不同类型设备超过10亿次视频流API的请求。每个API可以展开成平均6次对后端服务的调用。

Amazon.com 原有个两层架构。为了伸缩,他们迁移到一个包含上百个后端服务的基于服务的架构。调用这些服务的应用中包括实现Amazon.com网站和web service API的应用。Amazon.com网站应用调用100-150个服务来获取数据用于构建网页。

拍卖网站ebay.com也从一体架构发展成基于服务的架构。应用层包含多个独立的应用。每个应用实现特定功能模块(如购买或销售)的业务逻辑。每个应用使用X轴的分隔,有些应用如搜索,使用Z轴分隔。Ebay.com也对数据库层采用X,Y,Z的组合伸缩方式。

变更

 

注:[1] 双披萨团队(two-pizza team):两个披萨就可以喂饱整个团队,指团队规模很小。

 

第一篇:一体化架构(Monolithic Architecture)

第二篇:微服务架构(Microservices Architecure)

            伸缩立方(Scale Cube)

第三篇:API网关(API Gateway)

 

http://my.oschina.net/douxingxiang/blog/357425

分享到:
评论

相关推荐

    w169 Microservices Arhitecture 微服务架构 Page29 EN-CN.pdf

    Opengroup的技术白皮书《w169 Microservices Architecture》提供了微服务架构的参考模型,它详细描述了微服务架构的各个组件以及它们之间的关系。在微服务架构中,应用被分解为服务的集合,每个服务代表了业务的一个...

    GoldenGate19.1微服务Microservices的安装和配置-最新版本.docx

    Oracle GoldenGate 19.1 是一款用于实时数据复制和数据集成的工具,它引入了微服务架构,使得组件更加模块化,便于管理和扩展。在本文档中,我们将详细探讨如何在最新的19.1版本中安装和配置GoldenGate的微服务。 1...

    微服务架构及设计模式.docx

    微服务架构(Microservices Architecture, MSA)是一种将单个应用程序开发为一组小型、独立部署的服务的方法。这些服务围绕着业务功能构建,可以独立地部署、扩展和维护。微服务架构的核心优势在于其能够提高开发效率...

    广电网络云平台微服务架构设计.pdf

    微服务架构(Microservices Architecture)是一种面向服务的架构模式,它倡导将单一应用程序划分成一组小服务,每个小服务围绕特定业务功能构建,且运行在自己的进程中,服务之间通过轻量级的通信机制进行交互。...

    Reactive_Microservices_Architecture.pdf

    根据文件内容,这里涵盖了与“Reactive Microservices Architecture”相关的知识点,包括分布式系统的设计原则和响应式微服务架构的概念、实践与特点。以下是对文件内容的知识点展开: 首先,“Reactive ...

    .NET实现微服务架构

    微服务架构(Microservices Architecture)是将系统拆分为多个服务,俗称为应用服务。应用服务实现单一、具体的业务应用功能,支持独立部署维护,多个应用服务构建成系统。应用服务之间通过轻量级通信框架进行,并且...

    微服务架构课程大全.pdf

    微服务架构(Microservices Architecture)是一种设计模式,它的核心思想是将一个大型的、单一的应用程序拆分为多个独立部署的小型服务。每个服务运行在自己的进程中,并通常围绕业务能力组织。微服务之间的通信通常...

    microservice_architecture_tutorial.pdf

    微服务架构(Microservice Architecture,简称MSA)是一种服务导向架构(Service-oriented Architecture,简称SOA)的特殊设计模式。它是一种开源的方法论,在这种服务架构中,所有的进程将通过最小的粒度进行相互...

    微服务架构——应用产品的微服务化之路—拆分与重构 共38页.pdf

    微服务架构(Microservices Architecture,简称MSA)是一种将复杂的应用程序分解为一系列小型、独立的服务的架构方式。这种架构方法强调每个服务都应该围绕特定的业务功能构建,并能够独立部署、管理和扩展。与传统...

    .NET Microservices:Architecture for Containerized .NET Applications

    《.NET Microservices: Architecture for Containerized .NET Applications》是一本深入探讨如何使用微服务架构构建基于.NET的容器化应用程序的专业书籍。随着企业对容器技术的广泛应用,尤其是Docker的普及,开发...

    微服务分布式架构的GIS公有云平台实践.pdf

    微服务架构(Microservices Architecture)是一种将应用程序设计为一系列小的、独立的服务的架构方式,每个服务运行一个特定的业务功能,并通过定义良好的接口进行通信。与单体架构相比,微服务架构能够提升系统的可...

    graffle Microservices_architecture

    "graffle Microservices_architecture" 提供了一个专门用于描绘微服务架构的Omnigraffle模板,这是一款强大的图形设计工具,特别适合创建流程图、组织结构图以及各种技术架构图。 在微服务架构中,每个服务都是一个...

    Springcloud微服务架构基础知识解析

    Springcloud微服务架构基础知识解析 微服务架构基础知识解析是当前软件开发领域中非常重要的一个概念,了解微服务架构的基础知识对于学习或者工作具有非常重要的参考价值。下面我们将详细介绍微服务架构的基础知识...

    NET-Microservices-Architecture-for-Containerized-NET-Applications

    标题“NET-Microservices-Architecture-for-Containerized-NET-Applications”和描述中提及的“微服务架构推荐”,“基于Docker容器技术”,“Core 2.0技术”为我们提供了关于.NET微服务架构和在容器化.NET应用程序...

    NET-Microservices-Architecture

    微软推出的“.NET Microservices Architecture”指南便是针对这一架构模式下的容器化应用提供详尽指导的技术文档。该文档由微软开发者部门以及.NET和Visual Studio产品团队出版,为开发者们展示了如何使用.NET框架和...

Global site tag (gtag.js) - Google Analytics