操作手册
【试用教程】使用MSE微服务治理实现金丝雀发布
mse
手动配置
40
教程简介
通过本教程,您将学习如何将应用通过云服务器ECS(Elastic Compute Service)接入到微服务引擎MSE(Microservices Engine),并使用MSE的金丝雀发布功能实现应用的灰度发布。
我能学到什么
学会如何使用MSE的金丝雀发布实现单应用的灰度发布。
学会将应用通过云服务器ECS接入到微服务引擎MSE。
学会如何部署灰度发布环境。
准备环境和资源
5
开始教程前,请按以下步骤准备环境和资源:
准备云服务器ECS
您可以前往阿里云免费试用查看您的阿里云账号是否具有云服务器ECS试用资格。如有试用资格,可通过试用ECS来完成教程。如无试用资格,则需使用自有ECS资源才能完成教程。不建议使用生产环境中的自有ECS资源,也不要将教程中的测试数据和自有ECS资源的数据混用。测试完成后及时清理测试数据,避免影响自有资源正常运行。
本教程的ECS实例需要满足以下条件,其他参数可按需配置。
实例规格:4核16GB或更高规格。
操作系统:CentOS 7.9 64位。
本教程以华东1(杭州)地域所创建的实例为例。
开通微服务引擎服务治理MSE
访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。
成功登录后,在产品类别下选择中间件 > 微服务引擎,在微服务引擎服务治理 MSE卡片上单击立即试用。
在微服务引擎服务治理 MSE页面,仔细阅读并勾选微服务治理试用版服务协议,然后单击立即试用。
在提交成功页面,单击前往控制台。为了更好地体验产品的能力,您还需要为MSE创建关联角色AliyunServiceRoleForMSE。
在欢迎访问微服务引擎 MSE 2.0页面,单击立即授权。
在弹出的确认授权的对话框中,单击确认,然后单击下一步。
单击立即体验微服务引擎MSE。
开通微服务引擎注册配置中心MSE
访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。
成功登录后,在产品类别下选择中间件 > 微服务引擎,在微服务引擎注册配置中心 MSE卡片上单击立即试用。
在微服务引擎注册配置中心 MSE页面,引擎类型选择Nacos,选择专有网络和交换机。
单击立即试用完成开通。
登录ECS远程服务器
3
登录ECS管理控制台。在左侧导航栏,选择实例与镜像>实例。
在顶部菜单栏,选择已购买的实例所在地域。
在实例列表页面,搜索需要连接的实例,单击该实例对应操作列下的远程连接。
在弹出的远程连接对话框中,单击通过Workbench远程连接对应的立即登录。本教程涉及的所有命令均需要在ECS的远程服务器上执行。
为ECS实例安装JDK
2
执行命令,安装JDK。
yum install -y java-1.8.0-openjdk-devel
在任意路径下执行
java -version
命令,如果能够看到当前Java版本,说明JDK安装成功。
为ECS实例安装MSE Java Agent
4
下载MSE Java Agent,并将AliyunJavaAgent.zip中的所有文件解压到指定目录中。代码中的
cn-hangzhou
地域需要与ECS实例所在地域保持一致。执行
wget
命令,下载公网MSE Java Agent。若您的ECS实例不是华东1(杭州)地域,请将代码中的cn-hangzhou
替换为您的ECS实例所在地域。wget http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/ms/AliyunJavaAgent.zip
公网地址无法下载时,请下载VPC网络的MSE Java Agent。若您的ECS实例不是华东1(杭州)地域,请将代码中的cn-hangzhou替换为您的ECS实例所在地域。
wget http://arms-apm-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/ms/AliyunJavaAgent.zip
执行
unzip
命令,解压AliyunJavaAgent.zip。如果出现command not found
报错 ,则需要先执行yum install unzip
安装unzip命令。解压之后在AliyunJavaAgent目录下会有一个aliyun-java-agent.jar,此.jar包在后续启动A、B、C、gateway以及A(Gray)时会用到。本教程以解压到root目录下为例,即.jar包的路径为/root/AliyunJavaAgent/aliyun-java-agent.jar。unzip AliyunJavaAgent.zip
部署网关和应用
2
本教程需要部署一个网关gateway,三个应用A、B、C。建议将网关和应用下载安装到同一个目录。 本教程以网关和应用全部部署在/root/目录为例。
执行
wget
命令,部署网关。wget https://mse-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/mse-simple-demo/gateway.jar
执行
wget
命令,部署A、B、C应用。wget https://mse-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/mse-simple-demo/A.jar \ wget https://mse-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/mse-simple-demo/B.jar \ wget https://mse-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/mse-simple-demo/C.jar \
获取MSE的LicenseKey
2
此步骤获取的LicenseKey,会在后续启动实例过程中使用。开通MSE后,系统自动生成的接入凭证,请不要泄露给第三方。不同地域对应的LicenseKey不同,不可混用。
登录MSE治理中心控制台。
在左侧导航栏,选择治理中心>概览。
在顶部菜单栏选择地域。此处地域需要和ECS实例所在地域保持一致。本教程以华东1(杭州)为例。
在概览页面,单击右上角的查看 LicenseKey,然后单击复制LicenseKey。
启动A、B、C应用的Base版本
6
分别启动C、B、A应用的Base版本。启动参数中的
<aliyun-java-agent.jar的存放路径>
和<LicenseKey>
需要替换成您自己的aliyun-java-agent.jar的存放路径和在上一步骤中获取到的LicenseKey。应用C、B、A和网关gateway的启动参数相同。在ECS远程服务器页面右上角,单击
图标,开启新会话窗口。
aliyun-java-agent.jar的路径会在启动参数中多次使用。本教程aliyun-java-agent.jar的存放路径为/root/AliyunJavaAgent/aliyun-java-agent.jar。
执行命令,配置C应用的启动参数。
export JAVA_TOOL_OPTIONS="-javaagent:/<aliyun-java-agent.jar的存放路径> -Dmse.licenseKey=<LicenseKey> -Dmse.namespace=default -Dmse.enable=true -Dprofiler.micro.service.mse.version=pro"
执行命令,将C应用注册到Nacos,启动C应用的Base版本。
env nacos.host=<Nacos实例IP> server.port=20003 java -Dmse.appName=sc-C -jar C.jar
查看结果。若出现所示代码,说明C应用启动成功。
nacos registry, DEFAULT_GROUP sc-C 192.168.2.1:20003 register finished
在ECS远程服务器页面右上角,单击
图标,开启新会话窗口。
执行代码,配置B应用的启动参数。
export JAVA_TOOL_OPTIONS="-javaagent:/<aliyun-java-agent.jar的存放路径> -Dmse.licenseKey=<LicenseKey> -Dmse.namespace=default -Dmse.enable=true -Dprofiler.micro.service.mse.version=pro"
执行命令,将B应用注册到Nacos,启动B应用的Base版本。
env nacos.host=<Nacos实例IP> server.port=20002 java -Dmse.appName=sc-B -jar B.jar
查看结果。若出现所示代码,说明B应用启动成功。
nacos registry, DEFAULT_GROUP sc-B 192.168.2.1:20002 register finished
在ECS远程服务器页面右上角,单击
图标,开启新会话窗口。
执行所示,配置A应用的启动参数。
export JAVA_TOOL_OPTIONS="-javaagent:/<aliyun-java-agent.jar的存放路径> -Dmse.licenseKey=<LicenseKey> -Dmse.namespace=default -Dmse.enable=true -Dprofiler.micro.service.mse.version=pro"
执行命令,将A应用注册到Nacos,启动A应用的Base版本。
env dubbo.protocol.port=20881 nacos.host=<Nacos实例IP> server.port=20001 java -Dmse.appName=sc-A -jar A.jar # Dubbo监听端口此处显式指明,防止在同一台ECS启动时端口冲突
查看结果。若出现所示代码,说明A应用启动成功。
nacos registry, DEFAULT_GROUP sc-A 192.168.2.1:20001 register finished
在ECS远程服务器页面右上角,单击
图标,开启新会话窗口。
执行所示,配置网关的启动参数。
export JAVA_TOOL_OPTIONS="-javaagent:/<aliyun-java-agent.jar的存放路径> -Dmse.licenseKey=<LicenseKey> -Dmse.namespace=default -Dmse.enable=true -Dprofiler.micro.service.mse.version=pro"
执行命令,启动网关。
env demo.qps=0 nacos.host=<Nacos实例IP> server.port=20000 java -Dmse.appName=sc-zuul -jar gateway.jar
查看结果。若出现所示代码,说明网关启动成功。
nacos registry, DEFAULT_GROUP sc-zuul 192.168.2.1:20000 register finished
为应用A添加灰度(Gray)版本
2
在本教程中,启动A应用的Gray版本模拟对A应用进行金丝雀发布。
在ECS远程服务器页面右上角,单击图标,开启新会话窗口。
执行代码,配置A应用的启动参数。
export JAVA_TOOL_OPTIONS="-javaagent:/<aliyun-java-agent.jar的存放路径> -Dmse.licenseKey=<LicenseKey> -Dmse.namespace=default -Dmse.enable=true -Dprofiler.micro.service.mse.version=pro"
执行命令,启动A应用的Gray版本。将A应用的Gary版本注册到Nacos,在启动参数中额外添加-Dalicloud.service.tag=gray用来标识Gray版本。
env dubbo.protocol.port=30881 nacos.host=<Nacos实例IP> server.port=30001 java -Dmse.appName=sc-A -Dalicloud.service.tag=gray -jar A.jar
查看结果。若出现所示代码,说明A应用的Gray版本启动成功。
nacos registry, DEFAULT_GROUP sc-A 192.168.2.1:30001 register finished
验证流量的流向
2
在ECS远程服务器页面右上角,单击图标,开启新会话窗口。需要确保其他会话不中断。
执行命令,查看流量的流向和比例。
for i in $(seq 1 10); do curl http://127.0.0.1:20000/A/a ; echo ; done
查看预期输出结果。可以发现10个请求都流向了Base。因为gateway初始化需要一定时间,可能前2个请求会有报错,稍后重复执行命令即可。
A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 8 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 9 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 10 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 11 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 12 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 13 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 14 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 15 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1]
在MSE控制台设置金丝雀比例
4
登录MSE治理中心控制台,并在顶部菜单栏选择地域,本教程地域选择华东1(杭州)。
在左侧导航栏,选择治理中心>应用治理,然后单击sc-A应用卡片。
在sc-A应用详情页面的左侧导航栏,单击流量治理。
单击金丝雀页签,然后在页面左上角,单击引入流量。
在引入流量页面,选择按比例灰度。在实际业务中,您可以逐步调整Gary版本的流量比例,来达到金丝雀效果。为便于您快速体验该功能,本教程配置Gray版本和Base(未达标)版本实例的流量比例均为50。
单击确定。
查看流量的流向和比例
2
在ECS远程服务器页面右上角,单击图标,开启新会话窗口。
执行命令,查看流量的流向和比例。
for i in $(seq 1 10); do curl http://127.0.0.1:20000/A/a ; echo ; done
查看预期输出结果。可以看到A应用的10个请求中有3个请求流向了Gray版本,7个请求处于Base版本。因为有随机的流量,所以流入Base版本和Gray版本的流量比例不是精确的1:1。
A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 16 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 17 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 18 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 19 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 20 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 21 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 22 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 23 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 24 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1]
完成
4
在MSE控制台上将Gray版本的流量比例调整至100,未达标版本的流量比例调整为0,即流量全部流入Gray版本。
在ECS远程服务器页面右上角,单击
图标,开启新会话窗口。执行命令,查看流量的流向和比例。
for i in $(seq 1 10); do curl http://127.0.0.1:20000/A/a ; echo ; done
查看预期输出结果。可以发现A应用的10个请求都流向了Gray版本,即金丝雀发布完成。
Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 8 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 9 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 10 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 11 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 12 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 13 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 14 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 15 Agray[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1]
新版本全量发布后,单击发布完成。完成后,金丝雀规则路由将被暂时关闭,未打标版本的流量比例被自动调整成100%。
在ECS远程服务器页面右上角,单击
图标,开启新会话窗口。执行命令,查看流量的流向和比例。
for i in $(seq 1 10); do curl http://127.0.0.1:20000/A/a ; echo ; done
查看预期输出结果。可以发现A应用的10个请求都流向了Base版本。
A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 8 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 9 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 10 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 11 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 12 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 13 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 14 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1] 15 A[192.168.2.1][config=base] -> B[192.168.2.1] -> C[192.168.2.1]
清理及后续
2
完成教程后,请及时清理测试数据和试用资源。
MSE应用
如果无需继续使用MSE应用,请登录MSE治理中心控制台,找到目标应用,在目标应用卡片上单击
图标,然后单击移除。在弹出的删除对话框中,单击确定。删除应用后,此应用对应的所有规则也将被清空。
如果仍需要继续使用MSE应用,请在应用到期前登录MSE治理中心控制台,在左侧导航栏选择治理中心>概览,在资源开通区域单击开通,根据页面提示开通付费版微服务治理。
ECS实例
如果您在本教程中使用的ECS为试用中心的试用实例,参考以下规则清理:
包年包月实例到期会自动释放,释放实例的同时释放数据。
如果需要继续使用实例,请在试用到期前及时续费。到期未续费的实例会因欠费而被自动停机,停机15天内实例将保留,15天后实例和数据都将被自动释放。
总结
常用知识点
问题1:如何获取LicenseKey?(单选题)
正确答案是登录MSE控制台,在治理中心>概览页面获取,且不同地域对应的LicenseKey不同,不可混用。
问题2:MSE Java Agent中的网络所在地域需要和以下哪些实例的所在地域保持一致?(单选题)
正确答案是ECS实例和MSE实例。MSE Java Agent、ECS实例、MSE实例都需要在同一个地域,否则无法将ECS实例接入到MSE控制台实现MSE微服务治理能力。
延伸阅读
访问以下链接查看更多教程: