灰度發(fā)布在 UCloud 大規(guī)模虛擬網(wǎng)絡(luò)中的應(yīng)用
發(fā)布時(shí)間: 2018-10-25
ServiceMesh 實(shí)現(xiàn)控制面灰度
在控制面,早期灰度發(fā)布采用 APIGW 的方式實(shí)現(xiàn)。APIGW 通常僅部署在用戶流量的入口,完全灰度發(fā)布就需要完整地部署兩套系統(tǒng)。但在微服務(wù)化的時(shí)代,任何一個(gè)微服務(wù)發(fā)生變更都需要完整地部署兩套系統(tǒng),這不僅成本高且嚴(yán)重影響產(chǎn)品變更速度。ServiceMesh 以類似于將 APIGateway 部署到本地,同時(shí)提供集中化控制的方式,完美地解決了這些問題。
UCloud 的輕量級 ServiceMesh 平臺基于 Istio,繼續(xù)使用 Envoy 代理,修改 Pilot 在保留完整的 DSL 支持的基礎(chǔ)上實(shí)現(xiàn)了脫離 K8S 運(yùn)行。
因此網(wǎng)絡(luò)團(tuán)隊(duì)對 Pilot 做了高度定制,從而更能滿足自身的需求。
? 定制方案一:按賬號灰度。在 GRPC 或者 HTTP 請求中添加自定義 Header x-ucloud-routeby,x-ucloud-routeby 采用 Cookie 的編碼格式,在其中包含賬戶信息,配置 Envoy 根據(jù)該 Header 進(jìn)行策略路由。? 定制方案二:采用顯式代理而不是 IPTables 透明引流的方式和 Envoy 集成,支持 HTTP 1.0、HTTP 2.0 和 gRPC。在配置了 Envoy 的 Proxy Port 情況下,通過 Envoy 接入 ServiceMesh;如果配置域名且沒有配置 Envoy 的 Proxy,則自動采用 ETCD gRPC 命名與發(fā)現(xiàn)的方式;如果配置 IP 地址和端口,則直連指定地址。? 定制方案三:采用 docker-compose 管理容器實(shí)現(xiàn) sidecar。新方案中仍然采用容器的方式打包和部署微服務(wù),但采用 Host 的網(wǎng)絡(luò)方式簡化了現(xiàn)存服務(wù)的網(wǎng)絡(luò)通信方式。通過這種方式實(shí)現(xiàn)了一個(gè)簡單的服務(wù)管理、版本管理、集群管理、路由策略管理層,為集群中的每臺 Node(虛擬機(jī)或物理服務(wù)器)生成 docker-compose 配置文件,從而部署和管理每臺 Node 的服務(wù)。
可編程交換機(jī)實(shí)現(xiàn)轉(zhuǎn)發(fā)面灰度
在轉(zhuǎn)發(fā)面灰度的方案選擇上,團(tuán)隊(duì)采用了可編程交換機(jī)(基于 Barefoot Tofino 芯片)來實(shí)現(xiàn)灰度網(wǎng)關(guān),替換普通交換機(jī)實(shí)現(xiàn)強(qiáng)灰度能力。
灰度網(wǎng)關(guān)較大提供 64 個(gè) 100G 的接口、6.4T 帶寬,PPS 性能可達(dá) 4400 兆,延遲為 us 級別,能夠很好支持網(wǎng)絡(luò)寬帶的高性能要求。灰度網(wǎng)關(guān)可以提供:一致性哈希 ECMP 的能力;可以基于任意定制字段(包括內(nèi)層虛擬網(wǎng)絡(luò)地址以及租戶 ID)計(jì)算哈希;在計(jì)算哈希前優(yōu)先應(yīng)用灰度規(guī)則,可以根據(jù)任意字段定制灰度規(guī)則,最小粒度可以做到按 TCP 流來灰度。
轉(zhuǎn)發(fā)面灰度示例
有了上述這些新工具,可以通過部署新的策略實(shí)現(xiàn)更加細(xì)粒的灰度發(fā)布,具體方案為:可編程交換機(jī) BGP 宣告集群 VIP 引流,根據(jù)選擇字段計(jì)算一致性哈希后將流量量分發(fā)給后端服務(wù)器,并按照選擇字段(VNI、源地址、目的地址)配置灰度規(guī)則。
灰度步驟如下:
1. 按 VM 的粒度將流量量切換到灰度后端服務(wù)器器;2. 切換完成后立刻自動回歸測試,根據(jù)路由表自動生成監(jiān)測地址列表,并 Ping 檢測網(wǎng)絡(luò)互通性;3. 測試通過則逐步增加灰度的VM地址;4. 直到整個(gè) VPC 的流量量全部切換到灰度后端服務(wù)器器;5. 再切換一個(gè)新的 VPC,直到所有分片內(nèi)的 VPC 都切換到新的灰度后端服務(wù)器;6. 完成灰度發(fā)布。上一篇: 如何禁用 Ubuntu 服務(wù)器中終端歡迎消息中的廣告
下一篇: 如何確保云服務(wù)的可靠性呢?