ServiceMesh(3)
前篇:
《ServiceMesh 究竟解决什么问题》
《什么是 Istio,ServiceMesh 最流行落地》
Istio 是 ServiceMesh 的产品化落地:
-
它帮助微服务之间建立连接,帮助研发团队更好的管理与监控微服务,并使得系统架构更加安全
-
它帮助微服务分层解耦,解耦后的 proxy 层能够更加专注于提供基础架构能力,例如:
(1)服务发现 (discovery)
(2)负载均衡 (load balancing)
(3)故障恢复 (failure recovery)
(4)服务度量 (metrics)
(5)服务监控 (monitoring)
(6)A/B 测试 (A/B testing)
(7)灰度发布 (canary rollouts)
(8)限流限速 (rate limiting)
(9)访问控制 (access control)
(10)身份认证 (end-to-end authentication)
等功能。
- 它使得业务工程团队与基础架构团队都更加高效的工作,各自专注于自己的工作,更好的彼此赋能
今天来说一下 Istio 的核心架构设计。
关于 Istio 的架构设计,官网用了这样一句话:
逻辑上,Istio 分为:
-
数据平面 (data plane)
-
控制平面 (control plane)
这两个词,是 Istio 架构核心,但又是大家被误导最多的地方。
数据平面和控制平面,不是 ServiceMesh 和 Istio 第一次提出,它是计算机网络,报文路由转发里很成熟的概念:
-
数据平面 (data plane):一般用来做快速转发
-
控制平面 (control plane):为快速转发提供必要的信息
_画外音:_上两图为路由器架构。
它的设计原则是:
-
在一个路由设备里,转发是最重要的工作,它具备最高的优先级,数据平面 (data plane) 的设计核心就是高效转发,如何在最短的时间里处理最多的包,往往使用高效内存管理、队列管理、超时管理等技术实现在硬件里
-
控制平面 (control plane) 则不然,它要实现路由协议,设备管理,IGMP,ARP 协议的,它更偏向于控制与应用,往往由软件实现
画外音:
IGMP(Internet GroupManagement Protocol)__,一个组播协议;
ARP(Address ResolutionProtocol)__,这个大家比较熟悉,根据 IP 地址获取 MAC 地址;
Istio 的架构核心与路由器非常类似:
-
服务(最上面的小红框),通过本地通讯与 proxy 交互
-
数据平面,由一系列 proxy 组成(中间一层的两个小红框),核心职责是:
(1)高效转发;
(2)接收和实施来自 mixer 的策略;
- 控制平面(底下的大红框),核心是控制与应用,核心职责是:
(1)管理和配置边车代理;
(2)通过 mixer 实施策略与收集来自边车代理的数据;
画外音:
(1)sidecar proxy,原文使用的是 envoy,后文 envoy 表示代理;
(2)mixer,不确定要怎么翻译了,有些文章叫 “混音器”,后文直接叫 mixer;
(3)pilot,galley,citadel,不敢翻译为飞行员,厨房,堡垒,后文直接用英文;
如架构图所示,该两层架构中,有五个核心组件。
数据平面,有一个核心组件:
Envoy (proxy)
Envoy 的核心职责是高效转发,更具体的,它具备这样一些能力:
(1)服务发现
(2)负载均衡
(3)安全传输
(4)多协议支持,例如 HTTP/2,gRPC
(5)断路器 (Circuit breakers)
(6)健康检查
(7)百分比分流路由
(8)故障注入 (Fault injection)
(9)系统度量
大部分能力是 RPC 框架都具备,或者比较好理解的,这里面重点介绍下断路器和故障注入。
断路器设计
它是软件架构设计中,一个服务自我保护,或者说降级的设计思路。
举个例子:当系统检测出某个接口有大量超时时,断路器策略可以终止对这个接口的调用(断路器打开),经过一段时间后,再次尝试调用,如果接口不再超时,则慢慢恢复调用(断路器关闭)。
故障注入设计
它是软件架构设计中,一种故意引入故障,以扩大测试覆盖范围,保障系统健壮性的方法,主要用于测试。
国内大部分互联网公司,架构设计中不太会考虑故障注入,在操作系统内核开发与调试,路由器开发与调试中经常使用,可以用来模拟内存分配失败、磁盘 IO 错误等一些非常难出现的异常,以确保测试覆盖度。
控制平面,有四个核心组件:
Mixer
Mixer 的一些核心能力是:
(1)跨平台,作为其他组件的 adapter,实现 Istio 跨平台的能力;
(2)和 Envoy 通讯,实时各种策略
(3)和 Envoy 通讯,收集各种数据
Mixer 的设计核心在于 “插件化”,这种模型使得 Istio 能够适配各种复杂的主机环境,以及后端基础设施。
Pilot
Pilot 作为非常重要的控制平面组件,其核心能力是:
(1)为 Envoy 提供服务发现能力;
(2)为 Envoy 提供各种智能路由管理能力,例如 A/B 测试,灰度发布;
(3)为 Envoy 提供各种弹性管理能力,例如超时,重试,断路策略;
Pilot 的设计核心在于 “标准化”,它会将各种流控的控制命令转化为 Envoy 能够识别的配置,并在运行时,将这些指令扩散到所有的 Envoy。Pilot 将这些能力抽象成通用配置的好处是,所有符合这种标准的 Envoy 都能够接入到 Pilot 来。
潜台词是,任何第三方可以实现自己的 proxy,只要符合相关的 API 标准,都可以和 Pilot 集成。
Citadel
Citadel 组件,它提供终端用户身份认证,以及服务到服务的访问控制。总之,这是一个和安全相关的组件。
Galley
Gally 组件,它是一个配置获取、校验、处理、分发的组件,它的设计核心在于 “解耦”,它将 “从底层平台(例如:K8S)获取用户配置” 与 Istio 解耦开来。
**花边:**为什么 80% 的中文用户对 Istio 的二层架构的了解是错的?
很多朋友问我,通过什么渠道学习最新的技术知识,我的回答一直是,英文官网。
_画外音:_本文所有信息来源于 Istio1.1 英文官网。
我在百度搜了下 Istio,80% 的资料,将二层架构翻译为:
-
数据面板
-
控制面板
_画外音:_大家可以百度搜一下 “istio 控制面板”
一开始我极其蒙圈,因为 “数据平面” 和“控制平面”是非常成熟的翻译,路由器就是使用这个二层架构,ServiceMesh 使用相同的架构设计进行解耦,应该不需要创造性翻译呀。
后来,我懂了:
-
控制平面 (control plane)
-
控制面板 (control panel)
半吊子英语的程序员,二手的技术文档,真害人,唉。
总结
Istio 采用二层架构,五大模块,进行微服务 ServiceMesh 解耦:
- 数据平面,主要负责高效转发
(1)envoy 模块:即 proxy;
- 控制平面,主要负责控制与应用
(2)mixer 模块:支持跨平台,标准化 API 的 adapter;
(3)pilot 模块:控制与配置 envoy 的大部分策略;
(4)citadel 模块:安全相关;
(5)galley 模块:与底层平台(例如:K8S)配置解耦;
实施与控制分离,经典的架构设计方法,GOT?
思路比结论重要。
调研:
被二手技术资料误导过么?
近期评论