近年來,隨着互聯網在全球的快速發展和普及,網民數量的不斷增長,生活中各方面對互聯網依賴的加強,帶來互聯網訪問量的爆炸性增長,催升了諸如 google, facebook等巨型站點,國內也有 BAT 等幾家公司旗下的站點訪問量躋身世界前十。html
面對需求的不斷提升,幾年前咱們還在爲解決 C10K 問題而努力,如今已經開始面臨 C10M 問題的挑戰。linux
C10M意味着什麼,一個比較流行的解釋以下:服務器
雖然對於某些具體數據,好比10G帶寬傳輸數據是否太少,10M 併發鏈接中有多少活躍鏈接等,還有待商榷,可是 C10M 問題從數量上給咱們描繪了一幅前景。網絡
MiddleBox(a computer networking device that transforms, inspects, filters, or otherwise manipulates traffic for purposes,參見http://en.wikipedia.org/wiki/Middlebox)做爲網絡的邊界和入口,是流量匯聚和集中的關鍵位置,會首先面臨 C10M 問題的考驗。MiddleBox 在阿里巴巴集團中普遍使用,主要包括4/7層負載均衡設備,4層代理網關等,本文主要分享一些在4層負載均衡設備方面的一些工做和思考。session
在 C10K 時代,催生了epoll等技術的出現。對於4層負載均衡技術來講,主要是基於內核netfilter框架來處理網絡流量,這種機制在 C10M 的狀況下有些力不從心,形成性能瓶頸的緣由主要有如下幾點:數據結構
因此面對C10M,咱們須要解決的問題是主要有幾個方面:架構
包的可擴展性併發
多核的可擴展性負載均衡
內存的可擴展性框架
針對這幾個問題,阿里技術保障部的網絡產品團隊自主研發出產品AGW(Ali GateWay),徹底在應用層實現,拋棄了傳統Linux內核netfilter 網絡包處理框架,實現了fullnat+synproxy的四層負載功能。AGW系統設計的關鍵技術主要有如下幾點:
多核多隊列:AGW系統爲均衡功能分配專用的CPU core, 與內核隔離,將CPU和處理線程綁定,poll方式收發包,這樣能夠避免網卡中斷操做以及操做系統進行線程切換所帶來的上下文切換開銷。另外,網卡支持多隊列和RSS,咱們利用這一功能,將數據包根據CPU核數進行分流,每一個core維護本身的session表,處理一個隊列接收到的數據包。
AGW多核隊列圖
無鎖實現:數據平面的無鎖化,是經過上述的多隊列功能實現了,每一個core維護本身的session 表,網卡將I/O流分給多個CPU內核作並行處理,無需爭用鎖。控制平面的無鎖化,由於對vip表修改等控制操做在整個週期中佔比很小,咱們沒有必要由於管控命令而對數據平面的操做加鎖,咱們使用按期poll的方式執行控制命令,這樣能夠實現控制平面的無鎖化。第2點和第3點,解決了C10M多核可擴展性問題。
Hugepage: 由於網關設備的專用性,咱們利用HugePage功能,爲AGW分配不少1GB的大頁面專門使用,這樣能夠減小TLB Miss狀況,並減小處理TLB Miss所需的內存操做,同時對於頻繁分配的數據結構,採用mempool機制。
核心數據支持NUMA:現今服務器體系大都是numa架構,處理器能快速的訪問在同一個numa單元的內存。在AGW系統設計中,咱們將頻繁使用的核心數據結構(如session表)分佈在各個core對應numa節點的內存中。同時,在多網卡的環境中,網卡綁定pci也會對應到不一樣的numa節點上,咱們多核多隊列的架構也利用了這一特性,將同一numa節點的網卡隊列和CPU對應起來,避免數據的跨numa節點訪問,這樣能夠 緩解總線瓶頸和高速cache爭用,提高系統性能。第4,5點解決了C10M的內存可擴展性問題。
AGW數據流圖 |
在阿里巴巴集團,業務和規模驅動技術不斷向前,技術保障部網絡產品研發團隊長期致力於高性能Middle Box的研發,不斷知足公司高併發訪問的業務需求。AGW系統的開發與上線,能夠爲雙十一提供有力的保障,爲業務的快速增加保駕護航。
做者:阿里巴巴技術保障 運維架構師 王昕溥(金農) @江湖信美