有了微服务和云原生,为何还要懂Service Mesh?

图片

Service Mesh技术做为新一代微服务架构,有效的解决了当前微服务架构和治理过程当中的痛点问题,一经推出便引发很大的反响,近两年持续成为架构领域的热点。特别是Google联合Lyft等公司推出的Istio,架构优雅,功能强大,迅速成为Service Mesh领域的明星项目。编程


什么是Service Mesh安全

图片


做为Service Mesh技术探索和实践的先行者,全球第一个真正的Service Mesh项目Linkerd负责人、Buoyant公司创始人兼CEO William Morgan第一次完整地阐述了Service Mesh。按照William Morgan的定义,Service Mesh是一个致力于解决服务间通讯的基础设施层,其负责在现代云原生应用的复杂服务拓扑下实现请求的可靠传递,在实践中Service Mesh一般实现为一组轻量级网络代理,这些代理与应用程序部署在一块儿,而且对应用程序透明。
从上述Service Mesh的定义看,基础设施层是Service Mesh的定位,致力于解决本书第1章提出的微服务基础设施标准化、配置化、服务化和产品化问题;服务间通讯是Service Mesh技术面对的问题域,对微服务屏蔽通讯的复杂度,解决微服务的通讯治理问题;请求的可靠传递是Service Mesh的目标;轻量级网络代理是Service Mesh的部署方式;对应用程序透明是Service Mesh的亮点和特点,Service Mesh接入对业务无侵入,能够很是方便地获取Service Mesh带来的便捷性,算是Service Mesh的一大优点。
综合来看,Service Mesh主要解决用户以下3个维度的痛点需求。
完善的微服务基础设施
Service Mesh经过将微服务通讯下沉到基础设施层,屏蔽了微服务处理各类通讯问题的复杂度,能够当作是微服务之间的抽象协议层,抽象层面能够当作是TCP/IP协议栈的一部分。对于微服务的开发者来讲,好比当前使用HTTP或者Thrift进行RPC通讯时,你不须要关注TCP/IP这一层的具体实现;有了Service Mesh以后,微服务也再也不须要关注RPC通讯(包含服务发现、负载均衡、流量调度、限流降级、监控统计等)的一切细节,真正像本地调用同样使用微服务,通讯相关的一切工做直接交给Service Mesh。
所以,对于一些须要经过微服务改造提高业务敏捷性,但没有相应技术能力的中小团队来讲,能够借助Service Mesh提供的完善微服务基础设施,加速微服务的落地。
语言无关的通讯和链路治理
功能上,Service Mesh并无提供任何新的特性和能力,Service Mesh提供的全部通讯和服务治理能力在Service Mesh以前的技术中均能找到,好比Spring Cloud就实现完善的微服务RPC通讯和服务治理支持。Service Mesh改变的是通讯和服务治理能力提供的方式,经过将这些能力实现从各语言业务实现中解耦,下沉到基础设施层面,以一种更加通用和标准化的方式提供,屏蔽不一样语言、不一样平台的差别性,这样不只有利于通讯和服务治理能力的迭代和创新,业务使用的时候也会更加方便。
Service Mesh避免了多语言服务治理上的重复建设,经过Service Mesh语言无关的通讯和服务治理能力,助力多语言技术栈的效率提高。
通讯和服务治理的标准化
  1. 微服务治理层面,Service Mesh是标准化、体系化、无侵入的分布式服务治理平台。网络

  2. 标准化方面,Sidecar成为全部微服务流量通讯的约束标准,同时Service Mesh的数据平面和控制平面也经过标准协议进行交互。架构

  3. 体系化方面,从全局考虑,提供多维度立体的微服务可观测能力(Metric、Trace、Logging),而且提供体系化的服务治理能力,好比限流、熔断、安全、灰度等;最为重要的是,Service Mesh经过透明无侵入的方式提供全面的服务治理能力,对微服务自己不会带来直接影响。并发


经过标准化,带来一致的服务治理体验,减小多业务之间因为服务治理标准不一致带来的沟通和转换成本,提高全局服务治理的效率。


Service Mesh的基本模式app

图片


根据Service Mesh的发展历程和使用方式,咱们能够把Service Mesh划分为两个模式。
Sidecar模式
在Service Mesh发展早期,Service Mesh以Sidecar的形态存在。Sidecar模式下,网络代理服务在微服务旁边,为微服务提供通讯和链路治理功能。所以,数据平面代理服务也常常被简称为Sidecar。
此时,只有数据平面的网络代理服务没有控制平面,和外部基础设施服务的交互直接在网络代理服务中进行。
Sidecar模式能够看做是第一代Service Mesh,表明有早期的Linkerd和Envoy。
第一代Service Mesh经过采用Sidecar模式,经过将通讯和通讯链路治理功能从微服务中剥离出来,实现了通讯基础设施的下沉和服务化,这里也体现了架构解耦的思想,经过解耦减小了微服务的负担。
第二代Service Mesh模式
Sidecar模式的Service Mesh有一个突出的问题,将通讯和通讯链路治理的全部功能都放到这个代理服务中,致使数据平面代理很重,而且因为承载了太多的特性和功能,使得数据平面代理的更新和修改特别频繁,频繁的更新和升级会致使代理服务出问题的几率增大,影响代理服务的稳定性。同时,Service Mesh模式下,数据平面代理承载了微服务通讯的所有流量,对稳定性要求极高,这个服务的任何故障都会对整个系统的稳定性产生很大的影响。为了解决上述频繁升级和稳定性之间的矛盾,将策略和配置决策逻辑从代理服务中脱离出来,造成了独立的控制平面,这就是第二代Service Mesh。
第二代Service Mesh最重要的标志就是控制平面和数据平面分离。数据平面和控制平面并非新的概念,路由器/交换机等数据通讯产品架构上,就有运行于专门处理器上的控制平面和多个独立运行、用于路由或交换功能的数据平面。SDN(Software Defined Network,软件定义网络)将数据平面和控制平面分离,控制平面具备可编程性,使得网络更加智能、灵活和易扩展,激发了网络技术的又一次革命。
第二代Service Mesh借鉴了SDN的思路,基于控制平面和数据平面分离思想,有了完善的控制平面:①全部的代理服务都由控制平面掌控,由于控制平面能够控制整个系统,因此提供了强大的控制能力和策略能力;②将具体的控制逻辑从数据平面移除,简化了数据平面的设计,数据平面不须要和外部系统进行交互,数据平面彻底聚焦在变动频率很低的流量路由和转发逻辑上,提高了数据平面的稳定性。


Service Mesh架构负载均衡

图片


第二代Service Mesh的基本架构上分为数据平面和控制平面两个部分,大体以下图所示。

图片


数据平面
数据平面负责代理微服务之间的通讯,具体包含RPC通讯、服务发现、负载均衡、降级熔断、限流容错等,数据平面能够认为是将Spring Cloud、Dubbo等语言相关的微服务框架中通讯和服务治理能力独立出来的一个语言无关的进程,而且更注重通用性和扩展性。在Service Mesh中,再也不将数据平面代理视为一个个孤立的组件,而是将这些代理链接在一块儿造成一个全局的分布式网络。
控制平面 控制平面负责对数据平面进行管理,定义服务发现、路由、流量控制、遥测统计等策略,这些策略能够是全局的,也能够经过配置某个数据平面节点单独指定。控制平面经过必定的机制将策略下发到各个数据平面节点,数据平面节点在通讯时会使用这些策略。 以上内容摘自《Service Mesh微服务架构设计》一书,经出版方受权发布。 做者:刘俊海,好将来高级架构师,曾在滴滴、百度等知名互联网公司任职,超过8年C/C++开发和架构设计经验;精通服务框架和业务高可用技术,多年亿级流量环境下高并发和高可用实战经验,精通微服务架构和微服务基础设施,近期关注Service Mesh。