内容纲要
什么的 Server Mesh ?
Server Mesh 是一组以轻量级网络代理的方式跟服务组合在一起的,用于处理服务于服务之间的通信问题的技术基础结构。这种技术在跟服务组合的时候,可以做到让服务无感知的方式实现服务治理。由 Server Mesh 构造的网络,具有高可靠性,尤其适合云原生应用。
- 作用
- 处理服务于服务之间的通信
- 实现方式
- 以轻量级的网络代理构成
- 特点
- 可以以服务无感知的方式实现服务治理
- 场景
- 云原生应用
实现原理
SideCar
即轻量级网络代理。
-
作用
- 转发服务之间的调用
-
工作流程
- 每个服务消费者、提供者本地都部署一个 SideCar
- 服务消费者、提供者只实现业务代码
- 消费者消费时,向本地 SideCar(正向代理) 发起请求
- SideCar 根据请求向注册中心查询(得到请求节点)
- 根据负载均衡策略选择节点
- 向这个节点的 SideCar 发起请求
- 提供者本地的 SideCar(反向代理) 接到请求
- SideCar 完成流量统计、限流功能
- 把请求转发到服务提供者
- 请求完成



-
实现方式
- 基于 iptables 的网络拦截



- 协议转换



- 基于 iptables 的网络拦截
Control Plane
- 作用
- 向SideCar 发送各种指令(以完成服务治理)
- 服务发现:服务提供者 SideCar 注册服务到 Control Plane 注册中心
- 负载均衡:SideCar 通过获取 Control Plane 注册中心的配置(可以动态修改)来实现负载均衡
- 请求路由:SideCar 通过获取 Control Plane 获得节点列表(节点列表可以修改:A/B 测试等)来实现请求路由
- 故障处理:略
- 安全认证:略
- 监控上报:略
- 日志记录:略
- 配额控制:略
- 向SideCar 发送各种指令(以完成服务治理)



实现
istio
一个用于连接、保护、控制和观测服务的平台。



整体架构



- Proxy(SideCar)
- 支持 HTTP/1.1、HTTP/2、gRPC、TCP 请求
- 采用 Envoy(专门为大型 SOA 架构设计的 L7 代理和通信总线)
- 能力
- 服务发现、服务注册、负载均衡、限流降级、超时熔断、动态路由、监控上报、日志推送等
- 特点
- 性能损耗低:使用 C++ 实现,且对系统资源占用小
- 可扩展性高:提供可插拔过滤器设计(用户可以定制开发自己的过滤器)
- 动态可配置:对外提供统一 API,通过 API 实现动态配置(不需要重启)
- CDS:集群发现服务
- RDS:路由发现服务
- LDS:监听器发现服务
- EDS:EndPoint 发现服务
- HDS:健康检查服务
- ADS:聚合发现服务
- 能力
- Control Plane
- Pilot
- 作用:流量控制
- 核心组件
- Rules API:对外封装统一 API(供服务开发者、运维调用),可以用于流量控制
- Envoy API:对内封装统一 API(供 Envoy 调用),获取注册信息、流量控制信息等
- 抽象模型层:对服务的注册信息、流量控制规则等进行抽象,使其描述与平台无关
- 平台适配层:用于适配个平台(Kubernetes、Mesos 等),把平台特定(注册、资源)信息转换成抽象模型层定义的平台无关的描述



- 实现
- 服务发现和负载均衡
- 服务提供者通过 Proxy 注册到 Pilot
- 服务消费者通过 Proxy 到 Pilot 查询服务节点,并以某种负载均衡算法选择其中某个节点进行请求
- Proxy 定期检查缓存的服务提供者的节点健康状态(不健康的会剔除)



- 请求路由
- Pilot 对服务的版本、环境等进行细分
- 向 Proxy 下发路由规则
- Proxy 根据规则进行请求



- 超时重试
- Proxy 默认转发 HTTP 的超时时间为 15 秒,可以通过 Pilot 的 Rules API 进行设置
- 重试次数也可以通过 Rules API 进行设置
- 故障注入
- 作用:在不杀死节点的情况下,通过修改路由规则,将故障注入到网络中,以此来观察服务的健壮性等
- 原理
- 在 TCP 层制造数据包的延迟或损坏(模拟服务超时、调用失败场景)
- 服务发现和负载均衡
- Mixer
- 作用:实现策略控制、监控日志收集等
- 原理: 每次 Proxy 转发请求都调用 Mixer
- 高可用、低延迟
- Proxy 端本地缓存(降低 Proxy 端对 Mixer 的调用延迟)
- Mixer 本地缓存(减低延迟;减少后端基础设施故障带来的影响)



- 策略控制(在 Mixer 中配置)
- 对服务调用进行速率限制
- 对服务调用进行访问控制
- 日志收集(在 Mixer 中配置)
- 高可用、低延迟
- Citadel
- 作用:保证服务之间访问的安全(跟 Proxy、Pilot、Mixer 配合)
- Citadel 里存储秘钥和证书
- 通过 Pilot 把授权策略和安全命名信息分发给 Proxy
- Proxy 与 Proxy 之间调用使用双向 TLS 认证(保证服务安全)
- Mixer 管理授权和审计



- 作用:保证服务之间访问的安全(跟 Proxy、Pilot、Mixer 配合)
- Pilot