在微服务架构中,服务之间势必需要集成,而这种集成关系远比简单的API调用要复杂。在本文中,我们将系统分析服务集成的方式以及在微服务架构中的表现形式。关于服务之间的集成存在一些通用的模式,我们也将在梳理这些模式的同时给出实现过程中的最佳实践。
业界关于系统集成存在一些主流的模式和工程实践,包括文件传输(FileTransfer)、共享数据库(Shared Database)、远程过程调用(RPC)和消息传递(Messaging)。这四种主流的集成模式各有优缺点。文件传输方式最大的挑战在于如何进行文件的更新和同步;如果使用数据库,在多方共享的条件下如何确保数据库模式统一是一个大问题;RPC容易产生瓶颈节点;而消息传递在提供松耦合的同时也加大了系统的复杂性。RPC和消息传递面对的都是分布式环境下的远程调用,远程调用区别于内部方法调用,一方面网络不一定可靠和存在延迟问题,另一方面集成通常面对的是一些异构系统。
对于微服务架构而言,我们的思路是尽量采用标准化的数据结构并降低系统集成的耦合度。我们会根据需要采用上图中所示的四种典型的系统集成模式,同时还会引入其它一些手段来达到服务与服务之间的有效集成。个人把微服务架构中服务之间的集成模式分为如下图所示的四大类。
-
接口集成
接口集成是服务之间集成的最常见手段,通常基于业务逻辑的需要进行集成。RPC、REST、消息传递和服务总线都可以归为这种集成方式。
-
数据集成
数据集成同样可以用于微服务之间的交互,共享数据库是一个选择,但也可以通过数据复制的方式实现数据集成。
-
客户端集成
由于微服务是一个能够独立运行的整体,有些微服务会包含一些UI界面,这也意味着微服务之间也可以通过UI界面进行集成。
-
外部集成
这里把外部集成单独剥离出来的原因在于现实中很多服务之间的集成需求来自于与外部服务的依赖和整合,而在集成方式上也可以综合采用接口集成、数据集成和UI集成。
接下来我们将对这四大类集成策略展开讨论,给出对应的实现技术的简单描述。
(1)接口集成
首先我们讨论一下RPC。RPC(Remote Process Call,远程过程调用)架构是服务之间进行集成的最基本方式。我们可以对RPC架构进行剖析,得到下图的结构图,该结构图包括了微服务之间在分布式环境下交互时所需的各个基本功能组件。
从上图中,可以看到RPC架构有左右对称的两大部分构成,分别代表了一个远程过程调用的客户端和服务器端组件。客户端组件与职责包括负责编码和发送调用请求到服务方并等待结果、负责维持客户端和服务端连