3.3 微服务架构
3.3.1 微服务架构概述
近年来,随着互联网的不断发展,微服务架构被越来越多的企业所接受,其应用的成功案例不断出现,例如,国外的Twitter、Netflix、Amazon和eBay等公司都已经从传统企业架构迁移到微服务架构。
微服务架构是面向服务的架构的进一步实现,其将传统的单体架构按照业务功能拆分为多个可独立部署、运行的微服务,通过良好的拆分,可使系统更好地满足软件体系架构中松耦合和高内聚的要求。
怎样才算满足微服务架构的要求?首先,微服务架构根据产品的业务功能模块来进行服务种类的划分,其分为两个部分:垂直划分和水平划分。其次,客户端可通过轻量级的API来调用微服务,如通过基于HTTP的方式来调用,目的是降低调用产生的性能开销。最后,服务需要确保高可用性,不能长时间无法响应,需要提供多个可替代的服务,以确保在某个服务出现故障时,可以自动调用其中一个正常工作的服务。
从微服务架构的相关概念和应用实践中可以总结出微服务架构具有以下特征。
(1)原子服务。
微服务的粒度是根据业务功能来划分的。每个服务的功能越有针对性,依赖其他服务的程度就越低,内聚性就越强,这种做法符合“高内聚、松耦合”的要求。
(2)应用自治。
每个被拆分的微服务都足够小且功能具有针对性,可以实现弹性收缩、不断升级和独立部署,并且对其他微服务不产生任何依赖。
(3)敏捷交付。
每个微服务都可以由较小规模的研发团队负责设计、开发、测试、部署、运行治理及发布等,是实现开发、运维一体化(DevOps)的基础。
(4)灵活部署。
微服务可以通过采用独立进程的方法进行服务器的部署,这就意味着在部署时,可以将多个相同的微服务部署到不同的服务器上,也可以选择在一台服务器上部署多个微服务实例,这种方式具备高可靠的水平扩展能力。当服务器为云端时,其相关部署可以通过利用轻量级的虚拟机容器,有效降低部署成本,提高资源的利用率。
(5)技术灵活。
在一体化的应用中,其通过采用某种确定的技术堆栈来实现。而将大型的应用拆分为服务后,这种情况就可以避免。每个服务均可以采用不同的技术手段和不同的编程语言来达到目的,充分体现了微服务技术异构性的优势。
(6)去中心化的服务。
微服务在设计型组织中通过授权决策达到去中心化的目的。这就意味着所有微服务节点都扮演着两个不同的角色,即控制节点和被控制节点,他们既是消息的接收者也是消息的实时发送者,从而达到了去中心化的目的。
(7)责任单一性。
微服务提倡单一责任制原则,即聚合所有因为相同原因而改变的元素,分割那些因为不同原因而改变的元素。该原则为微服务的划分提供了指导方针。如果一个服务提供多个API,那么就要确保每个API必须具备单一责任性。
(8)运行隔离性。
微服务架构是根据产品的业务功能模块来进行服务种类划分的,这使得服务相互隔离且互不影响。每个服务都在自己的进程中运行,而进程之间是隔离的,是安全的,进程内部或线程之间的资源是共享的。也就是说,一个服务出了问题,不会影响其他服务。