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