Serverless Mesh技术
从架构上,Istio 可以运行在虚拟机或容器中,Istio 的主要组件包括 Pilot(服务发现、流量管理)、Mixer(访问控制、
可观测性)、Citadel(终端用户认证、流量加密);整个服务网格关注连接和流量控制、可观测性、安全和可运维性。
虽然相比较没有服务网格的场景多了 4 个 IPC 通讯的成本,但整体调用的延迟随着软硬件能力的提升而并不会带来
显著的影响,特别是对于百毫秒级别的业务调用而言可以控制在 2% 以内。从另一方面,服务化的应用并没有做任
何改造,就获得了强大的流量控制能力、服务治理能力、可观测能力、4 个 9 以上高可用、容灾和安全等能力,加上
业务的横向扩展能力,整体的收益仍然是远大于额外 IPC 通讯支出的。
服务网格的技术发展上数据平面与控制平面间的协议标准化是必然趋势。大体上,Service Mesh 的技术发展围绕
着“事实标准”去展开——共建各云厂商共同采纳的开源软件。从接口规范的角度:Istio 采纳了 Envoy 所实现的
xDS 协议,将该协议当作是数据平面和控制平面间的标准协议;Microsoft 提出了 Service Mesh Interface(SMI),
致力于让数据平面和控制平面的标准化做更高层次的抽象,以期为 Istio、Linkerd 等 Service Mesh 解决方案在服
务观测、流量控制等方面实现最大程度的开源能力复用。UDPA(Universal Data Plane API)是基于 xDS 协议
而发展起来,以便根据不同云厂商的特定需求便捷地进行扩展并由 xDS 去承载。
此外数据平面插件的扩展性和安全性也得到了社区的广泛重视。从数据平面角度,Envoy 得到了包括 Google、
IBM、Cisco、Microsoft、阿里云等大厂的参与共建以及主流云厂商的采纳而成为了事实标准。在 Envoy 的软件设
计为插件机制提供了良好扩展性的基础之上,目前正在探索将 Wasm 技术运用于对各种插件进行隔离,避免因为某
一插件的软件缺陷而导致整个数据平面不可用。Wasm 技术的优势除了提供沙箱功能外,还能很好地支持多语言,
最大程度地让掌握不同编程语言的开发者可以使用自己所熟悉的技能去扩展 Envoy 的能力。在安全方面,Service
Mesh 和零信任架构天然有很好的结合,包括 POD Identity、基于 mTLS 的链路层加密、在 RPC 上实施 RBAC
的 ACL、基于 Identity 的微隔离环境(动态选取一组节点组成安全域)。
2、行业应用情况
根据 Gartner 研究报告,Istio 有望成为 Service Mesh 的事实标准,而 Service Mesh 本身也将成为容器服务技
术的标配技术组件。即便如此,Service Mesh 目前在市场仍处于早期采用 (Early adoption) 阶段。
除 Istio 以外,Google 与 AWS 分别推出了各自的云服务 Traffic Director、 App Mesh。这两个 Service Mesh
产品与 Istio 虽有所不同,但与 Istio 同样地采纳了 Envoy 作为数据平面。此外,阿里云、腾讯云、华为云也都推出
了 Service Mesh 产品,同样采用 Envoy 技术作为数据面并在此基础上提供了应用发布、流量管控、APM 等能力。
3、主要技术
2017 年发起的服务网格 Istio 开源项目,清晰定义了数据平面(由开源软件 Envoy 承载)和管理平面(Istio 自身的
核心能力)。Istio 为微服务架构提供了流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管
理与策略等)创造了基础。Istio 利用久经考验的 Lyft Envoy 代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。2019 年 Istio 所发布的 1.12 版已达到小规模集群上线生产环境水平,但其性能仍
受业界诟病。开源社区正试图通过架构层面演进改善这一问题。由于 Istio 是建构于 Kubernetes 技术之上,所以
它天然地可运行于提供 Kubernetes 容器服务的云厂商环境中,同时 Istio 成为了大部分云厂商默认使用的服务网
格方案。
除了 Istio 外,也有 Linkerd、Consul 这样相对小众的 Service Mesh 解决方案。Linkerd 在数据平面采用了 Rust
编程语言实现了 linkerd-proxy,控制平面与 Istio 一样采用 Go 语言编写。最新的性能测试数据显示,Linkerd 在
时延、资源消耗方面比 Istio 更具优势。Consul 在控制面上直接使用 Consul Server,在数据面上可以选择性地使
用 Envoy。与 Istio 不同的是,Linkerd 和 Consul 在功能上不如 Istio 完整。
Conduit 作为 Kubernetes 的超轻量级 Service Mesh,其目标是成为最快、最轻、最简单且最安全的 Service
Mesh。它使用 Rust 构建了快速、安全的数据平面,用 Go 开发了简单强大的控制平面,总体设计围绕着性能、安
全性和可用性进行。它能透明地管理服务之间的通信,提供可测性、可靠性、安全性和弹性的支持。虽然与 Linkerd
相仿,数据平面是在应用代码之外运行的轻量级代理,控制平面是一个高可用的控制器,然而与 Linkerd 不同的是,
Conduit 的设计更加倾向于 Kubernetes 中的低资源部署。
The Cloud-nat