作者:腾讯云高级工程师 赵化冰
刚刚获悉,由腾讯云主导,联合百度、灵雀云、腾讯音乐、滴滴、政采网等多家合作伙伴发起的服务网格开源项目 Aeraki Mesh 通过了全球顶级开源基金会云原生计算基金会(CNCF)技术监督委员会评定,正式成为CNCF 沙箱项目。这意味着 Aeraki Mesh 得到了云原生开源社区的认可,而且加入 CNCF 也保证了项目的中立和开源开放,为 Aeraki Mesh 在云原生生态系统的进一步发展迈出了坚定的一步。
Aeraki Mesh 加入 CNCF 的这个时间点,恰好在Istio 宣布将 Istio 捐赠给 CNCF 基金会不久。作为 Service Mesh 开源领域的领军项目,Istio 受到了广大开发者的欢迎,加入 CNCF 标志着 Istio 和 K8s,Knative 三大云原生容器自动化框架纳入了同一个治理架构,Istio 和 CNCF 中其他的项目之间的合作将更为密切顺畅,也为 Istio 成为 Service Mesh 领域的事实标准扫清了最后的障碍。然而 Istio 虽然强大,但主要处理 HTTP 协议,将其他协议看做 TCP 流量,这是服务网格在产品落地时遇到的主要问题之一。在微服务中经常会使用到其他的协议,例如 Dubbo、Thrift、Redis,以及私有协议等。只使用 Istio 无法对这些流量进行服务治理。Aeraki Mesh 提供了一种非侵入的、高度可扩展的解决方案来管理服务网格中的任何七层流量。Aeraki Mesh 在此时间节点加入 CNCF,在 Istio 中为非 HTTP 协议提供了和 HTTP 协议同等的治理能力,加速了服务网格成熟商用和产品落地的进程。
Aeraki [Air-rah-ki] 是希腊语 ”微风“ 的意思。 该命名的寓意是希望 Aeraki Mesh 这股“微风”能帮助 Istio 和 Kubernetes 在云原生的旅程中行得更快更远。Aeraki Mesh 的定位非常明确:只处理服务网格的非 HTTP 七层流量,将 HTTP 流量留给 Istio 。(我们认为现有的项目已经足够优秀,不必重新造轮子)。
Aeraki Mesh 架构
正如该图所示,Aeraki Mesh 由以下两部分组成。
Aeraki: Aeraki 工作在控制面,为运维提供了高层次的、用户友好的流量管理规则,将规则转化为 envoy 代理配置,并利用 Istio 提供的标准接口将配置推送给数据面的 sidecar 代理。 Aeraki 还在控制面中充当了 MetaProtocol Proxy 的 RDS(路由发现服务)服务器。不同于专注于 HTTP 的 Envoy RDS,Aeraki RDS 旨在为所有七层协议提供通用的动态路由能力。
MetaProtocol Proxy: MetaProtocol Proxy 工作在数据面,是一个七层代理框架,为七层协议提供了常用的流量管理能力,如负载均衡、熔断、路由、本地/全局限流、故障注入、指标收集、调用跟踪等等。我们可以基于 MetaProtocol Proxy 提供的通用能力创建自己专有协议的七层代理。要在服务网格中加入一个新的协议,唯一需要做的就是实现 编解码器接口 (通常只需数百行代码)和几行 yaml 配置。如果有特殊的要求,而内置的功能又不能满足,MetaProtocol Proxy 还提供了一个扩展机制,允许用户编写自己的七层过滤器,将自定义的逻辑加入 MetaProtocol Proxy 中。
MetaProtocol Proxy 中已经支持了 Dubbo, Thrift ,bRPC 和一系列私有协议。如果你正在使用一个闭源的专有协议,也可以在服务网格中管理它,只需为它编写一个 MetaProtocol 编解码器即可。
MetaProtocol Proxy 架构
MetaProtcolProxy 对七层协议进行了高度抽象,提取了 Metadata 这个非常灵活的扩展机制,应用协议在解码过程中将协议中的关键属性填充到 Metadata 中,这些属性可以用于请求路由、限流等后续的七层 filter 处理。框架层将 Meatdata 作为透明的 key/value 值串进行处理,不需要理解协议的业务细节。该设计可以确保任何基于 MetaProtocol 开发的应用协议都能使用同一套控制面 API 进行管理,是 Aeraki 实现对 Dubbo、Thrift、bRPC 以及其他协议进行统一管理的基础。同时,MetaProtocolProxy 还提供了 Mutation 数据结构,用于在编码时对数据包进行修改,例如增加/修改请求头的内容。
下图是 MetaProtocolProxy 处理一个请求处理的过程:
MetaProtocol Proxy 请求处理流程
Aeraki Mesh 的主要特点:
- 和 Istio 无缝集成,是 Istio Ecosystem 集成推荐项目。您可以采用 Istio + Aeraki Mesh
来构建一个可以同时管理 HTTP 和其他七层协议的全栈服务网格。 - 支持在 Istio 中管理 Dubbo、Thrift、Redis 等开源协议的流量。
- 支持在 Istio 中管理私有协议的流量,只需数百行代码,对 Istio 无任何改动。
- 支持请求级负载均衡,支持任意匹配条件的动态路由,全局和本地限流,流量镜像等强大的七层流量管理能力。
- 提供丰富的请求级性能指标,包括请求时延、错误、数量等,支持分布式调用跟踪。
- 对 Istio,Envoy 等上游开源项目完全无侵入,可以跟随上游项目进行快速迭代,充分利用上游项目新版本提供的新增能力。
Aeraki Mesh 已经在央视频、腾讯音乐等大型项目中产品化落地,并经过了 2022 冬奥会线上大规模流量的实战检验。目前有多个产品正在接入测试中。百度、灵雀云、滴滴、政采云等多个合作伙伴已经加入社区进行共建。
Aeraki Mesh 社区正在大力发展中,欢迎大家加入!
安装试用: https://www.aeraki.net/zh/docs/v1.0/quickstart/
加入社区会议: https://www.aeraki.net/zh/community/#community-meetings
Star 一下: https://github.com/aeraki-mesh/aeraki
Aeraki Mesh 产品落地实践:
Istiocon 2022 分享:Istio + Aeraki 在腾讯音乐的服务网格落地 | Aeraki Mesh
腾讯云原生分享:Areaki Mesh 在 2022 冬奥会视频直播应用中的服务网格实践 | Aeraki Mesh