微服务(Microservices)是业界最近的流行语,每一个人好像都在以这样或那样的方式谈论它。如今让咱们理解什么是微服务?在本篇教程中,咱们会试着理解微服务的定义、概念以及原则。java
今天,微服务是SOA(面向服务的架构体系)以后日趋流行的架构体系之一。若是你紧跟业界趋势,你会发现商业机构再也不像几年前那样开发大型应用来管理它们的端对端业务功能,而是选择那些快速并且敏捷的应用,这样能够花费更少的成本。web
微服务有助于打破大型应用的局限而且能够在系统里面构建逻辑独立的更小的系统。好比说,经过使用Amazon AWS,你能够绝不费力地构建一个云应用。这是一个说明微服务能干什么事情的很是好的例子。数据库
一般状况,微服务经过使用被普遍接受的轻量协议来交互,好比HTTP和REST,或者消息协议,好比JMS(Java Message Service)或者AMQP(Advanced Message Queuing Protocol)。在某些特定的场景,开发者也可使用更多的特殊协议。后端
如今让咱们检查微服务“必须拥有”(must have)的原则。服务器
单一职责原则是 SOLID design pattern其中原则之一。它表示一个单元、一个类、一个函数或者一个微服务有且只有惟一指责。架构
在任什么时候候,一个微服务都不该该拥有多个指责。运维
微服务应该注重特定的业务功能而且保证它可以解决问题。一个微服务永远也不该该限制它选择合适的技术栈或者最适合解决业务目标的后端数据库。函数
为了解决许多业务问题,在某些方面须要作出一些妥协,这一般是咱们设计单体应用的约束和限制。微服务可以让你在解决手头上问题的时候选择最优方案。微服务
另外一个这种设计的重要方面与开发先后的责任相关。在大型组织当中,一般一个团队开发完应用,在一些知识交接事后,就会把它交给运维团队。然而在微服务当中,开发团队不只仅是开发应用——拥有它,而且对它将来的运维负责。ui
You build it,you own it!
这样会使开发者与他们软件的平常运维接触,而且对他们是怎么构建被用户在真实世界中使用的产品有更好的理解。
准备和建设微服务的基础设施是另一个十分重要的需求。一个服务应该是可独立部署的而且拥有全部的依赖,包括库依赖,甚至是像web服务器、容器或或者抽象化物理资源的虚拟机。
一个微服务和SOA的主要区别之一在于它们的自治级别。大多数的SOA实现提供了服务级别的抽象,然而微服务则更加深刻,它抽象了环境的实现和执行。
在传统的应用开发中,咱们构建一个WAR或者EAR,而后将它部署到JEE应用服务器,好比JBoss、WebLogic和WebSphere等等。咱们也许会部署多个应用到同一个JEE容器。在微服务架构的理想条件下,每一个微服务被构建成一个fat Jar,嵌入全部的依赖而且以一个独立的Java进程运行。
在设计一个微服务时,咱们应该把各类失败的可能性放在心上。咱们应该常常问本身,若是服务有时候失效了或者宕机了怎么办?这些是很是重要的问题,而且咱们需在开始实际编码前解决它们——准确评估服务失效会多大程度地影响用户体验。
Fail fast(快速失败)是另一个用来构建可容错性、弹性系统的概念。这种哲学倡导构建可能出错的系统,而不是永不出错的系统。因为服务可能在任什么时候间失效,因此可以快速检测出失效很是重要。固然若是能够的话,最好还可以让服务自动恢复。
微服务着重于应用的实时监控,用于检查系统元素(好比数据库每秒收到多少个请求)和业务相关指标(好比每秒收到多个订单)。语义监控能够提供一个检测错误的告警系统,来让开发团队及时跟进以及查明错误。
相比传统的多层级单体架构,微服务提供了许多的好处。让咱们把它们列出来:
原教程一共13篇,后续会陆续翻译(ban yun)过来。