全球化多租戶七層流量轉(zhuǎn)發(fā)平臺
標題出現(xiàn)了三個關鍵詞:全球化、多租戶、七層流量轉(zhuǎn)發(fā)。我們倒序介紹這三個詞,最后再通過一張架構圖展開理解所謂的全球化架構。
本篇介紹的內(nèi)容會比較淺顯,目的是讓大家通過閱讀本篇文章能夠?qū)θ蚧軜嬘兴私?,不會涉及到公司的?nèi)部技術。
首先是七層流量轉(zhuǎn)發(fā),七層即七層網(wǎng)絡模型中的第七層:應用層,如http協(xié)議、websocket協(xié)議、自定義協(xié)議。常見且大家熟悉的七層流量代理如Nginx。
通常七層流量代理之前還會有一層四層流量代理實現(xiàn)負載均衡,如LVS、Nginx,Nginx可用作四層流量代理,也可用作七層流量代理。
本篇的七層流量代理主角是BFE。
那么什么是BFE?
BFE(百度統(tǒng)一前端)是百度開源的七層流量接入轉(zhuǎn)發(fā)平臺。開源部分為BFE的核心轉(zhuǎn)發(fā)引擎,因此很多功能還需要二次開發(fā)。BFE主要提供以下功能:接入和轉(zhuǎn)發(fā)(僅支持主流協(xié)議)、流量調(diào)度(負載均衡、限流、路由)、安全防攻擊、日記數(shù)據(jù)分析。
為什么選擇BFE而不是Nginx?相信大家都會有這樣的疑問,我們帶著這個問題閱讀本篇內(nèi)容。
多租戶,即一個七層流量轉(zhuǎn)發(fā)平臺支持多個用戶使用,這些用戶共享硬件資源,但每個租戶都可以使用定制或自定義配置功能,相互之間不影響,并且應該支持一個租戶的流量突增不會拖垮其它租戶。
如果只是公司內(nèi)部產(chǎn)品,通常多租戶指的就是多個不同業(yè)務線的產(chǎn)品。一個電商平臺可能有商城業(yè)務、物流業(yè)務,如果兩個業(yè)務線的項目都接入七層流量轉(zhuǎn)發(fā)平臺,那么每個業(yè)務線就是一個租戶。
開源BFE支持多租戶,且限流支持全局限流和按租戶限流。資源是有限的,必須通過限流手段限制每個租戶可用流量,避免一個租戶流量突增或其它原因?qū)е碌牧髁坎徽M辉龆绊懫渌鈶簟?/p>
全球化,并非指在中國區(qū)域內(nèi)部署一套系統(tǒng),全球各個角落都能訪問,而是需要在全球多區(qū)域多機房部署系統(tǒng),借助CDN、AnyCast調(diào)度流量到用戶所在區(qū)域的最近機房。
如中國用戶的流量全部調(diào)度到中國境內(nèi)的機房,如果中國境內(nèi)也部署多機房,也會選擇離用戶最近的機房。但并非每個國家都有機房部署系統(tǒng),例如亞太地區(qū)只會部署一套系統(tǒng),所有亞太地區(qū)的用戶流量都會調(diào)度到亞太地區(qū)機房。
由于是多租戶架構,并非每個租戶都會在各個區(qū)域部署一套系統(tǒng),因此還需要七層流量轉(zhuǎn)發(fā)平臺支持跨區(qū)域流量調(diào)度。
當流量調(diào)度到用戶所在區(qū)域的七層流量轉(zhuǎn)發(fā)平臺,而該區(qū)域下并未部署該租戶的服務時,就需要七層流量轉(zhuǎn)發(fā)平臺能夠發(fā)現(xiàn)就近區(qū)域的服務,將流量跨區(qū)域轉(zhuǎn)發(fā)到就近區(qū)域的七層流量轉(zhuǎn)發(fā)平臺。
與RPC一樣,七層流量轉(zhuǎn)發(fā)平臺需要將流量轉(zhuǎn)發(fā)給后端服務,就需要實現(xiàn)服務注冊與發(fā)現(xiàn)功能,這也是BFE沒有提供的。后端服務需要主動注冊到區(qū)域內(nèi)的注冊中心,七層流量轉(zhuǎn)發(fā)平臺從注冊中心發(fā)現(xiàn)服務。
要支持跨區(qū)域流量調(diào)度就必須要讓部署在每個機房的七層流量轉(zhuǎn)發(fā)平臺能夠自動的發(fā)現(xiàn)其它區(qū)域注冊中心注冊的服務,這就需要注冊中心也支持跨區(qū)域數(shù)據(jù)同步,而這屬于數(shù)據(jù)同步的全球化架構范圍,本篇不做分析。
為什么要跨區(qū)域轉(zhuǎn)發(fā)流量,而不是直接讓用戶連接到目標區(qū)域機房?
如果理解CDN的用途就不難理解這個問題。用戶到邊緣節(jié)點的網(wǎng)絡是比較穩(wěn)定的,用戶就進接入能夠保證網(wǎng)絡穩(wěn)定。而接入邊緣節(jié)點后跨區(qū)域流量調(diào)度走的是內(nèi)網(wǎng)專線,相當于從高速公路上了高鐵,雖然物理距離沒變,但乘坐高鐵的速度更快,也不會堵車。
這種七層流量轉(zhuǎn)發(fā)平臺跨區(qū)域流量調(diào)度也叫東西向路由,指服務到服務間的路由,與之對應的還有南北向路由,指客戶端流量到服務端的路由。BFE支持很多路由規(guī)則的配置,如前綴路由、host路由等,有興趣可以了解下BFE。
以下是基于BFE畫的一個簡易版全球化流量調(diào)度架構圖。
流量接入與轉(zhuǎn)發(fā)流程分析:
客戶端App啟動時根據(jù)內(nèi)置的BFE域名通過CDN接入就近區(qū)域的BFE;
BFE根據(jù)租戶信息按:
租戶(對應bfe中的概念:產(chǎn)品)
-> 服務(對應bfe中的概念:集群)
-> 機房(對應bfe中的概念:子集群) 進行路由,
如果當前區(qū)域未發(fā)現(xiàn)服務,則通過跨區(qū)域流量轉(zhuǎn)發(fā)到其它注冊有該服務的區(qū)域的BFE;
最后負載均衡從機房下的集群選項一個服務實例轉(zhuǎn)發(fā)流量。
當然,這是比較簡單的實現(xiàn)。
前文提到的問題:為什么不使用Nginx之類的七層流量代理?
Nginx功能過于簡單,基于Nginx開發(fā)成本更高。
為什么選擇BFE?并且還需要二次開發(fā)?
BFE基于GO語言開發(fā),語法簡單,性能優(yōu)秀,并且BFE已經(jīng)提供好實現(xiàn)多租戶、多協(xié)議的接入轉(zhuǎn)發(fā)框架,擴展性好。
BFE只開源了核心的接入轉(zhuǎn)發(fā)框架,實際上很多工作都需要進行二次開發(fā)。包括多租戶資源調(diào)度、配置管理、限流擴展支持按握手次數(shù)與按連接數(shù)限流,擴展支持歷史遺留項目的各種自定義協(xié)議,支持長連接,支持h5等。
本文轉(zhuǎn)載自微信公眾號「Java藝術」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系Java藝術公眾號。