品牌名稱
TT語音
所在行業
互聯網
企業規模
11-50人

用 Zadig 搞定數百微服務環境治理,走向自動化研發之路

570次閱讀
TTChat 是趣丸科技(TT語音)旗下的一款針對海外用戶的游戲社交產品,包含實時語聊房、IM、開黑交友、賽事等一系列業務場景。團隊對云原生技術非常推崇,加之在國內的 TT 語音產品上也有了一定的相關技術探索與積累,所以在新業務創立之初,我們就全面使用了 Kubernetes 與 Istio 進行服務治理。

回望過去

起初在團隊規模較小的時候,我們簡單使用 GitLab CI 搭建了流水線,實現完全容器化的構建和部署,維護了開發與生產兩套環境。經過了一年多的產品迭代,團隊“創造”出了近兩百個微服務,也因為團隊規模變多,不斷產生出了協作問題,比如多分支開發與單一共享環境經常引起的服務覆蓋問題、缺少不同功能的環境以便提供給不同角色的人使用等等。這就催生出了多套環境的需求,面對如此多的服務,亟需一個合適的工具/平臺來幫助我們快速地“復制”多套新環境出來,正當我們一籌莫展的時候,我們看到了號稱具有「強大的云原生多環境能力」的 Zadig。

 
共創之路
 
從去年的 10 月開始,我們開始嘗試進行 Zadig 的接入,彼時 Zadig 在使用 Kubernetes YAML 來管理與部署服務時,能夠很好的工作,而對于我們所使用 Helm Chart,卻仍然處于一個很初級的階段,加上我們自身對于 Helm Chart 使用姿勢不佳,導致在接入的過程中也遇到了許多困難。通過與 Zadig 團隊多次在廣滬兩地的面對面交流和思想碰撞,打磨出了不少針對 Helm Chart 場景的需求點。
Zadig 團隊也逐漸豐富了 Helm Chart 場景的支持,我簡單列一些我認為非常能夠體現 Zadig「強大的云原生多環境能力」的功能點:

環境全局變量

通過該能力,我們可以結合自己的 Helm Chart 模板,為所有服務提供環境級別的 Values 覆蓋,例如:
  • 掛載公共配置至所有的 Pod 中,如特性開關配置、業務區域配置
  • Istio Virtual Service 中的 Gateway、Host 配置
  • 全局生效的環境變量
  • 全局注入的 annotations

環境配置

這個目前我們通常是結合環境全局變量一起來使用的,比如用它來托管公共配置(前面提到的特性開關配置、業務區域配置等),也可以用來管理一些不適合放在服務配置中的敏感信息(如密碼、證書)等。

環境復制

我們從 Git 中導入的 Helm Values,其中所包含鏡像很可能是不可用的,或是一個非常古早的版本,早期通過創建環境,經常面臨的問題就是服務無法啟動,或是某個服務版本過舊,無法正常工作,當時的做法是在環境創建之后,立刻運行一個工作流,對所有的服務進行重新構建,這無疑是非常消耗時間和構建資源的。環境復制功能則通過直接復制一個現有的穩定環境,從而實現快速構建新環境并且能直接投入使用,切實解決了痛點。
 
基于這些環境能力,我們現在能夠在短短的一二十分鐘內,快速地建立起一套擁有幾百個服務的全新環境。
除了環境能力,我們在和 Zadig 的接入過程中也解決了不少非常痛的問題:
從 Git 中批量導入:
對于擁有幾百個存量服務業務來說,這項功能極大程度解放了雙手,最終我們可以順利地在短短的十幾分鐘內,完成所有服務的導入。可以說這是我們能夠堅持下來的一個重要原因。
服務編排
通過管理服務的啟動順序,這項能力幫助我們有效地解決了服務部署時對配置、密鑰等強依賴的問題。此外,還可以使用 Zadig 托管部署測試環境的數據庫、Redis 等進行一些初始數據的導入工作,這也是我們計劃中但一直還沒來得及做的事情。
 
落地與探索
 
在業務交付過程中,不同角色的人員對環境有著不同的訴求,例如開發人員需要一個統一的環境進行集成、聯調,測試人員需要一個獨立穩定的環境用于功能測試、驗收、實施自動化測試。
我們期望能夠結合 Zadig 的多環境管理以及可定制化的 Workflow非常快速地拉起一套完整的環境,并且盡可能實現自動化,這也是云原生文化所非常倡導的價值觀之一。因此除了托管常規的服務之外,我們也用 Zadig 托管了很多環境所依賴的底層資源:
  • 環境啟動所依賴的 ConfigMaps、Secrets
  • 提供訪問入口配置的 Istio Gateway CR
  • 用于自動化生成 TLS 證書的 Certificate CR(結合 CertManager & Let's Encrypt)
在 TTChat 主項目中,由于服務數量較多,存在一定的環境維護成本,我們使用 Zadig 管理了 dev 和qa 兩套標準環境。
下圖以 Zadig 為界分為了兩個部分,上半部分是業務運行時的一個視角,我們在業務架構上面使用了istio-ingressgateway 作為七層網關對 TTChat App 提供了 HTTP/2 和 HTTP/3 的接入能力,因此使用了不同的域名將流量路由到不同的環境中(PS:圖中域名為示例);下半部分則描繪了我們現階段在交付中,從代碼提交或者合并觸發工作流,然后部署到兩套環境中的過程。圖中的紅色區域的自測環境是我們目前基于 Zadig 新發布的子環境能力進行的一項新的嘗試,希望能夠給研發人員提供更加好的開發體驗。
undefined
目前我們一共有六個活躍的項目運行在了 Zadig 之上,共計管理了 16 套開發&測試環境,近 300 個服務,每周進行數百次的構建部署,構建成功率 >96%,自接入以來累計產生的交付物 12000 多個,部署 20000 余次。
undefined
 
非常期待未來繼續與 Zadig 一起,幫助工程師更好地專注價值創造。