[Spring Cloud Tutorial翻译系列一]微服务-定义、原则、好处

微服务(Microservices)是业界最近的流行语,每一个人好像都在以这样或那样的方式谈论它。如今让咱们理解什么是微服务?在本篇教程中,咱们会试着理解微服务的定义、概念以及原则。java

微服务的定义

今天,微服务是SOA(面向服务的架构体系)以后日趋流行的架构体系之一。若是你紧跟业界趋势,你会发现商业机构再也不像几年前那样开发大型应用来管理它们的端对端业务功能,而是选择那些快速并且敏捷的应用,这样能够花费更少的成本。web

微服务有助于打破大型应用的局限而且能够在系统里面构建逻辑独立的更小的系统。好比说,经过使用Amazon AWS,你能够绝不费力地构建一个云应用。这是一个说明微服务能干什么事情的很是好的例子。数据库

单体架构VS微服务架构

在上图你能够看到,每一个微服务有它本身的业务层和数据库。这样设计的话,一个微服务的改变将不会影响到其它服务。

一般状况,微服务经过使用被普遍接受的轻量协议来交互,好比HTTP和REST,或者消息协议,好比JMS(Java Message Service)或者AMQP(Advanced Message Queuing Protocol)。在某些特定的场景,开发者也可使用更多的特殊协议。后端

微服务的原则

如今让咱们检查微服务“必须拥有”(must have)的原则。服务器

  1. 单一职责原则

单一职责原则是 SOLID design pattern其中原则之一。它表示一个单元、一个类、一个函数或者一个微服务有且只有惟一指责。架构

在任什么时候候,一个微服务都不该该拥有多个指责。运维

  1. 基于业务能力构建

微服务应该注重特定的业务功能而且保证它可以解决问题。一个微服务永远也不该该限制它选择合适的技术栈或者最适合解决业务目标的后端数据库。函数

为了解决许多业务问题,在某些方面须要作出一些妥协,这一般是咱们设计单体应用的约束和限制。微服务可以让你在解决手头上问题的时候选择最优方案。微服务

  1. 你构建它,你拥有它!

另外一个这种设计的重要方面与开发先后的责任相关。在大型组织当中,一般一个团队开发完应用,在一些知识交接事后,就会把它交给运维团队。然而在微服务当中,开发团队不只仅是开发应用——拥有它,而且对它将来的运维负责。ui

You build it,you own it!

这样会使开发者与他们软件的平常运维接触,而且对他们是怎么构建被用户在真实世界中使用的产品有更好的理解。

  1. 基础设施自动化

准备和建设微服务的基础设施是另一个十分重要的需求。一个服务应该是可独立部署的而且拥有全部的依赖,包括库依赖,甚至是像web服务器、容器或或者抽象化物理资源的虚拟机。

一个微服务和SOA的主要区别之一在于它们的自治级别。大多数的SOA实现提供了服务级别的抽象,然而微服务则更加深刻,它抽象了环境的实现和执行。

在传统的应用开发中,咱们构建一个WAR或者EAR,而后将它部署到JEE应用服务器,好比JBoss、WebLogic和WebSphere等等。咱们也许会部署多个应用到同一个JEE容器。在微服务架构的理想条件下,每一个微服务被构建成一个fat Jar,嵌入全部的依赖而且以一个独立的Java进程运行。

  1. 为失败设计

在设计一个微服务时,咱们应该把各类失败的可能性放在心上。咱们应该常常问本身,若是服务有时候失效了或者宕机了怎么办?这些是很是重要的问题,而且咱们需在开始实际编码前解决它们——准确评估服务失效会多大程度地影响用户体验。

Fail fast(快速失败)是另一个用来构建可容错性、弹性系统的概念。这种哲学倡导构建可能出错的系统,而不是永不出错的系统。因为服务可能在任什么时候间失效,因此可以快速检测出失效很是重要。固然若是能够的话,最好还可以让服务自动恢复。

微服务着重于应用的实时监控,用于检查系统元素(好比数据库每秒收到多少个请求)和业务相关指标(好比每秒收到多个订单)。语义监控能够提供一个检测错误的告警系统,来让开发团队及时跟进以及查明错误。

微服务的好处

相比传统的多层级单体架构,微服务提供了许多的好处。让咱们把它们列出来:

  • 在微服务设计中,架构师和开发者能够选择最适合每一个微服务的架构和技术。这样将最大限度地提升解决问题的灵活性。
  • 微服务实现了可选择的扩展性。好比说每一个服务能够独立地扩展或者减小,而且比单体设计方法花费更少的成本。
  • 微服务是独立的独立部署模块,当某个微服务不能按照咱们的须要执行时,能够用另外一个相似的微服务替换该微服务。它有助于采起正确的购买与构建决策,这一般是许多企业面临的挑战。
  • 微服务能够帮助咱们构建有机的系统(有机系统指的是经过添加愈来愈多的功能,在一段时期内横向扩展的系统)。因为微服务都是关于可独立管理的服务——它能够在咱们须要的时候增长服务却不影响现有的服务。
  • 技术更新是软件开发的障碍之一。然而在微服务当中,咱们能够独立地升级每一个微服务的技术而不是整个应用。
  • 因为微服务将服务运行环境和服务自己一块儿打包,因此这可使得多个不一样版本的服务共存在同一环境。
  • 最后,微服务能使短小精悍,迅速敏捷团队用于开发。同时团队将以微服务的边界进行组织。

原教程一共13篇,后续会陆续翻译(ban yun)过来。

相关文章
相关标签/搜索