小鵝通基于 TSE 云原生 API 網(wǎng)關(guān)的落地實(shí)踐
導(dǎo)語
2023騰訊全球數(shù)字生態(tài)大會(huì)已于9月7-8日完美落幕,40+專場活動(dòng)展示了騰訊最新的前沿技術(shù)、核心產(chǎn)品、解決方案。
微服務(wù)與消息隊(duì)列專場,我們邀請到了小鵝通的基礎(chǔ)架構(gòu)組負(fù)責(zé)人黃徐震為我們帶來了《小鵝通基于 TSE 云原生網(wǎng)關(guān)的落地實(shí)踐》的精彩演講。
本篇文章針對這場演講做了詳細(xì)的解讀。主要介紹小鵝通在 TSE 云原生 API 網(wǎng)關(guān)上的一些建設(shè)和經(jīng)驗(yàn),以及在這個(gè)過程中遇到了哪些問題和挑戰(zhàn),基于 TSE 的解決方案又是如何在小鵝通進(jìn)行落地的,以及如何利用云原生網(wǎng)關(guān)實(shí)現(xiàn)降本增效的經(jīng)驗(yàn)分享。
關(guān)于小鵝通
小鵝通是一家以知識產(chǎn)品與用戶為核心的技術(shù)服務(wù)商。提供知識產(chǎn)品與用戶服務(wù)的私域運(yùn)營工具,小鵝通創(chuàng)始至今已經(jīng)服務(wù)百萬家客戶,最高同時(shí)在線人數(shù)達(dá)一千萬,面向7.8億終端用戶提供2000萬知識產(chǎn)品。
小鵝通現(xiàn)狀分析
CVM 時(shí)代入口網(wǎng)關(guān)架構(gòu)
在 CVM 時(shí)代,小鵝通的入口網(wǎng)關(guān)是比較典型的一個(gè)架構(gòu),由大量的公網(wǎng)負(fù)載 CLB 組成,由于不同的場景和策略,導(dǎo)致小鵝通的安全防護(hù)覆蓋程度不完全并且也難以梳理;小鵝通的業(yè)務(wù)場景屬于流量變化比較明顯的,在 CLB/CVM 的架構(gòu)下,難以及時(shí)進(jìn)行擴(kuò)縮容,有些業(yè)務(wù)需要進(jìn)行2到3倍的資源冗余,以保證流量上漲的穩(wěn)定性,就會(huì)造成小鵝通的資源利用率低和成本的增加;伴隨著這個(gè)問題,小鵝通有上百個(gè)公網(wǎng) CLB,CLB 背后有上千條的路由規(guī)則,和后端的業(yè)務(wù)服務(wù)形成多對多的非常復(fù)雜的矩陣,造成運(yùn)維成本非常高。
容器時(shí)代入口網(wǎng)關(guān)架構(gòu)
隨著采用容器化部署,小鵝通目前大部分的流量在容器集群上,在過渡階段以及部分業(yè)務(wù)情況仍然需要考慮 CVM 場景,在一開始的技術(shù)選型上采用的是公司內(nèi)部技術(shù)棧比較熟悉的也具備高性能的 Openresty 來實(shí)現(xiàn)的 Ingress API 網(wǎng)關(guān),但引入了新架構(gòu)的同時(shí)也加劇了原先存在的問題;因?yàn)樾※Z通的業(yè)務(wù)和基礎(chǔ)設(shè)施都是在云上,這部分和云產(chǎn)品的集成度一般,在保障穩(wěn)定性建設(shè)的同時(shí),還需要投入比較多的精力開發(fā)集成各塊云原生產(chǎn)品。
因此,需要設(shè)計(jì)更好的架構(gòu)以滿足小鵝通的業(yè)務(wù)需求,解決痛點(diǎn)問題。
解決方案
在前期的自研過程,小鵝通也參考和調(diào)研了許多優(yōu)秀 API 網(wǎng)關(guān)的架構(gòu)與設(shè)計(jì),像 Kong、ApiSix、TSE、Higress 等等,結(jié)合本公司的實(shí)際業(yè)務(wù)場景,從穩(wěn)定性與高可用、流量治理、自動(dòng)化能力、資源利用率出發(fā),認(rèn)為以上幾個(gè)點(diǎn)需要優(yōu)先保障或解決。
小鵝通列出每個(gè)維度需要考慮的要素,進(jìn)行綜合性對比分析。
云原生時(shí)代入口網(wǎng)關(guān)架構(gòu)
相比其他解決方案,TSE 云原生 API 網(wǎng)關(guān)滿足多可用區(qū)容災(zāi)部署、多種接入方式統(tǒng)一管理能力、開箱即用的限流熔斷、流量灰度流量鏡像、安全防護(hù)能力。由于小鵝通業(yè)務(wù)服務(wù)流量波峰波谷的性質(zhì),TSE 云原生 API 網(wǎng)關(guān)同樣集成支持按照彈性伸縮和定時(shí)伸縮,最終小鵝通在這些方案中選擇了 TSE 作為小鵝通的統(tǒng)一 API 網(wǎng)關(guān)方案。
經(jīng)過變化調(diào)整,小鵝通得到一個(gè)如下圖所示的云原生入口網(wǎng)關(guān)架構(gòu),通過從網(wǎng)關(guān)到小鵝通的服務(wù)再到數(shù)據(jù)庫中間件的多可用區(qū)部署,來保障穩(wěn)定性與高可用能力;統(tǒng)一流量入口、集中訪問控制和提高安全性;提升自動(dòng)化能力以提高我們的運(yùn)維效率;根據(jù)自動(dòng)彈性擴(kuò)縮容、按需按量的付費(fèi)策略,資源復(fù)用,提高小鵝通的資源利用率以降低成本。
接下來看一下小鵝通使用 TSE 云原生 API 網(wǎng)關(guān)后的兩個(gè)具體場景。
穩(wěn)定性與高可用
采用 TSE 云原生 API 網(wǎng)關(guān)節(jié)點(diǎn)的多可用區(qū)部署,配合小鵝通后端業(yè)務(wù)集群和底層的基礎(chǔ)設(shè)施、數(shù)據(jù)庫中間件的多可用區(qū)部署,在極端場景下的節(jié)點(diǎn)機(jī)器、磁盤、網(wǎng)絡(luò)故障發(fā)生時(shí),能夠做到自愈和快速恢復(fù),借助多可用區(qū)容災(zāi)能力提高小鵝通整體的穩(wěn)定性和高可用能力。
流量治理
流量治理是前面提到的比較頭疼的部分。面向客戶端,小鵝通有非常多的入口,有100多個(gè)公網(wǎng)負(fù)載、上千條的路由規(guī)則,需要對這些進(jìn)行拆分和復(fù)用;面向后端,小鵝通有 K8s 集群、CVM、Serverless 多種運(yùn)行環(huán)境,同時(shí)也有多套 K8s 集群,也需要降低這里的運(yùn)維成本。
因此這里分為兩個(gè)部分來說明,面向客戶端,通過 TSE 云原生 API 網(wǎng)關(guān)來統(tǒng)一管控,按照業(yè)務(wù)場景和需求進(jìn)行集群、分組拆分,例如集群級別的物理隔離、不同網(wǎng)絡(luò)安全策略,進(jìn)行多集群的橫向拆分,在單個(gè)集群內(nèi),還可以進(jìn)行分組,達(dá)到物理隔離和配置路由復(fù)用的目的,從而完成南北流量和東西流量的統(tǒng)一治理;面向后端,多個(gè)業(yè)務(wù)集群統(tǒng)一管控,支持K8s、CVM 等多種運(yùn)行環(huán)境的接入,TSE 本身和TKE 集群的集成度比較高,所以管理多個(gè) K8s 集群是一個(gè)比較輕松的事情。
方案遷移落地
在上一個(gè)部分,提到了 TSE 云原生 API 網(wǎng)關(guān)的架構(gòu)和設(shè)計(jì),能夠解決小鵝通不少的問題和要求,但是實(shí)際如何遷移落地是一件至關(guān)重要的事情,小鵝通對整個(gè)遷移方案進(jìn)行了幾個(gè)階段的任務(wù)拆解;
第一階段:針對小鵝通自研的網(wǎng)關(guān)、開源網(wǎng)關(guān)以及云原生網(wǎng)關(guān)進(jìn)行性能壓測對比,從 CPU、內(nèi)存、帶寬、新建連接數(shù)、并發(fā)連接數(shù)等等這些基礎(chǔ)關(guān)鍵性的指標(biāo)進(jìn)行詳細(xì)對比,確保驗(yàn)證通過并且符合小鵝通的預(yù)期。
第二階段:根據(jù)這些多維度的指標(biāo),評估契合小鵝通業(yè)務(wù)的容量方案,包括規(guī)格、節(jié)點(diǎn)數(shù)等。
第三階段:結(jié)合小鵝通實(shí)際的業(yè)務(wù)場景和業(yè)務(wù)開發(fā)測試一起進(jìn)行多個(gè)業(yè)務(wù)線、多次的服務(wù)壓測、全鏈路壓測,以保障服務(wù)質(zhì)量,為小鵝通的客戶使用體驗(yàn)負(fù)責(zé)。
第四階段:通過 OpenAPI 全量同步100多個(gè)公網(wǎng)負(fù)載、上千條的路由規(guī)則,在這個(gè)過程中,梳理了大量的路由規(guī)則,確認(rèn)涉及的功能以及影響范圍,將不確定性的部分變?yōu)榇_定性。
最后一步:根據(jù)前面梳理的規(guī)則,按照域名、用途進(jìn)行分階段分批次的漸進(jìn)式遷移,逐步將流量切割到 TSE 云原生 API 網(wǎng)關(guān)上,完成最終落地。
如何完成平穩(wěn)流量切割
關(guān)于如何完成域名平穩(wěn)流量切割到 TSE 云原生 API 網(wǎng)關(guān),這里列舉了兩個(gè)簡化的場景。
第一種場景,設(shè)置域名解析權(quán)重,請求解析到不同的后端實(shí)例完成分流,從1%逐步增加流量直到全量請求到 TSE 云原生 API 網(wǎng)關(guān),再將域名解析切換到 TSE 云原生 API 網(wǎng)關(guān)。
第二種場景,域名直接解析到 TSE 云原生 API 網(wǎng)關(guān),在網(wǎng)關(guān)的服務(wù)或者接口路由上配置灰度策略,將流量轉(zhuǎn)發(fā)到后端對應(yīng)的業(yè)務(wù)服務(wù),逐步增加流量到100%,最后清除灰度策略;實(shí)際情況下會(huì)比上面提到的兩種稍微復(fù)雜一些,小鵝通在域名解析和灰度策略上做了不少工作,來實(shí)現(xiàn)秒級流量切換和回退。
統(tǒng)一網(wǎng)關(guān)帶來的收益
除了解決前面提到的核心問題,統(tǒng)一網(wǎng)關(guān)也帶來了以下收益:
1、減少了90%以上的 CLB 實(shí)例數(shù)量,通過網(wǎng)關(guān)自身的彈性擴(kuò)縮容配合我們業(yè)務(wù)的彈性伸縮,極大的降低了我們的資源成本和維護(hù)成本;在整個(gè)遷移的過程中,同時(shí)也梳理了大量的公網(wǎng)域名、路由、負(fù)載,進(jìn)行了相應(yīng)的合并刪減。
2、充分利用 OpenAPI、CRD、插件的方式提高小鵝通的自動(dòng)化能力,將一些動(dòng)作和小鵝通的服務(wù)初始化的流程和其他環(huán)節(jié)打通,提高效率的同時(shí)也降低了出錯(cuò)的可能性。
3、借助 TSE 云原生 API 網(wǎng)關(guān)來統(tǒng)一治理小鵝通業(yè)務(wù)服務(wù)的入口流量,和 WAF、VPN、流量鏡像、接口請求響應(yīng)的審計(jì)分析,和小鵝通的安全團(tuán)隊(duì)運(yùn)維團(tuán)隊(duì)一起提高訪問控制與安全性。
總結(jié)
感謝 TSE 云原生 API 網(wǎng)關(guān)團(tuán)隊(duì),在性能壓測和容量評估階段,提供了很多的數(shù)據(jù)參考和成本方案建議,同時(shí)在整個(gè)遷移過程也提供了非常多的技術(shù)支持和保障護(hù)航。
往期
推薦
《騰訊云微服務(wù)平臺 TSF 異地多活單元化能力重磅升級》
《騰訊云消息隊(duì)列 RocketMQ 5.x 系列產(chǎn)品重磅發(fā)布 | 新品優(yōu)惠》
《微服務(wù)高可用容災(zāi)架構(gòu)設(shè)計(jì)》
《Apache pulsar 技術(shù)系列-- 消息重推的幾種方式》
《Apache Pulsar 技術(shù)系列 - GEO replication 中訂閱狀態(tài)的同步原理》
《CKafka 跨洋數(shù)據(jù)同步性能優(yōu)化》
《基于 DTS 同步 MySQL 全增量數(shù)據(jù)至 CKafka,構(gòu)建實(shí)時(shí)數(shù)倉的最佳實(shí)踐》
《業(yè)務(wù)高速增長,如祺出行如何用騰訊云消息隊(duì)列 RocketMQ 應(yīng)對挑戰(zhàn)》
掃描下方二維碼關(guān)注本公眾號,
了解更多微服務(wù)、消息隊(duì)列的相關(guān)信息!
解鎖超多鵝廠周邊!
點(diǎn)個(gè)在看你最好看
