前面,我讨论了Sidecar边车模式,这是一个非常不错的分布式架构的设计模式。因为这个模式可以有效地分离系统控制和业务逻辑,并且可以让整个系统架构在控制面上可以集中管理,可以显著地提高分布式系统的整体控制和管理效率,并且可以让业务开发更快速。
那么,我们不妨在上面这个模式下think big一下。假如,我们在一个分布式系统中,已经把一些标准的Sidecar给部署好了。比如前面文章说过的熔断、限流、重试、幂等、路由、监视等这些东西。我们在每个计算结点上都部署好了这些东西,那么真实的业务服务只需要往这个集群中放,就可以和本地的Sidecar通信,然后由Sidecar委托代理与其它系统的交互和控制。这样一来,我们的业务开发和运维岂不是简单之极了?
是啊,试想一下,如果某云服务提供商,提供了一个带着前面我们说过的那些各式各样的分布式设计模式的Sidecar集群,那么我们的用户真的就只用写业务逻辑相关的service了。写好一个就往这个集群中部署,开发和运维工作量都会得到巨大的降低和减少。
# 什么是Service Mesh
这就是CNCF(Cloud Native Computing Foundation,云原生计算基金会)目前主力推动的新一代的微服务架构——Service Mesh服务网格。
在[What’s a service mesh? And why do I need one?](https://buoyant.io/2017/04/25/whats-a-service-mesh-and-why-do-i-need-one/) 中,解释了什么是Service Mesh。
A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware.
Service Mesh这个服务网络专注于处理服务和服务间的通讯。其主要负责构造一个稳定可靠的服务通讯的基础设施,并让整个架构更为的先进和Cloud Native。在工程中,Service Mesh基本来说是一组轻量级的服务代理和应用逻辑的服务在一起,并且对于应用服务是透明的。
说白了,就是下面几个特点。
- Service Mesh是一个基础设施。
- Service Mesh是一个轻量的服务通讯的网络代理。
- Service Mesh对于应用服务来说是透明无侵入的。
- Service Mesh用于解耦和分离分布式系统架构中控制层面上的东西。
说起来,Service Mesh就像是网络七层模型中的第四层TCP协议。其把底层的那些非常难控制的网络通讯方面的控制面的东西都管了(比如:丢包重传、拥塞控制、流量控制),而更为上面的应用层的协议,只需要关心自己业务应用层上的事了。如HTTP的HTML协议。
[Pattern: Service Mesh](http://philcalcado.com/2017/08/03/pattern_service_mesh.html) 这篇文章里也详细解释了Service Mesh的出现并不是一个偶然,而是一个必然,其中的演化路径如下。
一开始是最原始的两台主机间的进程直接通信。
然后分离出网络层来,服务间的远程通信,通过底层的网络模型完成。
再后来,因为两边的服务在接收的速度上不一致,所以需要应用层中实现流控。
后来发现,流控模块基本可以交给网络层实现,于是TCP/IP就成了世界上最成功的网络协议。
再往后面,我们知道了分布式系统中的8个谬论 [The 8 Fallacies of Distributed Computing](https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing) ,意识到需要在分布式系统中有"弹力设计"。于是,我们在更上层中加入了像限流、熔断、服务发现、监控等功能。