微服务通信:服务网格与服务文档化
1. 服务网格概述
服务网格将与微服务间通信相关的通用功能推送到网格中,这减少了微服务内部需要实现的功能,同时保证了某些操作的一致性。服务网格实现的常见功能包括相互TLS、关联ID、服务发现和负载均衡等。
1.1 服务网格的优势
- 跨语言复用功能 :以往像Netflix要求所有非本地网络通信都在JVM之间进行,以复用经过测试的通用库。而使用服务网格,我们可以在不同编程语言编写的微服务之间复用通用的微服务间功能。
- 方便实现通用行为 :如果仅通过共享库实现通用功能,更改行为需要每个微服务引入新版本的库并重新部署。而使用服务网格,在推出微服务间通信的更改时具有更大的灵活性,无需重建和重新部署。
1.2 服务网格的工作原理
在微服务架构中,东西向流量通常多于南北向流量。一个南北向调用(如下单)可能会导致多个东西向调用。因此,在考虑用于边界内调用的代理时,必须注意这些额外调用可能带来的开销,这也是构建服务网格的核心考虑因素。
服务网格的架构旨在限制代理调用带来的影响,主要通过将代理进程分布在与微服务实例相同的物理机器上运行,以减少远程网络调用的数量。例如,订单处理器向支付微服务发送请求时,该调用首先会路由到与订单处理器在同一台机器上运行的代理实例,然后通过支付微服务的本地代理实例继续传递。订单处理器以为自己在进行正常的网络调用,却不知道该调用在本地机器上进行了路由,这样速度更快且更不容易出现分区问题。
服务网格的架构如下所示: