微服务架构原理与开发实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.3 服务调用设计

SOA的服务调用标准提出了3个核心概念,即服务提供者、服务消费者和服务注册,应用程序可以通过服务注册中心来管理服务提供者的服务信息,服务提供者可以主动向服务注册中心注册自己的服务信息,而服务消费者可以从服务注册中心订阅服务信息,服务注册中心通过消息等方式通知与服务消费者相关的服务提供者的注册信息,SOA服务调用设计图如图1.3所示。

图1.3 SOA服务调用设计图

笔者认为SOA的设计精华就在图1.3中,不管微服务是否属于SOA,它也采用了这一设计,可以说微服务和SOA在战术设计上是类似的,但由于战略设计的不同,微服务后来选择了更轻量级的技术实现。

或许大家不是很明白,下面举例说明,服务注册与发现实例图如图1.4所示。

图1.4 服务注册与发现实例图

一个公司往往有自己的OA系统,而OA系统中有一个最常用的功能——通讯录,通讯录里存储着公司员工的通信方式,如邮件、电话、地址等。当员工的通信信息有变动时,员工会主动在通讯录中更新自己的信息;当新员工入职或老员工离职时,也会有专人新增和删除通讯录中的员工信息。

这时,如果部门秘书给部分人发送邮件,传达部门经理的一些工作任务安排,他(她)可以通过通讯录来查询这些人的邮箱信息,得到邮箱地址信息后,就可以发送邮件了。此时,这个部门秘书就相当于服务消费者,通讯录就好比服务注册中心,而每个员工就是各个服务的提供者。

当然,关于服务注册与发现在实际应用中的场景可能远比这个复杂,功能也更多,这里的例子可能不太恰当,但也能反映最基础的服务处理过程,希望能够帮助大家更快地理解这些概念。

了解了SOA的设计理念后,回到最初的问题,微服务与SOA到底是什么关系呢?微服务是SOA的衍生吗?可能是因为SOA的提出早于微服务近10年,并且运用了很多年,而且微服务的设计方式确实与SOA的一些设计相似,所以很多人都认为SOA的概念应该包含微服务,或者微服务本身就是一种SOA的变体。

但事实上大多数的时候被称为“SOA”的东西与本书中所描述的微服务有很大不同,最常见的例子就是ESB(Enterprise Service Bus,企业服务总线),这里对ESB不做介绍。总之,ESB是一个不太好的实现,完全的服务导向和过度的追求标准化带来了更多的复杂性和技术瓶颈,也许SOA设计之初和现在的微服务目标或倡导的概念类似,但其后来在战略上的偏执,导致了实施者过度关注于技术和标准,忽略了真正的业务价值,最终导致SOA慢慢被微服务所取代。战略思想上的不一致也导致那些致力于敏捷的微服务拥护者完全拒绝给微服务加上SOA的标签。

所以,笔者更倾向于把微服务当作一个独立的新概念,用微服务来定义这种新的架构风格,以区别于SOA的设计体系。

上面介绍的是与SOA相似的架构模式,下面介绍一个完全相反的架构模式,即单体式架构。该架构模式至今仍在软件架构的舞台上占据着相当大的位置。下面通过分析传统的单应用架构模式,帮助我们更清楚地了解微服务的设计意图。