为服务中的serviceMesh和sidecar
概述(what)
serviceMesh:也叫服务网格。它看起来确实就像是一个由若干服务代理所组成的错综复杂的网格。
sidecar:也叫边车模式。sidecar是一种代理模式。它将分布式服务的通信抽象为单独一层,在这一层中实现负载均衡、服务发现、认证授权、监控追踪、流量控制等分布式系统所需要的功能,作为一个和服务对等的代理服务,和服务部署在一起,接管服务的流量,通过代理之间的通信间接完成服务之间的通信请求
微服务的发展:
第一代微服务:
在TCP出现之后,机器之间的网络通信不再是一个难题。分布式系统特有的通信语义又出现了,如熔断策略、负载均衡、服务发现、认证和授权、quota限制、trace和监控等等,于是服务根据业务需求来实现一部分所需的通信语义。
第二代微服务:
为了避免每个服务都需要自己实现一套分布式系统通信的语义功能。一些面向微服务架构的开发框架出现了,这些框架实现了分布式系统通信需要的各种通用语义功能:如负载均衡和服务发现等,因此一定程度上屏蔽了这些通信细节,使得开发人员使用较少的框架代码就能开发出健壮的分布式系统。
第一代Service Mesh:
第二代微服务有一定的缺陷。
1、虽然框架本身屏蔽了分布式系统通信的一些通用功能实现细节,但开发者却要花更多精力去掌握和管理复杂的框架本身;
2、开发框架通常只支持一种或几种特定的语言,想因地制宜的用多种语言实现架构体系中的不同模块也很难做到;
3、框架以lib库的形式和服务联编,复杂项目依赖时的库版本兼容问题非常棘手;
代理模式(边车模式)应运而生,这就是第一代Service Mesh,它将分布式服务的通信抽象为单独一层,在这一层中实现负载均衡、服务发现、认证授权、监控追踪、流量控制等分布式系统所需要的功能,作为一个和服务对等的代理服务,和服务部署在一起,接管服务的流量,通过代理之间的通信间接完成服务之间的通信请求,这样上边所说的三个问题也迎刃而解。
从一个全局视角来看,就会得到如下部署图:
略去服务,只看Service Mesh的单机组件组成的网络:
此时:所谓Service Mesh,也就是服务网格了。它看起来确实就像是一个由若干服务代理所组成的错综复杂的网格。
第二代Service Mesh:
在第一代的基础上,提供统一的上层运维入口,演化出了集中式的控制面板,所有的单机代理组件通过和控制面板交互进行网络拓扑策略的更新和单机数据的汇报。这就是以Istio为代表的第二代Service Mesh。
总结:
Service Mesh具有如下优点:
- 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑;
- 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可;
- 对应用透明,Service Mesh组件可以单独升级;