专栏首页全栈学习专栏云原生系列一:Aeraki --- 管理 Istio 服务网格中任何 7 层协议
原创

云原生系列一:Aeraki --- 管理 Istio 服务网格中任何 7 层协议

导语:Aeraki Mesh 是 CNCF 的沙箱项目,它可以帮助你在服务网格中管理任何七层协议。

今天由叶秋学长来介绍如何通过 Aeraki 来在服务网格中为 Dubbo、Thrift 等协议的服务提供七层流量路由、本地限流、全局限流,以及如何基于 Aeraki Protocol快速开发一个自定义协议,并在 Istio 服务网格中对采用自定义协议的服务进行管理。

本篇文章作为系列教程的先导篇,叶秋学长将从全局视角带您了解 Aeraki Mesh。

​编辑

Aeraki [Air-rah-ki]是希腊语中“微风”的意思。虽然 Istio 在中连接微服务,但 Aeraki 提供了一个框架,允许 Istio 支持更多的第 7 层协议,而不仅仅是 HTTP 和 gRPC。我们希望这股"微风"可以帮助 Istio 更进一步。

Service Mesh 缺乏协议支持

我们现在面临着服务网格的一些挑战:

Istio 和其他流行的服务网格实现对除 HTTP 和 gRPC 之外的第 7 层协议的支持非常有限。

  • Envoy RDS(Route Discovery Service)专为 HTTP 设计。其他协议如 Dubbo 和 Thrift 只能使用监听器内联路由进行流量管理,当路由发生变化时会中断现有连接。
  • 将专有协议引入服务网格需要付出很多努力。您需要编写一个 Envoy 过滤器来处理数据平面中的流量,以及一个控制平面来管理这些 Envoy。
  • 这些障碍使用户很难(如果不是不可能的话)管理微服务中其他广泛使用的第 7 层协议的流量。例如,在微服务应用程序中,

我们可能有以下协议:

  • RPC:HTTP、gRPC、Thrift、Dubbo、专有 RPC 协议……
  • 消息传递:Kafka、RabbitMQ …
  • 缓存:Redis、Memcached……
  • 数据库:MySQL、PostgreSQL、MongoDB……

​编辑

如果您已经在迁移到服务网格方面投入了大量精力,那么您当然希望充分利用它——管理微服务中所有协议的流量。

Aeraki 的方法

为了解决这些问题,我们创建了一个开源项目Aeraki Mesh,以提供一种非侵入式、可扩展的方式来管理 Istio 服务网格中的任何第 7 层流量。

​编辑

​编辑

如图所示,Aeraki 框架由以下组件组成:

Aeraki:Aeraki为操作提供高级、用户友好的流量管理规则,将规则转换为 envoy 过滤器配置,并利用 Istio 的EnvoyFilterAPI 将配置推送到 sidecar 代理。Aeraki 还充当数据平面中 MetaProtocol 代理的 RDS 服务器。与专注于 HTTP 的 Envoy RDS 不同,Aeraki RDS 旨在为所有第 7 层协议提供通用的动态路由能力。

MetaProtocol Proxy:MetaProtocol Proxy为第 7 层协议提供常用功能,例如负载均衡、断路器、负载均衡、路由、速率限制、故障注入和身份验证。第 7 层协议可以构建在 MetaProtocol 之上。要将新协议添加到服务网格中,您唯一需要做的就是实现编解码器接口和几行配置。如果您有内置能力无法满足的特殊需求,MetaProtocol Proxy 还具有应用级过滤器链机制,允许用户编写自己的第 7 层过滤器,将自定义逻辑添加到 MetaProtocol Proxy 中。

Dubbo和Thrift已经基于 MetaProtocol 实现。更多协议正在开发中。如果您使用的是闭源专有协议,您还可以通过为其编写 MetaProtocol 编解码器在您的服务网格中对其进行管理。

大多数请求/响应风格的无状态协议都可以构建在 MetaProtocol 代理之上。但是,有些协议的路由策略过于“特殊”,无法在 MetaProtocol 中进行规范化。例如,Redis 代理使用槽号将客户端查询映射到特定的 Redis 服务器节点,槽号由请求中的 key 计算得出。只要 Envoy 代理端有可用的 Envoy 过滤器,Aeraki 仍然可以管理这些协议。目前,对于该类别的协议,Aeraki 支持Redis和 Kafka。

深入研究元协议

让我们看看 MetaProtocol 是如何工作的。在引入 MetaProtocol 之前,如果我们想为特定协议代理流量,我们需要编写一个理解该协议的 Envoy 过滤器并添加代码来操作流量,包括路由、头部修改、故障注入、流量镜像等。

对于大多数请求/响应风格的协议,流量操作的代码非常相似。因此,为了避免在不同的 Envoy 过滤器中重复这些功能,Aeraki Mesh 在一个地方实现了第 7 层协议代理的大部分常见功能——MetaProtocol 代理过滤器。

​编辑这种方法显着降低了编写新的 Envoy 过滤器的障碍:现在您只需要实现编解码器接口,而不是编写功能齐全的过滤器。除此之外,控制平面已经到位——Aeraki 在控制平面上工作,为基于 MetaProtocol 构建的所有协议提供 MetaProtocol 配置和动态路由。

​编辑

MetaProtocol Proxy 中有两个重要的数据结构:Metadata 和 Mutation。元数据用于路由,而 Mutation 用于标头操作。

在请求路径上,解码器(编解码器实现的解码方法)使用从请求中解析的键值对填充元数据数据结构,然后将元数据传递给元协议路由器。路由器在匹配它通过 RDS 和元数据从 Aeraki 接收到的路由配置后,选择适当的上游集群。

如果需要修改请求,自定义过滤器可以使用任意键值对填充 Mutation 数据结构:添加标头或更改标头的值。然后将 Mutation 数据结构传递给编码器(编解码器实现的 encode 方法)。编码器负责将键值对写入有线协议。

​编辑响应路径与请求路径类似,只是方向不同。

​编辑

一个例子

如果需要实现基于 MetaProtocol 的应用协议,可以按照以下步骤进行(以 Thrift 为例):

数据平面

  • 实现编解码器接口对协议包进行编码和解码。您可以参考Dubbo 编解码器和Thrift 编解码器编写自己的实现。
  • 使用 Aeraki ApplicationProtocolCRD 定义协议,如下 YAML 片段所示:

​编辑

控制平面

您不需要实现控制平面。Aeraki 监视服务和流量规则,为 Sidecar 代理生成配置,并通过EnvoyFilterMetaProtocol RDS 将配置发送到数据平面。

协议选择

与 Istio 类似,协议由服务端口前缀标识。请使用以下模式命名服务端口:tcp-metaprotocol-{应用程序协议}-xxx。例如,Thrift 服务端口应命名为 tcp-metaprotocol-thrift。

交通管理

MetaRouter您可以通过CRD更改路线。例如:将 20% 的请求发送到 v1,将 80% 的请求发送到 v2:

​编辑

本期分享到此为止,叶秋学长还发现一篇好文章跟大家分享《服务网格项目Aeraki Mesh正式进入CNCF沙箱》点击学习链接

让我们一起期待下一篇的云原生系列作品,不要忘记给叶秋学长点点关注哦~~

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注作者,阅读全部精彩内容
登录 后参与评论
0 条评论

相关文章

  • Istio Meetup China:全栈服务网格 - Aeraki 助你在 Istio 服务网格中管理任何七层流量

    流量管理是 Istio 服务网格的核心能力,然而 Istio 缺省只提供了 HTTP 和 gRPC 两种协议的七层管理能力。对于微服务中常用的其他协议,包括 R...

    赵化冰
  • Aeraki Mesh 加入 CNCF 云原生全景图

    近日,Aeraki Mesh 正式进入 CNCF 云原生全景图,位于 Service Mesh 类别下。CNCF Landscape 在云原生实践过程中的每个环...

    赵化冰
  • Aeraki Mesh 正式成为 CNCF 沙箱项目

    6月15日,我创建的 Aeraki Mesh 项目通过了全球顶级开源基金会云原生计算基金会(CNCF)技术监督委员会评定,正式成为CNCF 沙箱项目!这意味着 ...

    赵化冰
  • Aeraki Mesh正式成为CNCF沙箱项目,腾讯云携伙伴加速服务网格成熟商用

    6月,由腾讯云主导,联合百度、灵雀云、腾讯音乐、滴滴、政采云等多家合作伙伴发起的服务网格开源项目 Aeraki Mesh 通过了全球顶级开源基金会云原生计算基金...

    腾讯云原生
  • 国内首个云原生百科知识节目,明晚7点半开播啦!

    云原生在近几年的发展越来越火热,作为云上最佳实践而生的设计理念,也有了越来越多的实践案例,而一个个云原生案例的背后,是无声的巨大变革。 腾讯云主办首个云原生百科...

    腾讯云原生
  • 服务网格项目Aeraki Mesh正式进入CNCF沙箱

    6月15日,云原生计算基金会 (CNCF) 宣布,由腾讯云牵头,灵雀云等多家伙伴合作开源的服务网格项目 Aeraki Mesh 正式成为 Sandbox 项目。...

    灵雀云
  • 技术集锦 | 服务网格 & Istio 技术原理及最佳实践系列

    前言 作为 CNCF 定义的云原生关键技术之一,服务网格发展至今已经有五个年头了,其发展目前正处于大规模落地及生态发展阶段。 服务网格是一个专门处理服务通讯的基...

    腾讯云原生
  • 全球首届 IstioCon 来了,腾讯云原生将做精彩技术分享

    Istio 社区全球首届 IstioCon线上会议将于北京时间 2021年 2 月 22 日至 26 日 举办。 本次会议将有来自全球 60+ 技术专家的干货...

    腾讯云原生
  • 直播预告 | Aeraki Mesh 在视频直播应用中的服务网格实践

    服务网格已经成为微服务的基础设施,但目前主流的服务网格产品只能处理 HTTP 协议,不支持其他七层协议,是服务网格落地的主要困难之一。这些问题要怎么解决?相信很...

    腾讯云原生
  • 国内首届 Istio 社区 meetup 来啦!7月10日,北京见

    作为云原生领域中一个人气非常高的开源项目, Istio 目前已经基本成为了 Service Mesh 的事实标准。 随着云原生技术在国内的普及,Istio 技术...

    腾讯云原生
  • 今晚19:30直播 | Aeraki Mesh 在视频直播应用中的服务网格实践

    服务网格已经成为微服务的基础设施,但目前主流的服务网格产品只能处理 HTTP 协议,不支持其他七层协议,是服务网格落地的主要困难之一。这些问题要怎么解决?相信很...

    腾讯云原生
  • 【官方剧透】IstioCon 2022 ,腾讯云重磅演讲

    北京时间4月25日到29日,由Istio社区主办的全球第二届社区峰会 IstioCon 2022 将以线上会议的方式举行。 来自Google、腾讯、IBM等公...

    腾讯云原生
  • 大规模服务网格性能优化 | Aeraki xDS 按需加载

    钟华,腾讯云专家工程师,Istio project member、contributor,专注于容器和服务网格,在容器化和服务网格生产落地方面具有丰富经验,目...

    腾讯云原生
  • 如何在 Istio 中支持 Dubbo、Thrift、Redis 以及任何七层协议?

    赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher管理委员,Istio 项目贡献者, Aerika 项目创建者 ,热衷于开源、网络...

    腾讯云原生
  • IstioCon 2021: How to Manage Any Layer-7 Traffic in an Istio Service Mesh?

    备注:本文根据腾讯云赵化冰和知乎唐阳在 IstioCon 2021 中的演讲 “How to Manage Any Layer-7 Traffic in an ...

    赵化冰
  • FA9# Service Mesh上线需解决的问题整理

    越来越多的公司开始研究Service Mesh,线上大批量应用案例的依旧很少,已经上线的很多问题解决的并不完美,为后面迭代和稳定性埋下隐患。目前来看整体开源生态...

    瓜农老梁
  • Aeraki 教程系列:如何设置本地限流规则?

    Aeraki 可以帮助你在服务网格中管理任何七层协议。目前 Aeraki 已经支持了 Dubbo、Thrit、Redis 等开源协议。你还可以使用 Aeraki...

    赵化冰
  • 开发者看过来!2021年最受欢迎 & 最具影响力文章盘点

    各位读者朋友们:大家好! 2021年即将结束,这一年中,云原生迅速发展,越来越多的优秀开发者为其作出贡献。「腾讯云原生」有幸参与其中,贡献了非常多优质的技术文...

    腾讯云原生
  • 云原生技术实践 | 16位专家视频讲解合集(抢新年限定红包封面)

    【云原生正发声】 目前已开展了十四期分享会,腾讯各位大咖带领大家由浅入深全方位了解云原生!涵盖热点技术最佳实践和技术优化内容分享! 小云费九牛二虎之力,给大家整...

    腾讯云原生

扫码关注腾讯云开发者

领取腾讯云代金券