品牌名稱
TT語(yǔ)音
所在行業(yè)
互聯(lián)網(wǎng)
企業(yè)規(guī)模
11-50人

用 Zadig 搞定數(shù)百微服務(wù)環(huán)境治理,走向自動(dòng)化研發(fā)之路

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

回望過(guò)去

起初在團(tuán)隊(duì)規(guī)模較小的時(shí)候,我們簡(jiǎn)單使用 GitLab CI 搭建了流水線,實(shí)現(xiàn)完全容器化的構(gòu)建和部署,維護(hù)了開發(fā)與生產(chǎn)兩套環(huán)境。經(jīng)過(guò)了一年多的產(chǎn)品迭代,團(tuán)隊(duì)“創(chuàng)造”出了近兩百個(gè)微服務(wù),也因?yàn)閳F(tuán)隊(duì)規(guī)模變多,不斷產(chǎn)生出了協(xié)作問(wèn)題,比如多分支開發(fā)與單一共享環(huán)境經(jīng)常引起的服務(wù)覆蓋問(wèn)題、缺少不同功能的環(huán)境以便提供給不同角色的人使用等等。這就催生出了多套環(huán)境的需求,面對(duì)如此多的服務(wù),亟需一個(gè)合適的工具/平臺(tái)來(lái)幫助我們快速地“復(fù)制”多套新環(huán)境出來(lái),正當(dāng)我們一籌莫展的時(shí)候,我們看到了號(hào)稱具有「強(qiáng)大的云原生多環(huán)境能力」的 Zadig。

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

環(huán)境全局變量

通過(guò)該能力,我們可以結(jié)合自己的 Helm Chart 模板,為所有服務(wù)提供環(huán)境級(jí)別的 Values 覆蓋,例如:
  • 掛載公共配置至所有的 Pod 中,如特性開關(guān)配置、業(yè)務(wù)區(qū)域配置
  • Istio Virtual Service 中的 Gateway、Host 配置
  • 全局生效的環(huán)境變量
  • 全局注入的 annotations

環(huán)境配置

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

環(huán)境復(fù)制

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