服务网格定义
- 轻量级的网络代理
- 应该无感知
- 应用之间的流量由服务器网格接管
- 服务间的调用可能出现的超时 ,重试,监控,追踪等工作下沉到服务网格层处理
● 如下图所示:深色代表应用,青灰色代表网络中轻量级的网络代理.代理之间可以相互通信,而应用之间的通信完全由代理来进行,如果只看代理部分,可以看到一个网状结构,服务网格由此得名.
● 网格一般由数据平面和控制平面组成,数据平面负责在服中部署一个称为边车(sidecar)的请求代理,控制平面负责请求代理之间的交互,以及用户与请求代理的交互.
优势
● 随着服务数量的增长,每个服务都需要自己管理负责的服务间的网络通信,也让开发人员头疼.也变得 越来难以管理,这要求服务治理包含很多功能.例如:服务发现,负责均衡,故障转移,服务度量指标收集和监控等.
微服务
● 要讨论服务网格(Service Mesh) ,就必须提到微服务.微服务自 2012 年被提出了,就继承了穿透 SOA 架构得基础,并在理论和工程实践中形成新的标准,热度不断攀升甚至由成为默认软件架构得趋势
- 微服务应该具备得特点
- 在机构上将原有得从技术角度拆分得组件,升级为业务角度拆分得独立运行得服务,这些服务具备各自得实现平台,并且独自占有数据 ,在服务之间以智能端点和哑管道得方式通信.
- 在工程上,从产品而非项目得角度 进行设计,强调迭代,自动化和面向故障得设计方法
- 微服务得好处与坏处
好处
- 提高应用得伸缩性
- 方便部门或业务之间得协助
- 提高自动化程度,减少增耗
坏处
- 实例数量急剧增长,对部署和运维自动化要求更高
- 使用网络调用 API,因此对网络得依赖更高
- 调用链路变长,分布式跟踪成为必选
- 日志分散,跟踪和分析难度加大
- 服务分散,易受攻击
- 自动伸缩,路由管理,故障控制,存储共享等
因此出现了 kubernetes 解决微服务架构产生得一些问题,在进程级别为微服务提供了部署 ,调度,伸缩,监控,日志等功能,但是通信和联系更加复杂,其中得观测和服务质量保障成为微服务方案的短板,因此 service mesh 登场了
Istio
● Istio 以 Envoy 为数据平面,通过 Sidecar 的方式让 Envoy 同业务容器一起运行,并劫持其通信,接收控制平面的统一管理,在此基础上为服务之间的通信提供丰富的连接,控制,观察,安全等特性.