国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

做網(wǎng)站被騙預(yù)付款怎么辦廣州推廣工具

做網(wǎng)站被騙預(yù)付款怎么辦,廣州推廣工具,wordpress 微媒體插件,企業(yè)展廳綜合建設(shè)公司作者:尹航 在前文《基于阿里云服務(wù)網(wǎng)格流量泳道的全鏈路流量管理(一):嚴(yán)格模式流量泳道》、《基于阿里云服務(wù)網(wǎng)格流量泳道的全鏈路流量管理(二):寬松模式流量泳道》中,我們介紹了流…

作者:尹航

在前文《基于阿里云服務(wù)網(wǎng)格流量泳道的全鏈路流量管理(一):嚴(yán)格模式流量泳道》、《基于阿里云服務(wù)網(wǎng)格流量泳道的全鏈路流量管理(二):寬松模式流量泳道》中,我們介紹了流量泳道的概念、使用流量泳道進(jìn)行全鏈路灰度管理的方案,以及阿里云服務(wù)網(wǎng)格 ASM 提供的嚴(yán)格模式與寬松模式的流量泳道。在本文中,我們將介紹一種基于 OpenTelemetry 自動插裝方案實現(xiàn)的寬松模式流量泳道場景,無需任何業(yè)務(wù)代碼改造即可為運行在 Kubernetes 集群中的云原生應(yīng)用實現(xiàn)靈活的全鏈路灰度管理能力。

概述

流量泳道是將一個云原生應(yīng)用中的多個服務(wù)根據(jù)服務(wù)版本(或其他特征)隔離成的多個獨立的運行環(huán)境。

在嚴(yán)格模式下,每條流量泳道中包含應(yīng)用的調(diào)用鏈路上的全部服務(wù),對于應(yīng)用程序則沒有任何要求。

而在寬松模式下,您只需要確保創(chuàng)建一條包含調(diào)用鏈路中所有服務(wù)的泳道:基線泳道。其它泳道可以不包含調(diào)用鏈路上的全部服務(wù)。當(dāng)一個泳道中的服務(wù)進(jìn)行相互調(diào)用時,若目標(biāo)服務(wù)在當(dāng)前泳道中不存在,則請求將被轉(zhuǎn)發(fā)到基線泳道中的相同服務(wù),并在請求目標(biāo)存在當(dāng)前泳道中存在時將請求重新轉(zhuǎn)發(fā)回當(dāng)前泳道。寬松模式的流量泳道雖然可以實現(xiàn)靈活的全鏈路灰度,但要求應(yīng)用程序必須包含一個能夠在整條調(diào)用鏈路中透傳的請求頭(鏈路透傳請求頭)。

阿里云服務(wù)網(wǎng)格 ASM 已經(jīng)提供一種基于 baggage 透傳的全新寬松模式流量泳道方案,能夠在不改造業(yè)務(wù)代碼的情況下,實現(xiàn)泳道服務(wù)的靈活灰度。

背景介紹

OpenTelemetry 是云原生計算基金會(Cloud Native Computing Foundation, CNCF)的一個項目,與其他 CNCF 項目如 Kubernetes、Prometheus 和 Envoy 等緊密相連,共同構(gòu)建了云原生技術(shù)生態(tài)系統(tǒng)的基礎(chǔ)。由于其提供的豐富功能和廣泛適用性,OpenTelemetry 在業(yè)內(nèi)已經(jīng)確立了其領(lǐng)導(dǎo)地位,越來越多的企業(yè)和開發(fā)者采用它作為構(gòu)建和維護(hù)可觀測性平臺的核心組件。

baggage 是由 OpenTelemetry 制定并推動的、在分布式系統(tǒng)調(diào)用鏈路中傳遞鏈路上下文信息的標(biāo)準(zhǔn)。它具體表現(xiàn)為一個名為 baggage 的請求頭,其內(nèi)部包含了以鍵值對形式存儲的鏈路上下文信息,例如:

baggage:?userId=alice,serverNode=DF%2028,isProduction=false

您可以使用 OpenTelemetry 提供的 SDK,在服務(wù)調(diào)用鏈路中傳遞 baggage 請求頭、進(jìn)而在整條服務(wù)鏈路上傳遞自定義的上下文信息。當(dāng)服務(wù)部署在 Kubernentes 集群中時,則可以通過 OpenTelemetry Operator 的自動插裝來為服務(wù)提供 baggage 透傳能力、而無需修改業(yè)務(wù)代碼。有關(guān) baggage 的詳細(xì)信息,可以參考 baggage [ 1] 。

基于 baggage 的透傳,阿里云服務(wù)網(wǎng)格 ASM 提供了一種無需修改代碼即可實現(xiàn)的寬松模式流量泳道,并針對流量泳道的引流策略進(jìn)行了增強(qiáng),支持基于流量權(quán)重策略對不同的泳道進(jìn)行引流。本文將首先使用 OpenTelemetry 自動插裝來為服務(wù)引用透傳 baggage 請求頭的能力,接下來創(chuàng)建寬松模式下的三條泳道,并基于流量權(quán)重策略對不同的泳道進(jìn)行引流。

演示:實現(xiàn)服務(wù) baggage 透傳與寬松模式流量泳道

前提條件

  • 已創(chuàng)建 ASM 企業(yè)版或旗艦版實例,且版本為 1.21.6.54 及以上。具體操作,請參見創(chuàng)建 ASM 實例 [ 2]
  • 已添加集群到 ASM 實例。具體操作,請參見添加集群到 ASM 實例 [ 3] 。
  • 已創(chuàng)建名稱為 ingressgateway 的 ASM 網(wǎng)關(guān)。具體操作,請參見創(chuàng)建入口網(wǎng)關(guān)服務(wù) [ 4] 。
  • 已創(chuàng)建名稱為 ingressgateway 且命名空間為 istio-system 的網(wǎng)關(guān)規(guī)則。具體操作,請參見管理網(wǎng)關(guān)規(guī)則 [ 5] 。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:name: ingressgatewaynamespace: istio-system
spec:selector:istio: ingressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- '*'

步驟一:配置服務(wù)透傳 baggage 上下文

本節(jié)主要展示如何通過 OpenTelemetry Operator 自動插裝的方法,為 Kubernetes 集群中的服務(wù)添加 baggage 透傳能力。

  1. 部署 OpenTelemetry Operator。

a. 通過 kubectl 連接到 ASM 實例添加的 Kubernetes 集群。執(zhí)行以下命令,創(chuàng)建 opentelemetry-operator-system 命名空間。

kubectl?create?namespace?opentelemetry-operator-system

b. 執(zhí)行以下命令,使用 Helm 在 opentelemetry-operator-system 命名空間下安裝 OpenTelemetry Operator。(如果尚未安裝 Helm,可以參考安裝 Helm?來安裝 Helm 命令行工具。)

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install \--namespace=opentelemetry-operator-system \--version=0.46.0 \--set admissionWebhooks.certManager.enabled=false \--set admissionWebhooks.certManager.autoGenerateCert=true \--set manager.image.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-operator" \--set manager.image.tag="0.92.1" \--set kubeRBACProxy.image.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/kube-rbac-proxy" \--set kubeRBACProxy.image.tag="v0.13.1" \--set manager.collectorImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-collector" \--set manager.collectorImage.tag="0.97.0" \--set manager.opampBridgeImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/operator-opamp-bridge" \--set manager.opampBridgeImage.tag="0.97.0" \--set manager.targetAllocatorImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/target-allocator" \--set manager.targetAllocatorImage.tag="0.97.0" \--set manager.autoInstrumentationImage.java.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-java" \--set manager.autoInstrumentationImage.java.tag="1.32.1" \--set manager.autoInstrumentationImage.nodejs.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-nodejs" \--set manager.autoInstrumentationImage.nodejs.tag="0.49.1" \--set manager.autoInstrumentationImage.python.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-python" \--set manager.autoInstrumentationImage.python.tag="0.44b0" \--set manager.autoInstrumentationImage.dotnet.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-dotnet" \--set manager.autoInstrumentationImage.dotnet.tag="1.2.0" \--set manager.autoInstrumentationImage.go.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-go-instrumentation" \--set manager.autoInstrumentationImage.go.tag="v0.10.1.alpha-2-aliyun" \opentelemetry-operator open-telemetry/opentelemetry-operator

c. 執(zhí)行以下命令,檢查 opentelemetry-operator 是否正常運行。

kubectl?get?pod?-n?opentelemetry-operator-system

預(yù)期輸出:

NAME READY   STATUS    RESTARTS   AGE
opentelemetry-operator-854fb558b5-pvllj   2/2     Running   0          1m
  1. 配置自動插裝(auto-instrumentation)。

a. 使用以下內(nèi)容,創(chuàng)建 instrumentation.yaml 文件。

apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:name: demo-instrumentation
spec:propagators:- baggagesampler:type: parentbased_traceidratioargument: "1"

b. 執(zhí)行以下命令,在 default 命名空間下聲明自動插裝。

kubectl?apply?-f?instrumentation.yaml

🔔 說明: 對于 OpenTelemetry 框架來說,其最佳實踐還包括部署 OpenTelemetry Collector 以收集可觀測數(shù)據(jù)。由于本文主要演示 OpenTelemetry 自動插裝實現(xiàn)的 baggage 鏈路透傳,因此沒有包含部署 OpenTelemetry Collector 的步驟。

步驟二:部署示例服務(wù)

  1. 為 default 命名空間啟用 Siedcar 網(wǎng)格代理自動注入。具體操作,請參見開啟? Sidecar 自動注入 [ 6]

關(guān)于自動注入的更多信息,請參見配置 Sidecar 注入策略。

  1. 使用以下內(nèi)容,創(chuàng)建 mock.yaml 文件。
apiVersion: v1
kind: Service
metadata:name: mockalabels:app: mockaservice: mocka
spec:ports:- port: 8000name: httpselector:app: mocka
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mocka-v1labels:app: mockaversion: v1
spec:replicas: 1selector:matchLabels:app: mockaversion: v1ASM_TRAFFIC_TAG: v1template:metadata:labels:app: mockaversion: v1ASM_TRAFFIC_TAG: v1annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v1- name: appvalue: mocka- name: upstream_urlvalue: "http://mockb:8000/"ports:- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:name: mockblabels:app: mockbservice: mockb
spec:ports:- port: 8000name: httpselector:app: mockb
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mockb-v1labels:app: mockbversion: v1
spec:replicas: 1selector:matchLabels:app: mockbversion: v1ASM_TRAFFIC_TAG: v1template:metadata:labels:app: mockbversion: v1ASM_TRAFFIC_TAG: v1annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v1- name: appvalue: mockb- name: upstream_urlvalue: "http://mockc:8000/"ports:- containerPort: 8000---
apiVersion: v1
kind: Service
metadata:name: mockclabels:app: mockcservice: mockc
spec:ports:- port: 8000name: httpselector:app: mockc
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mockc-v1labels:app: mockcversion: v1
spec:replicas: 1selector:matchLabels:app: mockcversion: v1ASM_TRAFFIC_TAG: v1template:metadata:labels:app: mockcversion: v1ASM_TRAFFIC_TAG: v1annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v1- name: appvalue: mockcports:- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mocka-v2labels:app: mockaversion: v2
spec:replicas: 1selector:matchLabels:app: mockaversion: v2ASM_TRAFFIC_TAG: v2template:metadata:labels:app: mockaversion: v2ASM_TRAFFIC_TAG: v2annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v2- name: appvalue: mocka- name: upstream_urlvalue: "http://mockb:8000/"ports:- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mockb-v2labels:app: mockbversion: v2
spec:replicas: 1selector:matchLabels:app: mockbversion: v2ASM_TRAFFIC_TAG: v2template:metadata:labels:app: mockbversion: v2ASM_TRAFFIC_TAG: v2annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v2- name: appvalue: mockb- name: upstream_urlvalue: "http://mockc:8000/"ports:- containerPort: 8000---
apiVersion: apps/v1
kind: Deployment
metadata:name: mockc-v2labels:app: mockcversion: v2
spec:replicas: 1selector:matchLabels:app: mockcversion: v2ASM_TRAFFIC_TAG: v2template:metadata:labels:app: mockcversion: v2ASM_TRAFFIC_TAG: v2annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v2- name: appvalue: mockcports:- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mocka-v3labels:app: mockaversion: v3
spec:replicas: 1selector:matchLabels:app: mockaversion: v3ASM_TRAFFIC_TAG: v3template:metadata:labels:app: mockaversion: v3ASM_TRAFFIC_TAG: v3annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v3- name: appvalue: mocka- name: upstream_urlvalue: "http://mockb:8000/"ports:- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mockb-v3labels:app: mockbversion: v3
spec:replicas: 1selector:matchLabels:app: mockbversion: v3ASM_TRAFFIC_TAG: v3template:metadata:labels:app: mockbversion: v3ASM_TRAFFIC_TAG: v3annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v3- name: appvalue: mockb- name: upstream_urlvalue: "http://mockc:8000/"ports:- containerPort: 8000---
apiVersion: apps/v1
kind: Deployment
metadata:name: mockc-v3labels:app: mockcversion: v3
spec:replicas: 1selector:matchLabels:app: mockcversion: v3ASM_TRAFFIC_TAG: v3template:metadata:labels:app: mockcversion: v3ASM_TRAFFIC_TAG: v3annotations:instrumentation.opentelemetry.io/inject-java: "true"instrumentation.opentelemetry.io/container-names: "default"spec:containers:- name: defaultimage: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-mock:v0.1-javaimagePullPolicy: IfNotPresentenv:- name: versionvalue: v3- name: appvalue: mockcports:- containerPort: 8000

對于每個實例服務(wù) Pod,都加入了?instrumentation.opentelemetry.io/inject-java: "true"和instrumentation.opentelemetry.io/container-names: "default"兩個注解,以聲明該實例服務(wù)使用 java 語言實現(xiàn),并要求 OpenTelemetry Operator 對名稱為 default 的容器進(jìn)行自動插裝。

  1. 執(zhí)行以下指令,部署實例服務(wù)。
kubectl?apply?-f?mock.yaml

基于 OpenTelemetry 自動插裝機(jī)制,部署的服務(wù) Pod 將自動具有在調(diào)用鏈路中傳遞 baggage 的能力。

步驟三:創(chuàng)建泳道組和對應(yīng)泳道

  1. 創(chuàng)建泳道組。

a. 登錄 ASM 控制臺 [ 7] ,在左側(cè)導(dǎo)航欄,選擇服務(wù)網(wǎng)格 > 網(wǎng)格管理。

b. 在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇流量管理中心 > 流量泳道。

c. 在流量泳道頁面,單擊創(chuàng)建泳道組,在創(chuàng)建泳道組面板,配置相關(guān)信息,然后單擊確定

image.png

  1. 創(chuàng)建 s1、s2、s3 泳道,并分別綁定 v1、v2、v3 版本。

a. 在流量泳道頁面的流量規(guī)則定義區(qū)域,單擊創(chuàng)建泳道。

b. 在創(chuàng)建泳道對話框,配置相關(guān)信息,然后單擊確定。

image.png

創(chuàng)建 s1 泳道的示例圖如下:

圖片

三個泳道創(chuàng)建完成后,示例效果如下。默認(rèn)情況下,您在泳道組中創(chuàng)建的第一個泳道將被設(shè)定為基線泳道。您也可以修改基線泳道,當(dāng)流量發(fā)往其它泳道中不存在的服務(wù)時,通過回退機(jī)制將請求轉(zhuǎn)發(fā)至基線泳道。關(guān)于修改基線泳道的具體操作,請參見修改基線泳道 [ 8] 。

圖片

三個泳道創(chuàng)建完成后,針對泳道組中的每個服務(wù)都將生成泳道規(guī)則對應(yīng)的目標(biāo)規(guī)則 DestinationRule 和虛擬服務(wù) VirtualService。您可以在控制臺左側(cè)導(dǎo)航欄,選擇流量管理中心 > 目標(biāo)規(guī)則虛擬服務(wù)進(jìn)行查看。例如,針對 mocka 服務(wù)會自動創(chuàng)建如下 DestinationRule 和 VirtualService。

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:labels:asm-system: 'true'provider: asmswimlane-group: testname: trafficlabel-dr-test-default-mockanamespace: istio-system
spec:host: mocka.default.svc.cluster.localsubsets:- labels:ASM_TRAFFIC_TAG: v1name: s1- labels:ASM_TRAFFIC_TAG: v2name: s2apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:labels:asm-system: 'true'provider: asmswimlane-group: testname: trafficlabel-vs-test-default-mockanamespace: istio-system
spec:hosts:- mocka.default.svc.cluster.localhttp:- match:- headers:x-asm-prefer-tag:exact: s1route:- destination:host: mocka.default.svc.cluster.localsubset: s1fallback:target:host: mocka.default.svc.cluster.localsubset: s1- match:- headers:x-asm-prefer-tag:exact: s2route:- destination:host: mocka.default.svc.cluster.localsubset: s2fallback:target:host: mocka.default.svc.cluster.localsubset: s1- match:- headers:x-asm-prefer-tag:exact: s3route:- destination:host: mocka.default.svc.cluster.localsubset: s3fallback:target:host: mocka.default.svc.cluster.localsubset: s1
  1. 創(chuàng)建基于權(quán)重的統(tǒng)一引流規(guī)則。

a. 在流量泳道頁面的流量規(guī)則定義區(qū)域,單擊引流策略中的基于權(quán)重引流。

b. 在設(shè)定統(tǒng)一引流規(guī)則對話框,配置相關(guān)信息,然后單擊確定。本文以泳道服務(wù)對應(yīng)入口 API 為 /mock 為例,為三條泳道配置統(tǒng)一的引流規(guī)則。

image.png

設(shè)定統(tǒng)一引流規(guī)則的示例圖如下:

圖片

  1. 設(shè)定三條泳道的引流權(quán)重,引流權(quán)重確定了流量向每條泳道發(fā)送的比例。

a. 在流量泳道頁面的流量規(guī)則定義區(qū)域,在每條泳道的引流權(quán)重列,單擊數(shù)字右側(cè)的圖片按鈕,在編輯引流權(quán)重對話框,配置相關(guān)信息,然后單擊確定。

image.png

編輯流量權(quán)重的示例圖如下:

圖片

步驟四:驗證全鏈路灰度功能是否生效

  1. 獲取 ASM 網(wǎng)關(guān)的公網(wǎng) IP。具體操作,請參見獲取 ASM 網(wǎng)關(guān)地址 [ 9] 。

  2. 執(zhí)行以下命令,設(shè)置環(huán)境變量。xxx.xxx.xxx.xxx 為上一步獲取的 IP。

export?ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
  1. 驗證全鏈路灰度功能是否生效。

a. 執(zhí)行以下命令,查看三條泳道的訪問效果。

for?i?in?{1..100};?do?curl?http://${ASM_GATEWAY_IP}/mock?;??echo?'';?sleep?1;?done;

預(yù)期輸出:

-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)
-> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190)

由預(yù)期輸出得到,流量將以約 6:2:2 的比例發(fā)送到 s1、s2、s3 泳道,并由 s1 作為基線泳道,當(dāng)調(diào)用鏈路中不存在某個服務(wù)的特定版本時,將會調(diào)用 s1 泳道中的對應(yīng)服務(wù)。

總結(jié)

本文簡要討論了使用流量泳道來實現(xiàn)全鏈路流量灰度管理的場景與方案,并回顧了阿里云服務(wù)網(wǎng)格 ASM 提供的嚴(yán)格與寬松兩種模式的流量泳道、以及這兩種模式各自的優(yōu)勢與挑戰(zhàn)。接下來介紹了一種基于 OpenTelemetry 社區(qū)提出的 baggage 透傳能力實現(xiàn)的無侵入式的寬松模式泳道,這種類型的流量泳道同時具有對業(yè)務(wù)代碼侵入性低、同時保持寬松模式的靈活特性的特點。同時,我們還介紹了新的基于權(quán)重的流量引流策略,這種策略可以基于統(tǒng)一的流量匹配規(guī)則,將匹配到的流量以設(shè)定好的比例分發(fā)到不同的流量泳道。

相關(guān)鏈接:

[1] baggage

https://opentelemetry.io/docs/concepts/signals/baggage/

[2] 創(chuàng)建 ASM 實例

https://help.aliyun.com/document_detail/147793.html#task-2370657

[3] 添加集群到 ASM 實例

https://help.aliyun.com/document_detail/148231.html#task-2372122

[4] 創(chuàng)建入口網(wǎng)關(guān)服務(wù)

https://help.aliyun.com/document_detail/150510.html#task-2372970

[5] 管理網(wǎng)關(guān)規(guī)則

https://help.aliyun.com/document_detail/150504.html

[6] 開啟 Sidecar 自動注入

https://help.aliyun.com/document_detail/186136.html#task-1962690

[7] ASM 控制臺

https://servicemesh.console.aliyun.com/

[8]?修改基線泳道

https://help.aliyun.com/zh/asm/user-guide/scenario-1-the-drainage-request-header-is-not-transmitted-in#0561972057jqm

[9] 獲取 ASM 網(wǎng)關(guān)地址

https://help.aliyun.com/document_detail/444079.html#section-ida-zt6-md7

http://m.aloenet.com.cn/news/37698.html

相關(guān)文章:

  • 委托網(wǎng)絡(luò)公司做的網(wǎng)站侵權(quán)關(guān)鍵詞優(yōu)化是怎么弄的
  • 上海正規(guī)做網(wǎng)站公司有哪些網(wǎng)站免費建站app
  • 在網(wǎng)站上顯示地圖網(wǎng)站推廣途徑和要點
  • 網(wǎng)站建設(shè) 網(wǎng)站軟文推廣sq網(wǎng)站推廣
  • 希臘網(wǎng)站 后綴網(wǎng)絡(luò)營銷競價推廣
  • php做視頻網(wǎng)站附近的計算機(jī)培訓(xùn)班
  • 鄭州做網(wǎng)站找哪家seo網(wǎng)站優(yōu)化培訓(xùn)
  • 編寫網(wǎng)站用什么語言色盲測試圖數(shù)字
  • 網(wǎng)監(jiān)大隊讓網(wǎng)站備案搜索引擎優(yōu)化方法與技巧
  • 12306網(wǎng)站如何做火車票候補(bǔ)宣傳渠道有哪些
  • 女人做春夢網(wǎng)站哈爾濱網(wǎng)站推廣
  • 浙江省住房和城鄉(xiāng)建設(shè)廳網(wǎng)站 文件信息流廣告文案
  • wordpress更新的文章編輯器不好用手機(jī)優(yōu)化軟件哪個好用
  • 網(wǎng)站推廣網(wǎng)電商網(wǎng)站對比
  • 做網(wǎng)站需要買服務(wù)器嗎seo的中文是什么
  • 有沒有什么做統(tǒng)計的網(wǎng)站愛站數(shù)據(jù)
  • 非凡網(wǎng)站建設(shè)平臺網(wǎng)頁seddog站長之家
  • wordpress的根目錄搜狗優(yōu)化排名
  • 萊西市城鄉(xiāng)建設(shè)局網(wǎng)站站長工具在線查詢
  • 怎樣建設(shè)微網(wǎng)站首頁網(wǎng)站數(shù)據(jù)統(tǒng)計工具
  • 記事本做網(wǎng)站格式外貿(mào)seo公司
  • 20g虛擬主機(jī)建設(shè)網(wǎng)站b站推廣網(wǎng)站入口202
  • 域名換了網(wǎng)站需要備案么鄭州seo代理公司
  • 程序員做的導(dǎo)航網(wǎng)站平臺推廣怎么做
  • 牌具網(wǎng)站廣告怎么做云優(yōu)客seo排名公司
  • 微博分享的網(wǎng)站怎么做亞洲衛(wèi)星電視網(wǎng)參數(shù)表
  • 冷色網(wǎng)站鄭州seo價格
  • 焦作河南網(wǎng)站建設(shè)品牌策略
  • 自己做新聞網(wǎng)站找客戶的十大方法
  • 網(wǎng)頁游戲開服表怎么關(guān)閉班級優(yōu)化大師使用指南