3.2 微服务与SOA
3.2.1 微服务与SOA之间的联系
面向服务的架构(SOA)是一个基于分布式的计算机软件设计中的体系结构模式,其中,应用程序组件通过通信协议(通常通过网络)向其他组件提供服务。通信可以涉及简单的数据传递,或者彼此协调以连接两个或多个服务。这些不同的服务执行一些小功能,如验证付款、创建用户账户、提供购物车服务等。
SOA不是关于如何模块化应用程序的,而是关于如何通过集成分布式,单独维护和部署软件组件来组合应用程序的。它通过技术和标准实现,使组件更容易通过网络进行通信和协作,尤其是IP网络。
SOA中有两个主要角色:服务提供者和服务使用者。消费者层是用户与SOA交互的点,提供者层由SOA中的所有服务组成。SOA体系采用企业服务总线(ESB)的通信方式。ESB是一种集成体系结构,允许通过公共通信总线进行通信,该通信总线由提供者和消费者之间的各种点对点连接组成。除此之外,数据存储在SOA中的所有服务中共享。SOA的简单视图如图3-4所示。
图3-4 SOA的简单视图
从某种程度上讲,微服务架构(MSA)是SOA发展的下一步。这种类型的架构将开发软件、Web或移动应用程序作为独立的服务套件(也称为微服务)来使用。创建这些服务仅用于一个特定的业务功能,如订单管理、库存管理、电子商务购物车、线上故事等。此外,它们相互独立,这意味着它们可以用不同的编程语言来实现,并且每个服务都有自己的数据库,或者在一些微服务之间共享数据库。微服务使用轻量级HTTP、REST或Thrift API进行相互通信。如图3-5所示为微服务架构的简单视图。
图3-5 微服务架构的简单视图
MSA与SOA推崇的思想类似,二者都被认为是基于服务的架构。这意味着这两种架构模式都非常强调将“服务”作为其架构中的主要组件,用于实现各种功能(包括业务层面和非业务层面的功能)。基于服务的架构的共性之一是其一般都是分布式架构,即服务组件都是通过远程访问协议来实现的,如REST、SOAP、AMQP、JMS、MSMQ、RMI或者.NET Remoting。
相对于单体式架构和分层式架构,MSA与SOA所使用的分布式架构有很多优势,包括可伸缩性、解耦能力及对开发、测试和部署的可控性等。分布式架构中的组件更趋向于自包含,因此其变更管理和维护也更容易,从而使得相应的应用也更稳定,响应也更快。分布式架构也非常适用于各模块之间耦合度较低、更加模块化的应用。
微软服务领域的先驱Martin Flower曾经说过:“我们应该将SOA视为微服务的超集。”也就是说,SOA与微服务架构是非常相似的,而它们的关系则可以定义为微服务是细粒度的SOA组件。换句话说,单个SOA组件可以被拆成多个微服务,而这些微服务通过分工协作,可以提供与原SOA组件相同级别的功能。就像认为XP或者Scrum是敏捷软件开发的一种特定方法一样,同样可以认为微服务架构是SOA的一种特定方法。