,Kitex Proxyless 简单来说就是 Kitex 服务能够不借助 envoy sidecar 直接与 istiod 交互,基于 xDS 协议动态获取控制面下发的服务治理规则,并转换为 Kitex 对应规则来实现一些服务治理功能(例如本文的重点:流量路由)。,基于 Kitex Proxyless,让我们实现 Kitex 能够无需代理就可以被 ServiceMesh 统一管理,进而实现多种部署模式下的 治理规则 Spec、治理控制面、治理下发协议、异构数据治理能力 的统一。,
,流量路由属于服务治理中比较核心的能力之一,也是 Kitex Proxyless 优先支持的场景之一。,Kitex 基于 xDS 实现 流量路由 的方案大致如下:,
,具体流程:,可以看到,流量路由其实是一个根据一定规则选择对应 SubCluster 的流程。,全链路泳道可以理解成是对一组服务实例按照一定方式进行拆分(例如部署环境),并基于全链路灰度路由能力,让流量能够精准按照规则在指定服务实例泳道中流动(逻辑上如同游泳场中的泳道)。,不过单单只有流量路由能力,还不足以实现全链路泳道 , 因为当一个请求跨越多个服务的时候,我们需要有一个比较好的机制能够准确识别出该流量,并基于这个特征来为每一跳流量配置路由规则。,如下图所示:假设我们要实现一个用户的请求能够精确灰度到 service-b 的 v1 版本。最先想到的做法可能是所有请求都带上 uid = 100 的请求头,然后配置对应 VirtualService 来根据 header 里的 uid = 100 匹配。,
,但这样的做法有几个明显的缺点:,因此,要实现全链路的流量路由统一,我们还需要额外借助一个更通用的 流量染色 与 染色标识全链路透传 能力。,通常我们会在网关层进行流量染色,通常会根据原始请求中的元数据,来进行一定规则(条件、比例)转换成对应的染色标识。,有了一套统一的流量染色机制之后,我们配置路由规则的时候,就不需要关心具体的业务属性标识了,只需要根据 染色标识 来配置即可。,将具体的业务属性抽象成条件染色规则,使其更通用,即使业务属性发生了变化,路由规则也无需再频繁变动了。,
,要实现流量染色标识在全链路透传,我们通常会借助 Tracing Baggage 机制,在全链路中传递对应染色标识,大部分 Tracing 框架都支持 Baggage 概念机能力,如:OpenTelemetry、Skywalking、Jaeger 等等。,有了一套通用的全链路透传机制,业务方就只需要接入一遍 tracing 即可,无需每次业务属性标识发生变化就配合改造一次。,下面会借助一个具体的工程案例介绍,来介绍并演示如何基于 Kitex Proxyless 和 OpenTelemetry Baggage 实现全链路泳道功能。,该案例是使用 Hertz、Kitex 重写经典的 Istio Bookinfo 项目:,整体架构与 Bookinfo 保持一致,分为四个单独的微服务:,reviews 微服务有 3 个版本:,
,整体区分成 2 个泳道:,
,网关统一负责对流量进行染色,例如请求 header 中 uid=100 的流量都统一进行染色,为请求携带上 env=dev 的 baggage 。,
,染色方式可以根据不同的网关实现具体选择,例如当我们选择 istio ingress 作为网关的时候,我们可以借助 EnvoyFilter + Lua 的方式来编写网关染色规则。,网关已经将请求头中携带了 uid=100 的流量进行了染色,自动带上了 env=dev 的 baggage,因此我们只需要根据 header 进行路由匹配即可,下面是具体的路由规则配置示例:,入口流量请求头中不带 uid=100 的请求,会自动路由到基准泳道服务,reviews v1 和 v3 服务间轮询,展示的效果是评分为 0 或 1 随机。,
,
,2. 再点击刷新按钮,可以发现请求打到了分支泳道,流量泳道功能成功生效。,
,至此我们已经基于 Kitex Proxyless 与 OpenTelemetry 实现了一个完整的全链路泳道,并且无需借助 Envoy sidecar,就能基于 Isito 标准治理规则 Spec,来为 Kitex 设置对应的路由规则了。,当然,除了满足 流量路由 能力之外,Kitex Proxyless 也在持续迭代优化,满足更多数据面治理能力需求。Proxyless 作为一种 ServiceMesh 数据面探索和实践,除了能够丰富网格数据面部署形态之外,也希望可以不断打磨 Kitex,增强其在开源生态兼容方面的能力,打造一个开放包容的微服务生态体系。,下面是该案例涉及的项目清单:,该完整案例已提交在 biz-demo (https://github.com/cloudwego/biz-demo) 仓库中,感兴趣的同学可以前往查阅。,biz-demo 会包含一些基于 CloudWeGo 技术栈且具备一定业务场景的完整 Demo,初衷是能够为企业用户在生产中使用提供有价值的参考,非常欢迎更多同学能够参与到 CloudWeGo 相关场景与案例的贡献中来,一起来做一些有意思的尝试。
© 版权声明
文章版权归作者所有,未经允许请勿转载。