当前位置: 首页 > 网络应用技术

基于基于ISTIO的全链接灰度方案进行探索和实践

时间:2023-03-06 10:48:58 网络应用技术

  在微服务软件体系结构下,在业务启动之前,一组完整的测试系统被认为是非常耗时的问题。这更加困难,因为要划分微服务的微服务的数量。这组测试系统所需的机器的成本通常并不低。为了在应用新版本之前确保功能正确性的功能验证效率,必须单独维护该系统。当业务变得巨大且复杂时,通常有必要准备多个集合。这是面临的成本和效率挑战,难以解决整个行业。如果在新版本可以在同一一组生产系统中完成功能验证之前,节省的人力和财务资源是可观的。

  除了在开发阶段的功能验证外,生产环境中灰度的引入还可以更好地控制该生产线上新版本软件的风险和爆炸性半径。格雷释放是分配具有某些特征或比例的生产流量需要验证的服务版本以观察启动新版本后的运行状态是否满足期望。

  Alibaba Cloud ASM Pro基于服务网格构建的完整链接灰度解决方案,该解决方案可以帮助解决上述两种情况的问题。

  ASM Pro产品功能体系结构:

  核心功能由上图中流量流的能力以及遵循基准和交通后备的能力使用。该描述在下面详细描述。

  完整链接灰色版本的常见场景如下:

  以BookInfo为例,进入流将带来预期的标签组。SideCar将通过在标题或上下文中获取预期标签将流路线分发给相应的标签组。对于基本组,可以配置特定的后备策略。LET的详细描述了特定的实现详细信息。

  入口流处的标签标签通常基于网关级别的标签插头的方法,并标记了请求流量。例如,用户ID在代表灰度的一定标签中。考虑到实际环境门户的选择和多样性,网关的实现不在本文讨论的范围之内。

  在下面,我们关注ASM Pro如何基于完整链接流量标记并实现完整链接的灰色。

  入站是指请求发送到应用程序的导入流量,Outbond是指应用程序从应用程序中请求的导出流量。

  上图是业务应用程序启用网格之后的典型流量路径:业务应用程序接收外部请求P1,然后调用其背后的另一个服务接口。这次,请求的流量路径为p1-> p2--> P3-> P4。其中,P2是将SideCar转发到P1,P4是Sidecar向P3的转发,以实现完整链接的灰色,P3和P4都需要从P1获得交通标签,以便将请求路由与标签相对应的背面端端服务实例,并且必须使用P3和P4带来相同的标签。关键是如何使标签的传输完全与应用程序完全无关,以实现标签的传输完整链接是整个链接灰色的关键技术。ASMPro的实现基于分布式链接跟踪技术(例如OpenTracing,OpenTelemetry等)中的TraceIDS来实现此功能。

  在分布式链接跟踪技术中,TraceID用于签署完整的呼叫链。链接上每个应用程序的粉丝将与ASM Pro Full -Link Gray解决方案的实现基于此分布式应用程序体系结构广泛采用的实践。

  在上图中,Sidecar最初看到入站和出站流量是完全独立的。不可能感知两者之间的对应关系,尚不清楚入站请求是否导致了多个出站请求的发生。图,边车不知道。

  在ASM Pro Full-Link灰度解决方案中,P1和P3的两个请求通过TraceID关联。具体而言,它取决于sidecar中X-Request-id的跟踪标头。SideCar在内部维护了一个映射表,该表记录了TraceID和标签之间的相应关系。当SideCar收到P1请求时,将TraceID和TAGS存储在请求中,并将其存储在请求中。此表。接收P3请求时,请从映射表中查询以获取与TraceID相对应的标签,并将此标签添加到P4请求中,以实现完整链接的标签和标签。下面的图大约示例了本实现原则。

  换句话说,ASM Pro的完整链接灰色功能需要应用于分布式链接跟踪技术。如果该技术的应用不使用分布式链接跟踪技术,它将不可避免地涉及一定的转换工作。对于Java应用程序,您,您仍然可以考虑使用Java代理在没有转换的情况下在入站和出站之间实现Traceid之间的透明传播。

  ASM Pro介绍了一个新的流量标签CRD,以定义从透明传输中获得的流量标签在何处定义SIDECAR。在下面的YAML文件中,流量标签的来源,需要存储标签存储opentracing(特别是X-Trace Head Head。

  CR定义包含两个部分,即标签的获取和存储。

  与环境相对应的本地部署的标签是“ ASM_TRAFFIC_TAG”。实际部署可以与CI/CD系统关联。

  有了交通标签的定义,我们知道如何制作流量标记并通过标签,但是仅此功能就不足以实现完整的链接灰色。我们还需要一个可以基于流量标签流量徽标的函数,即“根据徽标”和路由退缩的逻辑,以便当不存在路由的目的地时,它可以实现降级函数。

  此功能的实现已扩展了ISTIO VirtualService和DestinationRule。

  定义目标子集中的子集

  自定义组子集对应于trafficLabel的值

  子集支持两种指定的表格:

  在虚拟服务中

  1)全局默认配置

  全局默认模式对应于车道,即关闭单个环境,并指定环境 - 级后退策略。custom组子集对应于交通标签的值

  配置样本如下:

  2)定制的个人发展环境

  3)支持重量配置

  该机器环境的主要环境标签和环境是Dev-X。80%的人达到了主要环境,每天的环境有20%。当没有用于主要环境的服务资源时,每天的交通是。

  Sourcelabels是与本地工作负载相对应的标签

  该方案依靠业务部署来带来相关徽标(在示例中,相应的标签为asm_traffic_tag:xxx)。它通常由环境确定。示意图如下:

  注意:ASM Pro开发了服务的服务(可以看到ASM Pro产品功能架构图),该图实现了对多个注册中心的动态采集并部署元信息;

  以下是基于流量标记和基准测试的典型多集开发环境治理功能;与每个开发人员相对应的DEV X环境只需要部署版本更新的服务;您可以通过配置后备将服务请求的后备流传输到相应的开发环境中。y环境C.

  以同样的方式,也可以将Dev X环境与在线灰色版本环境等同起来,这可以解决在线环境的完整链接灰色释放问题。

  本文中的“流量标记”和“基准测试”的能力是一般解决方案。基于此,它可以更好地解决相关问题,例如测试环境治理,在线完整链接灰度发布等,并且基于服务网格技术与开发语言无关。同时,此方案是合适的对于不同的7层协议,已经支持HTTP/GRPC和DUBBO协议。

  与整个链接的灰色相对应,其他制造商也有一些解决方案。其他解决方案解决方案的优点是:

  基于“流量标记”和“基准测试”功能也可以用于其他相关方案:

  资料来源:阿里巴巴云