深入剖析全鏈路灰度技術(shù)內(nèi)幕

微服務(wù)架構(gòu)帶來的挑戰(zhàn)
Cloud Native


什么是全鏈路灰度
Cloud Native




基于 Provider 的治理策略。配置 Cart 的流量流入規(guī)則,User 路由到 Cart 時使用 Cart 的流量流入規(guī)則。
基于 Consumer 的治理策略。配置 User 的流量流出規(guī)則, User 路由到 Cart 時使用 User 的流量流出規(guī)則。

全鏈路灰度的解決方案
Cloud Native


鏈路上各個組件和服務(wù)能夠根據(jù)請求流量特征進行動態(tài)路由 需要對服務(wù)下的所有節(jié)點進行分組,能夠區(qū)分版本
需要對流量進行灰度標(biāo)識、版本標(biāo)識 需要識別出不同版本的灰度流量
標(biāo)簽路由

節(jié)點打標(biāo)


流量染色
分布式鏈路追蹤

邏輯環(huán)境隔離——基于 SDK

邏輯環(huán)境隔離——基于 Java Agent

邏輯環(huán)境隔離——基于 Service Mesh

三種方式對比

如果您傾向于使用無侵入式的 Java Agent 的方式,但又擔(dān)心自建帶來的穩(wěn)定性問題,您可以選擇 MSE 微服務(wù)治理產(chǎn)品,該產(chǎn)品是阿里巴巴內(nèi)部多年在微服務(wù)治理領(lǐng)域的沉淀的產(chǎn)出,經(jīng)歷了各種大促考驗。
如果您傾向于使用語言無關(guān)、無侵入式的 Service Mesh 的方式,但又擔(dān)心自建帶來的穩(wěn)定性問題,您可以選擇阿里云 ASM 產(chǎn)品,相比開源 Istio,在功能性、穩(wěn)定性和安全性都有很大的提升。

從 0 到 1 實踐全鏈路灰度
Cloud Native

必備的資源列表
已擁有一個 MSE 云原生網(wǎng)關(guān) 已擁有一個 MSE Nacos 注冊中心
已擁有一個 ACK 運維集群 已開通 MSE 微服務(wù)治理專業(yè)版
部署 Demo 應(yīng)用程序
全鏈路灰度能力是與注冊中心無關(guān)的,本文用例暫以 MSE Nacos 作為注冊中心,所以需要將 spring.cloud.nacos.discovery.server-addr 換成業(yè)務(wù)自己的 Nacos 注冊中心地址 接入云原生網(wǎng)關(guān)的服務(wù),如果需要使用灰度發(fā)布,需要在發(fā)布服務(wù)時在元數(shù)據(jù)信息增加版本標(biāo)。在我們的例子,服務(wù) A 是需要暴露給網(wǎng)關(guān),所以發(fā)布時為基線版本添加spring.cloud.nacos.discovery.metadata.version=base,為灰度版本添加 spring.cloud.nacos.discovery.metadata.version=gray。
# A 應(yīng)用 base 版本---apiVersion: apps/v1kind: Deploymentmetadata:labels:app: spring-cloud-aname: spring-cloud-aspec:replicas: 2selector:matchLabels:app: spring-cloud-atemplate:metadata:annotations:msePilotCreateAppName: spring-cloud-alabels:app: spring-cloud-aspec:containers:env:name: LANGvalue: C.UTF-8name: JAVA_HOMEvalue: /usr/lib/jvm/java-1.8-openjdk/jrename: spring.cloud.nacos.discovery.server-addrvalue: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848name: spring.cloud.nacos.discovery.metadata.versionvalue: baseimage: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:0.1-SNAPSHOTimagePullPolicy: Alwaysname: spring-cloud-aports:containerPort: 20001protocol: TCPresources:requests:cpu: 250mmemory: 512Mi# A 應(yīng)用 gray 版本apiVersion: apps/v1kind: Deploymentmetadata:labels:app: spring-cloud-a-newname: spring-cloud-a-newspec:replicas: 2selector:matchLabels:app: spring-cloud-a-newstrategy:template:metadata:annotations:: graymsePilotCreateAppName: spring-cloud-alabels:app: spring-cloud-a-newspec:containers:env:name: LANGvalue: C.UTF-8name: JAVA_HOMEvalue: /usr/lib/jvm/java-1.8-openjdk/jrename: profiler.micro.service.tag.trace.enablevalue: "true"name: spring.cloud.nacos.discovery.server-addrvalue: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848name: spring.cloud.nacos.discovery.metadata.versionvalue: grayimage: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:0.1-SNAPSHOTimagePullPolicy: Alwaysname: spring-cloud-a-newports:containerPort: 20001protocol: TCPresources:requests:cpu: 250mmemory: 512Mi# B 應(yīng)用 base 版本---apiVersion: apps/v1kind: Deploymentmetadata:labels:app: spring-cloud-bname: spring-cloud-bspec:replicas: 2selector:matchLabels:app: spring-cloud-bstrategy:template:metadata:annotations:msePilotCreateAppName: spring-cloud-blabels:app: spring-cloud-bspec:containers:env:name: LANGvalue: C.UTF-8name: JAVA_HOMEvalue: /usr/lib/jvm/java-1.8-openjdk/jrename: spring.cloud.nacos.discovery.server-addrvalue: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-b:0.2-demo-SNAPSHOTimagePullPolicy: Alwaysname: spring-cloud-bports:containerPort: 8080protocol: TCPresources:requests:cpu: 250mmemory: 512Mi# C 應(yīng)用 base 版本---apiVersion: apps/v1kind: Deploymentmetadata:labels:app: spring-cloud-cname: spring-cloud-cspec:replicas: 2selector:matchLabels:app: spring-cloud-ctemplate:metadata:annotations:msePilotCreateAppName: spring-cloud-clabels:app: spring-cloud-cspec:containers:env:name: LANGvalue: C.UTF-8name: JAVA_HOMEvalue: /usr/lib/jvm/java-1.8-openjdk/jrename: spring.cloud.nacos.discovery.server-addrvalue: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-c:0.2-demo-SNAPSHOTimagePullPolicy: Alwaysname: spring-cloud-cports:containerPort: 8080protocol: TCPresources:requests:cpu: 250mmemory: 512Mi# C 應(yīng)用 gray 版本---apiVersion: apps/v1kind: Deploymentmetadata:labels:app: spring-cloud-c-newname: spring-cloud-c-newspec:replicas: 2selector:matchLabels:app: spring-cloud-c-newtemplate:metadata:annotations:: graymsePilotCreateAppName: spring-cloud-clabels:app: spring-cloud-c-newspec:containers:env:name: LANGvalue: C.UTF-8name: JAVA_HOMEvalue: /usr/lib/jvm/java-1.8-openjdk/jrename: spring.cloud.nacos.discovery.server-addrvalue: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-c:0.2-demo-SNAPSHOTimagePullPolicy: Alwaysname: spring-cloud-c-newports:containerPort: 8080protocol: TCPresources:requests:cpu: 250mmemory: 512Mi
完成云原生網(wǎng)關(guān)初步配置







curl -H "Host: base.example.com" http://118.31.118.69/aA[172.21.240.105] -> B[172.21.240.106] -> C[172.21.240.46]
curl -H "Host: base.example.com" -H "x-mse-tag: gray" http://118.31.118.69/aAgray[172.21.240.44] -> B[172.21.240.146] -> Cgray[172.21.240.147]
總結(jié)
Cloud Native
評論
圖片
表情
