阿里云 MSE 基于 Apache APISIX 的全链路灰度方案实践_Apache_APISIX_中文社区的博客-CSDN博客_apisix 灰度发布


本站和网页 https://blog.csdn.net/ApacheAPISIX/article/details/125301472 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

阿里云 MSE 基于 Apache APISIX 的全链路灰度方案实践_Apache_APISIX_中文社区的博客-CSDN博客_apisix 灰度发布
阿里云 MSE 基于 Apache APISIX 的全链路灰度方案实践
Apache_APISIX_中文社区
于 2022-06-15 17:40:51 发布
875
收藏
文章标签:
阿里云
全链路
灰度发布
API网关
APISIX
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ApacheAPISIX/article/details/125301472
版权
Apache APISIX 是一个开源的云原生 API 网关,作为 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。你可以使用 Apache APISIX 来处理传统的南北向流量,以及服务间的东西向流量,也可以当做 K8s Ingress controller 来使用。得益于 APISIX 全动态的设计,可以随时进行配置更改并且均不需要重启服务。
阿里云微服务引擎 MSE 提供了非常易用的流量泳道能力,基于 Java Agent 字节码增强的技术实现,无缝支持市面上近 5 年的所有 Spring Cloud 和 Dubbo 的版本,通过极简的配置与无代码侵入的方式,来实现全链路灰度,释放基于 APISIX 的微服务架构的新价值。
全链路灰度方案简介
相关概念
泳道:为相同版本应用定义的一套隔离环境。只有满足了流控路由规则的请求流量才会路由到对应泳道里的打标应用。一个应用可以属于多个泳道,一个泳道可以包含多个应用,应用和泳道是多对多的关系。基线环境:未打标的应用属于基线稳定版本的应用,即稳定的线上环境。流量回退:泳道中所部署的服务数量并非要求与基线环境完全一致,当泳道中并不存在调用链中所依赖的其他服务时,流量需要回退至基线环境,进一步在必要的时候路由回对应标签的泳道。泳道组:泳道的集合。泳道组的作用主要是为了区分不同团队或不同场景。
业务场景
基于流量泳道的全链路灰度能力,适用于以下业务场景:
日常开发/项目/测试环境隔离;全链路灰度发布;高可用同机房优先路由;全链路压测。
技术原理
如何在实际业务场景中去快速落地全链路灰度呢?目前主要有两种解决方案,基于物理环境隔离和基于逻辑环境隔离。
物理环境隔离
物理环境隔离,其实就是通过增加机器的方式来搭建真正意义上的流量隔离。
该方案需要为灰度的服务搭建一套网络隔离、资源独立的环境,并在其中部署服务的灰度版本。由于与正式环境隔离,正式环境中的其他服务无法访问到需要灰度的服务,所以需要在灰度环境中冗余部署 这些线上服务,以便整个调用链路正常进行流量转发。此外,注册中心等一些其他依赖的中间件组件也需要冗余部署在灰度环境中,保证微服务之间的可见性问题,确保获取的节点 IP 地址只属于当前的网络环境。
该方案一般用于企业的测试、预开发环境的搭建,对于线上灰度发布引流的场景来说其灵活性不够。并且微服务多版本的存在在微服务架构中是非常常见的,需要为这些业务场景采用堆机器的方式来维护多套灰度环境。如果应用数目很小,该方式是可以被受的;如果您的应用数目过多的情况下,会造成运维、机器成本过大,成本和代价远超收益。
逻辑环境隔离
另一种方案是构建逻辑上的环境隔离,我们只需部署服务的灰度版本,流量在调用链路上流转时,由经过的网关、各个中间件以及各个微服务来识别灰度流量,并动态转发至对应服务的灰度版本。如下图:
上图可以很好展示这种方案的效果,我们用不同的颜色来表示不同版本的灰度流量,可以看出无论是微服务网关还是微服务本身都需要识别流量,根据治理规则做出动态决策。当服务版本发生变化时,这个调用链路的转发也会实时改变。相比于利用机器搭建的灰度环境,这种方案不仅可以节省大量的机器成 本和运维人力,而且可以帮助开发者实时快速的对线上流量进行精细化的全链路控制。
基于 Apache APISIX 全链路灰度产品实践
全链路灰度是微服务最核心的功能之一,也是云上用户在微服务化深入过程中必须具备的功能。全链路灰度因为涉及到的技术和场景众多,如果企业一一进行自我实现,需要花费大量人力成本对其进行扩展与运维。
MSE 服务治理提供了完整的产品化的全链路灰度解决方案,覆盖 RPC、MQ、可观测性等绝大多数场 景。只要架构是基于 Spring Cloud 或者 Dubbo 框架,应用无需升级或代码改动,即可实现企业级全链路灰度功能。
使用前提
第一步:安装 APISIX 相关组件
安装 APISIX、apisix-ingress-controller、etcd 等组件。
helm repo add apisix https://charts.apiseven.com
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
kubectl create ns ingress-apisix
helm install apisix apisix/apisix \
--set gateway.type=LoadBalancer \
--set ingress-controller.enabled=true \
--set etcd.persistence.storageClass="alicloud-disk-ssd" \
--set etcd.persistence.size="20Gi" \
--namespace ingress-apisix \
--set ingress-controller.config.apisix.serviceNamespace=ingress-apisix
kubectl get service --namespace ingress-apisix
在 ingress-apisix 命名空间下可以看到无状态的 APISIX 和 apisix-ingress-controller 应用、以及有状态的 etcd 应用。 2. 使用 Helm 安装 APISIX Dashboard。
helm repo add apisix https://charts.apiseven.com
helm repo update
helm install apisix-dashboard apisix/apisix-dashboard --namespace
ingress-apisix
安装完成后,可以绑定一个 SLB。通过 {slb-ip}:9000 访问 APISIX Dashboard。
第二步:开启微服务治理
这一步骤中,需要开通 MSE 微服务治理、安装 MSE 服务治理组件(ack-onepilot)并为应用开启微服务治理。具体操作信息可参考阿里云官方教程。
第三步:部署 Demo 应用程序
在阿里云容器服务中部署 A、B、C 三个应用,每个应用分别部署⼀个base 版本和⼀个gray 版本;并部署⼀个 Nacos Server 应用,用于实现服务发现。具体可参考此教程完成应用部署:部署Demo 应用程序。部署完成后,你可以通过 APISIX Dashboard 为应用配置 Service 进行上游配置。
应用场景一:按域名进行路由
在部分场景下,可以通过不同的域名来区分线上基线环境和灰度环境。灰度环境有单独的域名可以配置,假设我们通过访问 www.gray.com 来请求灰度环境,访问 www.base.com 走基线环境。 调用链路 Ingress-nginx -> A -> B -> C,其中 A 可以是一个 spring-boot 的应用。
配置 APISIX 路由规则
在 APISIX Dashboard 选择路由并单击创建。匹配条件中域名、请求路径选择 /*,选择对应的上游。分别配置如下路由:
当 host 为 www.base.com 时,路由到 id 为 401152455435354748 所对应的上游,即 spring-cloud-a-svc;当 host为 www.gray.com 时,路由到 id 为 401163331936715388 所对应的上游,即 spring-cloud-a-gray-svc。 然后进行 base 对应的路由配置:
"uri": "/*",
"name": "spring-cloud-a",
"methods": [
"GET",
"POST",
"PUT",
"DELETE",
"PATCH",
"HEAD",
"OPTIONS",
"CONNECT",
"TRACE"
],
"host": "www.base.com",
"upstream_id": "401152455435354748",
"labels": {
"API_VERSION": "0.0.1"
},
"status": 1
进行 gray 对应的路由配置:
"uri": "/*",
"name": "spring-cloud-a-gray",
"priority": 1,
"methods": [
"GET",
"POST",
"PUT",
"DELETE",
"PATCH",
"HEAD",
"OPTIONS",
"CONNECT",
"TRACE"
],
"host": "www.gray.com",
"upstream_id": "401163331936715388",
"labels": {
"API_VERSION": "0.0.1"
},
"status": 1
配置 MSE 全链路灰度
你需要配置完成 MSE 的全链路发布,具体操作细节可参考此教程:配置全链路灰度。
结果验证
访问 www.base.com 路由到 A 应用的 base 版本:
curl -H"Host:www.base.com" http://47.97.253.177/a
A[172.18.144.15] -> B[172.18.144.125] -> C[172.18.144.90]%
访问 www.gray.com 路由到 A 应用的 gray 版本:
curl -H"Host:www.gray.com" http://47.97.253.177/a
Agray[172.18.144.16] -> Bgray[172.18.144.57] -> Cgray[172.18.144.157]%
应用场景二:按指定请求参数进行路由
有些客户端无法改写域名,希望能访问 www.demo.com 通过传入不同的参数来路由到灰度环境。例如下图中,通过 env=gray 这个请求参数,来访问灰度环境。 调用链路 Ingress-APISIX -> A -> B -> C,其中 A 可以是一个 spring-boot 的应用。
配置 APISIX 路由规则
在 APISIX Dashboard 选择路由并单击创建。匹配条件中新建高级匹配规则、请求路径选择 /*,选择对应的上游。分别配置如下路由:
当 host 为 www.demo.com,请求参数 env=gray 时,路由优先匹配 id 为 401163331936715388 所对应的上游,即 spring-cloud-a-gray-svc;当 host 为 www.demo.com 时,路由经会匹配 id 为 401152455435354748 所对应的上游,即 spring-cloud-a-svc。 然后进行 base 对应的路由配置:
"uri": "/*",
"name": "spring-cloud-a",
"methods": [
"GET",
"POST",
"PUT",
"DELETE",
"PATCH",
"HEAD",
"OPTIONS",
"CONNECT",
"TRACE"
],
"host": "www.demo.com",
"upstream_id": "401152455435354748",
"labels": {
"API_VERSION": "0.0.1"
},
"status": 1
进行 gray 对应的路由配置,如下图所示:
"uri": "/*",
"name": "spring-cloud-a-gray",
"priority": 1,
"methods": [
"GET",
"POST",
"PUT",
"DELETE",
"PATCH",
"HEAD",
"OPTIONS",
"CONNECT",
"TRACE"
],
"host": "www.demo.com",
"vars": [
"arg_env",
"==",
"gray"
],
"upstream_id": "401163331936715388",
"labels": {
"API_VERSION": "0.0.1"
},
"status": 1
配置 MSE 全链路灰度
配置 MSE 全链路灰度步骤与应用场景****一的内容一致。
结果验证
此时,访问 www.demo.com 路由到基线环境:
curl -H"Host:www.demo.com" http://47.97.253.177/a
A[172.18.144.15] -> B[172.18.144.125] -> C[172.18.144.90]%
此时,访问 www.demo.com 同时 env=gray 时路由到灰度环境:
curl -H"Host:www.demo.com" http://47.97.253.177/a?env=gray
Agray[172.18.144.16] -> Bgray[172.18.144.57] -> Cgray[172.18.144.157]%
注意:其中 47.97.253.177 为 APISIX 的公网 IP。
总结
基于 Apache APISIX 灵活的路由能力,配合 MSE 全链路灰度能力,可以快速实现企业级的全链路灰度的能力。 APSIX 支持按照 Header、Cookie、Params、域名等多种方式进行路由,只需要在网关侧根据需求将流量路由至不同的“泳道”环境后,流量在对应标签的“泳道”中自动闭环,当泳道中并不存在调用链中所依赖的其他服务时,流量需要回退至基线环境,进一步在必要的时候路由回对应标签的泳道。
Apache_APISIX_中文社区
关注
关注
点赞
收藏
打赏
评论
阿里云 MSE 基于 Apache APISIX 的全链路灰度方案实践
本篇文章描述了阿里云微服务引擎 MSE 如何基于 Apache APISIX 灵活的路由能力,配合 MSE 全链路灰度能力,通过极简的配置与无代码侵入的方式,来实现全链路灰度,释放基于 APISIX 的微服务架构的新价值。...
复制链接
扫一扫
APISIX安装与灰度、蓝绿发布
最新发布
penngo的专栏
12-03
737
APISIX安装与灰度、蓝绿发布
参与评论
您还未登录,请先
登录
后发表或查看评论
通过 MSE 实现基于Apache APISIX的全链路灰度
阿里云技术
08-31
183
无论是微服务网关还是微服务本身都需要识别流量,根据治理规则做出动态决策。当服务版本发生变化时,这个调用链路的转发也会实时改变。相比于利用机器搭建的灰度环境,这种方案不仅可以节省大量的机器成本和运维人力,而且可以帮助开发者实时快速的对线上流量进行精细化的全链路控制。...
注册配置、微服务治理、云原生网关三箭齐发,阿里云 MSE 持续升级
阿里云云栖号
11-07
92
MSE 云原生网关作为托管型的独享实例,与部署业务应用的资源解耦,并支持过载保护、故障自愈、限流降级等功能,确保流量高峰时的稳定性。其优异的性能表现使费芮不需要高规格的资源配置即可支撑大规模的业务调用。
利用阿里云的MSE,上一个真正的灰度发布方案
sdmei
12-21
1740
1.MSE是啥
阿里云MSE(Microservices Engine)微服务引擎含以下三个主要模块:微服务注册中心、微服务治理和云原生网关。其中微服务治理功能中的标签路由,可以实现灰度功能。
2.灰度需求
除了流量入口(如桩服务、gateway服务等),所有后端服务都要能支持按版本分组;
将应用的相关版本隔离成一个独立的运行环境,通过设置流控路由规则,将满足规则的请求流量路由到目标版本应用。
示意图:
线上服务版本v1111;
新版版本v2222,即灰度版本;
设置流量规则,满足规则的流.
灰度发布、蓝绿部署、金丝雀都是啥?
m0_38017860的博客
04-19
5206
目录
滚动部署
蓝绿发布
为什么还需要蓝绿
金丝雀发布(canary)
金丝雀和蓝绿的对比
灰度发布
A/B Test
实现
kubernetes
istio
spring cloud
网关
参考
滚动部署
在滚动部署中,应用的新版本逐步替换旧版本。实际的部署发生在一段时间内。在此期间,新旧版本会共存,而不会影响功能和用户体验。这个过程可以更轻易的回滚和旧组件不兼容的任何新组件。
下图显示了该部署模式:旧版本显示为蓝色,新版本显示为绿色,它们部署在集群中的每一台
apisix高性能网关-中文开发文档
Z.X的博客
06-12
1965
2020年6月12日13:48:33
github:https://github.com/apache/incubator-apisix
目前此项目已有成为apache孵化项目
官方中文文档 :https://github.com/apache/incubator-apisix/blob/master/README_CN.md
支持的功能很多,我个人比较推荐服务发现,这个很省资源,不然得吧j...
Apache APISIX 社区双周报 | 功能亮点更新进行中
ApacheAPISIX的博客
12-21
104
12 月 26 日(周日),Apache APISIX 社区将联合 Apache RocketMQ 社区为大家带来更多实践内容的线上分享。想要了解更多应用实践内容,一起来参与此次的线上 Meetup 吧!
全链路灰度新功能:MSE上线配置标签推送
阿里云技术
08-22
92
微服务场景下,全链路灰度作为一种低成本的新功能验证方式,得到了越来越广泛的应用。除了微服务实例和流量的灰度,微服务应用中的配置项也应该具备相应的灰度能力,以应对灰度应用对特殊配置的诉求。
APISIX简要叙述
учёба
12-16
2660
1 概述
1.1 概念
APISIX 是基于 OpenResty + etcd 实现的云原生、高性能、可扩展的微服务 API 网关
OpenResty:通过 Lua 扩展 Nginx 实现的可伸缩的 Web 平台
Lua :使用C语言表现的一种轻量级可扩展脚本语言,开源
OpenResty 是一个 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,并且性能非常高
OpenResty 的目标是让你的 Web 服务直接跑在 Nginx 服务内
助力开发者,全方位解读 APISIX 测试案例
ApacheAPISIX的博客
07-15
370
本文主要为大家介绍了测试的相关流程,以及在 APISIX 测试案例的构成和如何进行测试案例的编写,希望通过本文你可以对 APISIX 的测试案例有一个大致的认识。
APISIX、APISIX Dashboard搭建、路由配置及插件使用
CaptainJava的博客
06-28
2993
本文简要描述了APISIX、APISIX Dashboard的搭建
以及消费者consumer、常用插件等的使用
国产微服务网关 APISIX,有点意思,直接开锤,换掉家门口的Nginx
weixin_47083537的博客
05-12
2569
概述
快速安装
APISIX 控制台
动态负载均衡
限流限速
身份验证
健康检查
彩蛋
5.1 放假写的。
啊!我是真的认真!!!
1. 概述
APISIX 是基于 OpenResty + etcd 实现的云原生、高性能、可扩展的微服务 API 网关。它是国人开源,目前已经进入 Apache 进行孵化,牛逼!!!
OpenResty:通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台。
etcd:Key/Value 存储系统。
APISIX 通过插件机制,提供了动态负载平衡、身份验证.
基于 Apache APISIX 的自动化运维平台
ApacheAPISIX的博客
06-15
676
本文由前同程数科运维经理陈庆介绍了如何基于 Apache APISIX 实现自动化运维平台。
MSE 支持 Apache Shenyu 网关实现全链路灰度
阿里巴巴中间件
07-31
422
01什么是全链路灰度Aliware微服务体系架构中,服务之间的依赖关系错综复杂,有时某个功能发版依赖多个服务同时升级上线。我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。在发布过程中,我们只需部署服务的灰度版本,流量在调用链路上流转时,由流经的网关、各个...
高性能微服务网关APISIX - API文档
知秋的博客
12-15
3494
Admin API
Description
Admin API 是为 Apache APISIX 服务的一组 API,我们可以将参数传递给 Admin API 以控制 APISIX 节点。更好地了解其工作原理,请参阅 architecture-design 中的文档。
启动 Apache APISIX 时,默认情况下 Admin API 将监听 9080 端口(HTTPS 的 9443 端口)。您可以通过修改 conf/config.yaml 文件来改变默认监听的端口。
在下面出现的 X-API-KEY 指
APISIX简介与应用
热门推荐
坎坎坷坷
04-29
2万+
APISIX 是一个云原生、高性能、可扩展的微服务 API 开源网关,基于OpenResty(Nginx+Lua)和etcd来实现,对比传统的API网关,具有动态路由和热插件加载的特点。系统本身自带前端,可以手动配置路由、负载均衡、限速限流、身份验证等插件,操作方便。APISIX是用Lua语言开发,语言相对简单,容易上手,同时可以按自己的需求进行系统的二次开发以及开发自己的插件,目前APISIX已...
云原生人物志|APISIX温铭:让API网关“666”
CSDN云计算
12-01
1434
云原生已无处不在,《云原生人物志》是CSDN重磅推出的系列原创采访,我们关注云原生中每一个技术人的身影。知微见著,窥见云原生价值与趋势。
作者 | 宋慧
出品 | CSDN云计算
头图 | 付费下载于IC Photo
第一期,我们采访了唯一由中国初创公司捐赠给 Apache 基金会的开源项目——APISIX的联合创始人&CEO温铭。在不改变原意的前提下,CSDN对访谈进行了整理和编辑。
创业前,温铭已有10年的安全领域技术背景。虽然是做安全出身,但乐于分享的他从开源收获了更大的快乐和成就感,在采.
可观测性能力升级,Apache APISIX 集成 OpenTelemetry
ApacheAPISIX的博客
03-08
1911
本文为您介绍 Apache APISIX opentelemetry 插件概念以及如何如何开启和部署 opentelemetry 插件。
背景信息
Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。作为 API 网关,Apache APISIX 不仅拥有众多实用的插件,而且支持插件动态变更和热插拔。
OpenTelemetry 是一个开源的遥测数据采集和处理系统,它不仅提供了各种 SDK 用于应用端遥测数
APISIX 极简入门(国产微服务网关)
weixin_42073629的博客
06-21
6006
1. 概述
APISIX 是基于OpenResty+etcd实现的云原生、高性能、可扩展的微服务 API 网关。它是国人开源,目前已经进入 Apache 进行孵化,牛逼!!!
OpenResty:通过 Lua 扩展 Nginx 实现的可伸缩的 Web 平台。
etcd:Key/Value 存储系统。
APISIX 通过插件机制,提供了动态负载平衡、身份验证、限流限速等等功能,当然我们也可以自己开发插件进行拓展。
动态负载均衡:跨多个上游服务的动态负载均衡,目前已支持 round-r...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:1024
设计师:我叫白小胖
返回首页
Apache_APISIX_中文社区
CSDN认证博客专家
CSDN认证企业博客
码龄2年
暂无认证
140
原创
7万+
周排名
1万+
总排名
9万+
访问
等级
1484
积分
120
粉丝
22
获赞
13
评论
59
收藏
私信
关注
热门文章
舍弃Kong和Nginx,Apache APISIX 在趣链科技 BaaS 平台的落地实践
5662
Apache APISIX 2.13.0 发布
5383
Apache APISIX 存在改写 X-REAL-IP header 的风险公告(CVE-2022-24112)
5077
Apache APISIX 携手 CoreDNS 打开服务发现新大门
4399
API 网关 Apache APISIX 集成 Eureka 作为服务发现
4364
分类专栏
客户案例
5篇
技术布道
5篇
版本发布
7篇
合作插件
12篇
社区周报
12篇
最新评论
基于 Apache APISIX 的自动化运维平台
Apache_APISIX_中文社区:
该文章为 Apache APISIX 中文社区账号首发,同步到各平台。
基于 Apache APISIX 的自动化运维平台
尼古拉斯-李:
为什么这么多相同的文章?谁抄得谁?
使用 Java 编写 Apache APISIX 插件
优化优化:
这个需要 JDK11 吧
使用 Java 编写 Apache APISIX 插件
优化优化:
这个需要 JDK11 吧
新插件上线,public API 处理能力更进一步
涵儿:
已解决
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
认证鉴权对于 API 网关的重要性
为什么 APISIX Ingress 是比 Traefik 更好的选择?
马斯克都不懂的 GraphQL,API 网关又能对其如何理解?
2022
12月
9篇
11月
8篇
10月
4篇
09月
3篇
08月
4篇
07月
3篇
06月
7篇
05月
1篇
04月
2篇
03月
7篇
02月
15篇
01月
7篇
2021年72篇
目录
目录
分类专栏
客户案例
5篇
技术布道
5篇
版本发布
7篇
合作插件
12篇
社区周报
12篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
Apache_APISIX_中文社区
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值