Service Mesh 是为服务时代的 TCP 协议
通信底层需要底层能够传输字节吗喝电子信号的物理层完成, 在 TCP 协议出现之间,需要服务自己处理 通信的连接,丢包,乱序,重试等一系列问题。也就是说服务实现过程中,需要考虑网络传输的问题。
为了避免每个服务都需要自己实现一套相似都网络传输处理逻辑, 于是有了 TCP 协议, 解决了网络传输过程中的流量控制问题,把网络传输从服务实现中抽取出来。
TCP 出现之后,机器之间的网络通信不再是问题,但是随着分布式系统, BigTable/MapReduce 等分布式系统蓬勃发展, 分布式系统对通信提出了新对通信语义,入熔断策略, 负载均衡, 服务发现,认证和鉴权,trace和监控, 于是便有了微服务。第一代微服务在自己对服务中实现服务发现和熔断。
为了避免每个服务自己实现一套分布式通信对语义功能, 开出出现了一些微服务框架,Spring Cloud, 这些框架实现了分布式系统的服务发现,熔断,负载均衡等。使得开发人员使用少量的框架代码就能够实现分布式系统。
微服务解决了服务发现,负载均衡,服务熔断等问题,但是也有了一些新等问题。
如何解决这个问题,采用代理对思想解决。把分布式服务通信抽象为一层,这一层中实现负载均衡。服务发现,认证鉴权,监控追踪,流量控制等。作为一个以服务对等的代理服务存在和服务部署在一起。接管服务的流量,通过代理之间的通信完成服务之间的通信。
全局部署图如下,像一个网格, 蓝色部分是代理服务,绿色部分是服务本身。
暂时去掉服务,这样有了 Service Mesh 服务网格
Service 1.0 中由一系列服务代理构成, 为了提供统一的运维入口,演化成了统一的集中时管理面板。所有的单机代理组件通过和控制面板之间交互进行网络拓扑策略的更新和单机数据的汇报。
控制面板的全局部署视图
服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。
优点总结:
挑战: