精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Kubernete實現(xiàn)應(yīng)用的藍綠部署

馬哥Linux運維 ? 來源:稀土掘金 ? 作者:chulinx ? 2022-08-20 14:57 ? 次閱讀

背景介紹

某些情況下,我們在使用Kubernetes作為業(yè)務(wù)應(yīng)用的云平臺,想要實現(xiàn)應(yīng)用的藍綠部署用來迭代應(yīng)用版本,用lstio太重太復(fù)雜,而且它本身定位于流控和網(wǎng)格治理;Ingress-Nginx在0.21版本引入了Canary功能,可以為網(wǎng)關(guān)入口配置多個版本的應(yīng)用程序,使用annotation來控制多個后端服務(wù)的流量分配。

Ingress-Nginx-Annotation Canary 功能介紹

如果想啟用Canary功能,要先設(shè)置nginx.ingress.kubernetes.io/canary: "true",然后可以啟用以下注釋來配置Canary

nginx.ingress.kubernetes.io/canary-weight 請求到Canary ingress中指定的服務(wù)的請求百分比,值為0-100的整數(shù),根據(jù)設(shè)置的值來決定大概有百分之多少的流量會分配Canary Ingress中指定的后端s服務(wù)

nginx.ingress.kubernetes.io/canary-by-header 基于request header 的流量切分,適用于灰度發(fā)布或者A/B測試,當設(shè)定的hearder值為always是,請求流量會被一直分配到Canary入口,當hearder值被設(shè)置為never時,請求流量不會分配到Canary入口,對于其他hearder值,將忽略,并通過優(yōu)先級將請求流量分配到其他規(guī)則

nginx.ingress.kubernetes.io/canary-by-header-value 這個配置要和nginx.ingress.kubernetes.io/canary-by-header 一起使用,當請求中的hearder key和value 和nginx.ingress.kubernetes.io/canary-by-header nginx.ingress.kubernetes.io/canary-by-header-value匹配時,請求流量會被分配到Canary Ingress入口,對于其他任何hearder值,將忽略,并通過優(yōu)先級將請求流量分配到其他規(guī)則

nginx.ingress.kubernetes.io/canary-by-cookie 這個配置是基于cookie的流量切分,也適用于灰度發(fā)布或者A/B測試,當cookie值設(shè)置為always時,請求流量將被路由到Canary Ingress入口,當cookie值設(shè)置為never時,請求流量將不會路由到Canary入口,對于其他值,將忽略,并通過優(yōu)先級將請求流量分配到其他規(guī)則

金絲雀規(guī)則按優(yōu)先順序進行如下排序:canary-by-header - > canary-by-cookie - > canary-weight

基于權(quán)重的小規(guī)模版本測試

v1版本編排文件

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
labels:
app:echoserverv1
name:echoserverv1
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv1
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv1
namespace:echoserver
spec:
selector:
name:echoserverv1
type:ClusterIP
ports:
-name:echoserverv1
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv1
namespace:echoserver
labels:
name:echoserverv1
spec:
template:
metadata:
labels:
name:echoserverv1
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv1
ports:
-containerPort:8080
name:echoserverv1

查看v1版本創(chuàng)建的資源

$[K8sSj]kubectlgetpod,service,ingress-nechoserver
NAMEREADYSTATUSRESTARTSAGE
pod/echoserverv1-657b966cb5-7grqs1/1Running024h

NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
service/echoserverv1ClusterIP10.99.68.728080/TCP24h

NAMEHOSTSADDRESSPORTSAGE
ingress.extensions/echoserverv1echo.chulinx.com8024h

訪問v1的服務(wù),可以看到10個請求都是訪問到一個pod上也就是v1版本的服務(wù)

$[K8sSj]foriin`seq10`;docurl-secho.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs

創(chuàng)建v2版本的服務(wù)

我們開啟canary功能,將v2版本的權(quán)重設(shè)置為50%,這個百分比并不能精確的將請求平均分配到兩個版本的服務(wù),而是在50%上下浮動

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
nginx.ingress.kubernetes.io/canary:"true"
nginx.ingress.kubernetes.io/canary-weight:"50"
labels:
app:echoserverv2
name:echoserverv2
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv2
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv2
namespace:echoserver
spec:
selector:
name:echoserverv2
type:ClusterIP
ports:
-name:echoserverv2
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv2
namespace:echoserver
labels:
name:echoserverv2
spec:
template:
metadata:
labels:
name:echoserverv2
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv2
ports:
-containerPort:8080
name:echoserverv2

創(chuàng)建v2版本的服務(wù)

我們開啟canary功能,將v2版本的權(quán)重設(shè)置為50%,這個百分比并不能精確的將請求平均分配到兩個版本的服務(wù),而是在50%上下浮動

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
nginx.ingress.kubernetes.io/canary:"true"
nginx.ingress.kubernetes.io/canary-weight:"50"
labels:
app:echoserverv2
name:echoserverv2
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv2
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv2
namespace:echoserver
spec:
selector:
name:echoserverv2
type:ClusterIP
ports:
-name:echoserverv2
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv2
namespace:echoserver
labels:
name:echoserverv2
spec:
template:
metadata:
labels:
name:echoserverv2
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv2
ports:
-containerPort:8080
name:echoserverv2

再次查看創(chuàng)建的資源

$[K8sSj]kubectlgetpod,service,ingress-nechoserver
NAMEREADYSTATUSRESTARTSAGE
pod/echoserverv1-657b966cb5-7grqs1/1Running024h
pod/echoserverv2-856bb5758-f9tqn1/1Running04s

NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
service/echoserverv1ClusterIP10.99.68.728080/TCP24h
service/echoserverv2ClusterIP10.111.103.1708080/TCP4s

NAMEHOSTSADDRESSPORTSAGE
ingress.extensions/echoserverv1echo.chulinx.com8024h
ingress.extensions/echoserverv2echo.chulinx.com804s

訪問測試

可以看到請求有4個落到v2版本,6個落到v1版本,理論上來說,請求說越多,落到v2版本的請求數(shù)越接近設(shè)置的權(quán)重50%

$[K8sSj]foriin`seq10`;docurl-secho.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs

基于header的A/B測試

更改v2版本的編排文件

增加headernginx.ingress.kubernetes.io/canary-by-header: "v2"

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
nginx.ingress.kubernetes.io/canary:"true"
nginx.ingress.kubernetes.io/canary-weight:"50"
nginx.ingress.kubernetes.io/canary-by-header:"v2"
labels:
app:echoserverv2
name:echoserverv2
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv2
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv2
namespace:echoserver
spec:
selector:
name:echoserverv2
type:ClusterIP
ports:
-name:echoserverv2
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv2
namespace:echoserver
labels:
name:echoserverv2
spec:
template:
metadata:
labels:
name:echoserverv2
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv2
ports:
-containerPort:8080
name:echoserverv2

更新訪問測試

測試了header 為v2:always v2:never v2:true這三個hearder值,可以看到當hearder為v2:always時,流量會全部流入v2,當v2:never時,流量會全部流入v1,當v2:true時,也就是非always/never,流量會按照配置的權(quán)重流入對應(yīng)版本的服務(wù)

$[K8sSj]kubectlapply-fappv2.yml
ingress.extensions/echoserverv2configured
service/echoserverv2unchanged
deployment.extensions/echoserverv2unchanged
$[K8sSj]foriin`seq10`;docurl-s-H"v2:always"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
$[K8sSj]foriin`seq10`;docurl-s-H"v2:never"echo.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
$[K8sSj]foriin`seq10`;docurl-s-H"v2:true"echo.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn

自定義header-value

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
nginx.ingress.kubernetes.io/canary:"true"
nginx.ingress.kubernetes.io/canary-weight:"50"
nginx.ingress.kubernetes.io/canary-by-header:"v2"
nginx.ingress.kubernetes.io/canary-by-header-value:"true"
labels:
app:echoserverv2
name:echoserverv2
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv2
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv2
namespace:echoserver
spec:
selector:
name:echoserverv2
type:ClusterIP
ports:
-name:echoserverv2
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv2
namespace:echoserver
labels:
name:echoserverv2
spec:
template:
metadata:
labels:
name:echoserverv2
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv2
ports:
-containerPort:8080
name:echoserverv2

更新測試

可以看到只有header為v2:never時,請求流量才會流入v2版本,其他值流量都會按照權(quán)重設(shè)置流入不同版本的服務(wù)

$[K8sSj]kubectlapply-fappv2.yml
ingress.extensions/echoserverv2configured
service/echoserverv2unchanged
deployment.extensions/echoserverv2unchanged

$[K8sSj]foriin`seq10`;docurl-s-H"v2:true"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

$[K8sSj]foriin`seq10`;docurl-s-H"v2:always"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

$[K8sSj]foriin`seq10`;docurl-s-H"v2:never"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs

訪問測試

可以看和header的訪問效果是一樣的,只不過cookie不能自定義value

$[K8sSj]kubectlapply-fappv2.yml
ingress.extensions/echoserverv2configured
service/echoserverv2unchanged
deployment.extensions/echoserverv2unchanged

$[K8sSj]foriin`seq10`;docurl-s--cookie"user_from_shanghai"echo.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

#zlx@zlxdeMacBook-Proin~/Desktop/unicom/k8syml/nginx-ingress-canary-deployment[1652]
$[K8sSj]foriin`seq10`;docurl-s--cookie"user_from_shanghai:always"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

#zlx@zlxdeMacBook-Proin~/Desktop/unicom/k8syml/nginx-ingress-canary-deployment[1625]
$[K8sSj]foriin`seq10`;docurl-s--cookie"user_from_shanghai=always"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

總結(jié)

灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以對新版本進行測試、發(fā)現(xiàn)和調(diào)整問題,以保證其影響度,以上內(nèi)容通過實例詳細介紹了Ingress-Nginx的實戰(zhàn)Canary Annotation,可以借助Ingress-Nginx輕松實現(xiàn)藍綠發(fā)布和金絲雀發(fā)布

其他

藍綠發(fā)布

藍綠部署中,一共有兩套系統(tǒng):一套是正在提供服務(wù)系統(tǒng),標記為“綠色”;另一套是準備發(fā)布的系統(tǒng),標記為“藍色”。兩套系統(tǒng)都是功能完善的,并且正在運行的系統(tǒng),只是系統(tǒng)版本和對外服務(wù)情況不同。

最初,沒有任何系統(tǒng),沒有藍綠之分。

然后,第一套系統(tǒng)開發(fā)完成,直接上線,這個過程只有一個系統(tǒng),也沒有藍綠之分。

后來,開發(fā)了新版本,要用新版本替換線上的舊版本,在線上的系統(tǒng)之外,搭建了一個使用新版本代碼的全新系統(tǒng)。這時候,一共有兩套系統(tǒng)在運行,正在對外提供服務(wù)的老系統(tǒng)是綠色系統(tǒng),新部署的系統(tǒng)是藍色系統(tǒng)。

藍色系統(tǒng)不對外提供服務(wù),用來做啥?

用來做發(fā)布前測試,測試過程中發(fā)現(xiàn)任何問題,可以直接在藍色系統(tǒng)上修改,不干擾用戶正在使用的系統(tǒng)。(注意,兩套系統(tǒng)沒有耦合的時候才能百分百保證不干擾)

藍色系統(tǒng)經(jīng)過反復(fù)的測試、修改、驗證,確定達到上線標準之后,直接將用戶切換到藍色系統(tǒng):

切換后的一段時間內(nèi),依舊是藍綠兩套系統(tǒng)并存,但是用戶訪問的已經(jīng)是藍色系統(tǒng)。這段時間內(nèi)觀察藍色系統(tǒng)(新系統(tǒng))工作狀態(tài),如果出現(xiàn)問題,直接切換回綠色系統(tǒng)。

當確信對外提供服務(wù)的藍色系統(tǒng)工作正常,不對外提供服務(wù)的綠色系統(tǒng)已經(jīng)不再需要的時候,藍色系統(tǒng)正式成為對外提供服務(wù)系統(tǒng),成為新的綠色系統(tǒng)。原先的綠色系統(tǒng)可以銷毀,將資源釋放出來,用于部署下一個藍色系統(tǒng)。

藍綠部署只是上線策略中的一種,它不是可以應(yīng)對所有情況的萬能方案。藍綠部署能夠簡單快捷實施的前提假設(shè)是目標系統(tǒng)是非常內(nèi)聚的,如果目標系統(tǒng)相當復(fù)雜,那么如何切換、兩套系統(tǒng)的數(shù)據(jù)是否需要以及如何同步等,都需要仔細考慮。

金絲雀發(fā)布

金絲雀發(fā)布(Canary)也是一種發(fā)布策略,和國內(nèi)常說的灰度發(fā)布是同一類策略。藍綠部署是準備兩套系統(tǒng),在兩套系統(tǒng)之間進行切換,金絲雀策略是只有一套系統(tǒng),逐漸替換這套系統(tǒng)

譬如說,目標系統(tǒng)是一組無狀態(tài)的Web服務(wù)器,但是數(shù)量非常多,假設(shè)有一萬臺。

這時候,藍綠部署就不能用了,因為你不可能申請一萬臺服務(wù)器專門用來部署藍色系統(tǒng)(在藍綠部署的定義中,藍色的系統(tǒng)要能夠承接所有訪問)。

可以想到的一個方法是:

只準備幾臺服務(wù)器,在上面部署新版本的系統(tǒng)并測試驗證。測試通過之后,擔心出現(xiàn)意外,還不敢立即更新所有的服務(wù)器。先將線上的一萬臺服務(wù)器中的10臺更新為最新的系統(tǒng),然后觀察驗證。確認沒有異常之后,再將剩余的所有服務(wù)器更新。

這個方法就是金絲雀發(fā)布。

實際操作中還可以做更多控制,譬如說,給最初更新的10臺服務(wù)器設(shè)置較低的權(quán)重、控制發(fā)送給這10臺服務(wù)器的請求數(shù),然后逐漸提高權(quán)重、增加請求數(shù)。

這個控制叫做“流量切分”,既可以用于金絲雀發(fā)布,也可以用于后面的A/B測試。

藍綠部署和金絲雀發(fā)布是兩種發(fā)布策略,都不是萬能的。有時候兩者都可以使用,有時候只能用其中一種。

A/B測試

首先需要明確的是,A/B測試和藍綠部署以及金絲雀,完全是兩回事。

藍綠部署和金絲雀是發(fā)布策略,目標是確保新上線的系統(tǒng)穩(wěn)定,關(guān)注的是新系統(tǒng)的BUG、隱患。

A/B測試是效果測試,同一時間有多個版本的服務(wù)對外服務(wù),這些服務(wù)都是經(jīng)過足夠測試,達到了上線標準的服務(wù),有差異但是沒有新舊之分(它們上線時可能采用了藍綠部署的方式)。

A/B測試關(guān)注的是不同版本的服務(wù)的實際效果,譬如說轉(zhuǎn)化率、訂單情況等。

A/B測試時,線上同時運行多個版本的服務(wù),這些服務(wù)通常會有一些體驗上的差異,譬如說頁面樣式、顏色、操作流程不同。相關(guān)人員通過分析各個版本服務(wù)的實際效果,選出效果最好的版本。

在A/B測試中,需要能夠控制流量的分配,譬如說,為A版本分配10%的流量,為B版本分配10%的流量,為C版本分配80%的流量。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 網(wǎng)關(guān)
    +關(guān)注

    關(guān)注

    9

    文章

    4317

    瀏覽量

    50966
  • 控制
    +關(guān)注

    關(guān)注

    4

    文章

    1011

    瀏覽量

    122629
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    223

    瀏覽量

    8698

原文標題:使用 Kubernetes Ingress-Nginx 實現(xiàn)藍綠、灰度發(fā)布!你會用了嗎?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    詳解MySQL多實例部署

    詳解MySQL多實例部署
    的頭像 發(fā)表于 11-11 11:10 ?175次閱讀

    YOLOv6在LabVIEW中的推理部署(含源碼)

    YOLOv6 是美團視覺智能部研發(fā)的一款目標檢測框架,致力于工業(yè)應(yīng)用。如何使用python進行該模型的部署,官網(wǎng)已經(jīng)介紹的很清楚了,但是對于如何在LabVIEW中實現(xiàn)該模型的部署,筆者目前還沒有看到
    的頭像 發(fā)表于 11-06 16:07 ?180次閱讀
    YOLOv6在LabVIEW中的推理<b class='flag-5'>部署</b>(含源碼)

    混合部署 | 在迅為RK3568上同時部署RT-Thread和Linux系統(tǒng)

    和安全性的同時,靈活處理復(fù)雜的任務(wù)場景。 混合部署 在一般情況下,iTOP-RK3568 的四個 Cortex-A55 核心通常運行 Linux 系統(tǒng),這種架構(gòu)稱為對稱多處理(SMP)。而 AMP
    發(fā)表于 11-01 10:31

    k8s可以部署私有云嗎?私有云部署全攻略

    Kubernetes(簡稱K8S)可以部署私有云。Kubernetes是一個開源的容器編排引擎,能夠自動化容器的部署、擴展和管理,使得應(yīng)用可以在各種環(huán)境中高效運行。通過使用Kubernetes,企業(yè)可以在自己的數(shù)據(jù)中心或私有云環(huán)境中搭建和管理容器化的應(yīng)用,
    的頭像 發(fā)表于 10-25 09:32 ?131次閱讀

    涂鴉HEDV本地化部署方案,助你低成本實現(xiàn)定制化開發(fā)!

    ,如何低成本實現(xiàn)快速交付、敏捷迭代以及滿足本地合規(guī)部署的需求,成為了行業(yè)亟待解決的問題。面對這一挑戰(zhàn),涂鴉智能精心推出了海德薇(HEDV)本地部署解決方案,一個輕量
    的頭像 發(fā)表于 07-06 08:15 ?658次閱讀
    涂鴉HEDV本地化<b class='flag-5'>部署</b>方案,助你低成本<b class='flag-5'>實現(xiàn)</b>定制化開發(fā)!

    鴻蒙OS開發(fā):【一次開發(fā),多端部署】(音樂專輯頁面)

    基于自適應(yīng)和響應(yīng)式布局,實現(xiàn)一次開發(fā)、多端部署音樂專輯頁面。
    的頭像 發(fā)表于 05-25 16:21 ?736次閱讀
    鴻蒙OS開發(fā):【一次開發(fā),多端<b class='flag-5'>部署</b>】(音樂專輯頁面)

    HarmonyOS開發(fā)案例:【一次開發(fā),多端部署-音樂專輯】

    基于自適應(yīng)和響應(yīng)式布局,實現(xiàn)一次開發(fā)、多端部署音樂專輯頁面。
    的頭像 發(fā)表于 05-13 16:48 ?650次閱讀
    HarmonyOS開發(fā)案例:【一次開發(fā),多端<b class='flag-5'>部署</b>-音樂專輯】

    鴻蒙實戰(zhàn)開發(fā)-本地部署、SmartPerf 編譯部署指導文檔

    install 在項目目錄下運行命令: npm run build 編譯成功后會有main 可執(zhí)行文件生成。 項目部署 直接運行 ./main 可執(zhí)行程序,完成項目的部署。 訪問項目 在瀏覽器上打開
    發(fā)表于 05-09 14:23

    基于OpenCV DNN實現(xiàn)YOLOv8的模型部署與推理演示

    基于OpenCV DNN實現(xiàn)YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統(tǒng)、烏班圖系統(tǒng)、Jetson的Jetpack系統(tǒng)
    的頭像 發(fā)表于 03-01 15:52 ?1424次閱讀
    基于OpenCV DNN<b class='flag-5'>實現(xiàn)</b>YOLOv8的模型<b class='flag-5'>部署</b>與推理演示

    請問可以私有部署

    有沒有插件或者私有部署的服務(wù)
    發(fā)表于 02-01 16:00

    Docker部署遷移實戰(zhàn)

    由于公司內(nèi)部機器要做遷移,原系統(tǒng)機器部署在阿里云,要向亞馬遜云遷移,由于之前的服務(wù)實在windows遠程機器部署,并且有些項目因為打包問題,需要遠程機器的IDEA做啟停控制,本次準備先解決相關(guān)打包問題,然后將服務(wù)通過鏡像方式部署
    的頭像 發(fā)表于 12-12 14:22 ?929次閱讀
    Docker<b class='flag-5'>部署</b>遷移實戰(zhàn)

    zookeeper的部署模式

    Zookeeper是一個開源的分布式協(xié)調(diào)服務(wù),它被廣泛應(yīng)用于構(gòu)建分布式系統(tǒng)中的數(shù)據(jù)共享和協(xié)調(diào)。在部署Zookeeper時,可以根據(jù)需求選擇不同的部署模式,包括單機模式、集群模式和多數(shù)據(jù)中心模式。下面
    的頭像 發(fā)表于 12-04 10:41 ?668次閱讀

    jrebel和idea熱部署優(yōu)勢

    JRebel 和 IntelliJ IDEA 是兩個常用的開發(fā)工具,它們可以提供熱部署的功能,極大地提高了開發(fā)效率。下面將詳細介紹 JRebel 和 IntelliJ IDEA 熱部署的優(yōu)勢。 提高
    的頭像 發(fā)表于 12-03 15:16 ?741次閱讀

    Helm部署MinIO集群

    Helm部署MinIO集群
    的頭像 發(fā)表于 12-03 09:44 ?790次閱讀
    Helm<b class='flag-5'>部署</b>MinIO集群

    藍牙AOA基站的部署必須水平放置部署嗎?

    藍牙AOA基站的部署必須水平放置部署嗎? 藍牙AOA(Angle of Arrival)基站的部署需要考慮多個因素,其中包括放置方向、高度和間距等。雖然藍牙AOA基站的水平放置是一種常見的部署
    的頭像 發(fā)表于 11-30 11:17 ?601次閱讀