服务网格
服务网格是指专注处理服务间通信的基础设施,它负责在现代云原生组成的复杂拓扑中可靠地传递请求
治理模式:除了处理业务逻辑的相关功能外,每个微服务还必须实现此前单体应用模型中用于服务间通信的基础设施,甚至还包括分布式应用程序之间的通信环境中应该实现的其他网络功能,例如熔断、限流、应用跟踪、指标采集、服务发现和负载均衡等
实现模型经过演进三代:内嵌与应用程序,SDK和Sidecar
Sidecar
- 新一代的解决方案:让服务集中解决业务逻辑的问题,网络相关的功能则与业务逻辑剥离,并封装为独立的运行单元并作为服务的反向透明代理,从而不再与业务紧密关联
- 微服务的业务程序独立运行,而网络功能则以独立的代理层工作于客户端与服务之间,专门为代理的服务提供熔断、限流、追踪、指标采集和服务发现等功能;而这些由各服务的专有代理层联合组成的服务通信网络称为服务网格(service mesh)
数据平面与控制平面
- 数据平面:触及系统中的每个数据包或请求,负责服务发现、健康检查、路由、负载均衡、身份验证/授权和可观测性
- 控制平面:为网络中的所有正在运行的数据屏幕提供策略和配置,从而将所有数据平面联合构建为分布式系统,它不接触系统中的任何数据包或请求
控制平面组件
- 工作负载均衡调度程序:借助与底层的基础设施kubernetes完成服务及sidecar运行位置的调度决策
- 服务发现:服务网格中的服务发现
- sidecar代理配置api:各sidecar代理最终一致的方式从各种系统组件获取配置
- 控制平面ui:管理人员操作接口,用于配置全局级别的设置,例如部署,身份认证和授权、路由及负载均衡
服务网格的基本功能
- 控制服务间通信:熔断、重试、超时、故障注入、负载均衡和故障转移等
- 服务发现:通过专用的服务总线发现服务端点
- 可观测:指标数据采集、监控、分布式日志记录和分布式追踪
- 安全性:TLS/SSL通信和密钥管理
- 身份认证和授权检查:身份认证,以及基于黑白名单或RBAC的访问控制功能
- 部署:对容器技术的原生支持,例如docker和kubernetes
- 服务间的通信协议:HTTP 1.1 HTTP 2.0和gRPC
- 健康状态检测:监测上游服务的健康状态
服务网格实现方案
- Linkerd Linkerd使用Namerd提供控制平面
- Envoy 核心功能数据平面
- Istio 数据平面由Envoy实现