這篇文章介紹一下藍(lán)綠部署以及使用nginx如何最簡(jiǎn)單地模擬一下金絲雀發(fā)布的方式
金絲雀發(fā)布/灰度發(fā)布
金絲雀發(fā)布的重點(diǎn)在于:試錯(cuò)。金絲雀發(fā)布的來(lái)歷本身就是自然界的美麗生物在人類工業(yè)發(fā)展過(guò)程中的一個(gè)悲慘的故事。金絲雀就是用它的生命來(lái)為礦工的安全來(lái)試錯(cuò)的。用很小的成本來(lái)?yè)Q取整體的安全,在持續(xù)部署的實(shí)踐中,金絲雀就是流量控制,用很少的流量比如百分之一或者十分之一用于檢證某個(gè)版本是否正常,如果不正常則就用最低的成本實(shí)現(xiàn)了其作用,降低了風(fēng)險(xiǎn)。如果正常,則可以逐漸加大權(quán)重直至百分之百,將所有的流量都平穩(wěn)地切換至新的版本。灰度發(fā)布,一般來(lái)說(shuō)也是類似的概念。灰色是介于黑和白之前的一個(gè)過(guò)渡,區(qū)別于藍(lán)綠部署的非藍(lán)即綠,灰度發(fā)布/金絲雀發(fā)布會(huì)有一個(gè)兩者同時(shí)存在的時(shí)間段,只是兩者對(duì)應(yīng)的流量不同,金絲雀發(fā)布如果說(shuō)和灰度發(fā)布有所不同的話,其不同點(diǎn)應(yīng)該是目的性的不同,金絲雀發(fā)布目的在于試錯(cuò),而灰度發(fā)布在于平穩(wěn)發(fā)布,而在金絲雀發(fā)布沒(méi)有問(wèn)題的狀況下進(jìn)行的平穩(wěn)過(guò)渡則正是灰度發(fā)布。
模擬金絲雀發(fā)布
接下來(lái)我們使用nginx的upstream來(lái)簡(jiǎn)單模擬一下金絲雀發(fā)布的場(chǎng)景。具體場(chǎng)景如下, 當(dāng)前活躍的是主版本,通過(guò)調(diào)整nginx設(shè)定,通過(guò)不斷的調(diào)節(jié)金絲雀版本的權(quán)重,最終實(shí)現(xiàn)平穩(wěn)地發(fā)布。
事前準(zhǔn)備
事前在7001/7002兩個(gè)端口分別啟動(dòng)兩個(gè)服務(wù),用于顯示不同信息,為了演示方便,使用tornado做了一個(gè)鏡像,通過(guò)docker容器啟動(dòng)時(shí)傳遞的參數(shù)不同用于顯示服務(wù)的不同。
docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Hello main service: v1 in 7001"docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Hello canary deploy service: v2 in 7002"
執(zhí)行日志
[root@kong ~]# docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Hello main service: v1 in 7001"28f42bbd21146c520b05ff2226514e62445b4cdd5d82f372b3791fdd47cd602a[root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Hello canary deploy service: v2 in 7002"b86c4b83048d782fadc3edbacc19b73af20dc87f5f4cf37cf348d17c45f0215d[root@kong ~]# curl http://192.168.163.117:7001Hello, Service :Hello main service: v1 in 7001[root@kong ~]# curl http://192.168.163.117:7002Hello, Service :Hello canary deploy service: v2 in 7002[root@kong ~]#
啟動(dòng)nginx
[root@kong ~]# docker run -p 9080:80 --name nginx-canary -d nginx659f15c4d006df6fcd1fab1efe39e25a85c31f3cab1cda67838ddd282669195c[root@kong ~]# docker ps |grep nginx-canary659f15c4d006 nginx "nginx -g 'daemon ..." 7 seconds ago Up 7 seconds 0.0.0.0:9080->80/tcp nginx-canary[root@kong ~]#
新聞熱點(diǎn)
疑難解答
圖片精選