淺談2021年網(wǎng)絡(luò)系統(tǒng)流行架構(gòu)
2021年了,看看網(wǎng)絡(luò)系統(tǒng)的流行架構(gòu),包括WAF,安全網(wǎng)關(guān),負載均衡等。
系統(tǒng)的質(zhì)量屬性要滿足客戶需求,所以架構(gòu)的第一出發(fā)點也是需求。
有偏好的需求構(gòu)成場景,架構(gòu)的取舍就是基于應(yīng)用場景的偏好。
網(wǎng)絡(luò)系統(tǒng)在管道的位置,大致分為兩類:
傻快型
內(nèi)容無感知,以交換和路由為主。如各種交換機,路由器等設(shè)備,主要靠硬件。
純軟件實現(xiàn)上的需求主要是犧牲一些硬件的高性能,換取管理和維護的方便和統(tǒng)一,如SDN,NFV。
目前為了融合硬件與軟件,一般都采用x86的架構(gòu)配合高速可編程的NIC和轉(zhuǎn)發(fā)芯片(如支持P4)。
以獲得性能與管理的雙重優(yōu)勢。
但本質(zhì)還是矛盾,硬件的特殊化就會帶來管理的特殊化,具體問題需要具體討論解決,不展開。
智慧型
內(nèi)容感知,以業(yè)務(wù)驅(qū)動的負載均衡和網(wǎng)關(guān)系統(tǒng)為主。如負載均衡,API網(wǎng)關(guān)等,主要靠軟件。
今天重點說一下2021年軟件上的流行架構(gòu)。
因為兩種類型沒有明顯分界,但內(nèi)容感知程度是有的,業(yè)務(wù)驅(qū)動的網(wǎng)絡(luò)系統(tǒng)在互聯(lián)網(wǎng)行業(yè)需求很大。
所以網(wǎng)絡(luò)基礎(chǔ)架構(gòu)軟件化不僅僅是管理統(tǒng)一的問題,還有具體業(yè)務(wù)的問題很難在通用設(shè)備上完美解決。
軟件實現(xiàn)雖然性能不行,但其靈活性和對硬件的解偶帶來的收益是大于性能收益的,其橫向擴展能力也彌補了全局性能。收益主要體現(xiàn)在迭代迅速(需求滿足的速度),硬件統(tǒng)一,部署靈活,運維簡單。所以暫時將引入硬件解決單點性能問題作為第二考慮的因素。
我們一層一層來說。
eBPF - Passthrough

2021年eBPF打底應(yīng)該沒有爭議吧,對比以eBPF實現(xiàn)的XDP與DPDK,結(jié)合我們剛說過的問題。DPDK還是有Intel,DPDK網(wǎng)卡的硬件約束。而eBPF系統(tǒng)約束更小,Kernel > 4.8即可。雖然性能稍微弱一些,但可以在純Linux運行,可以靈活在用戶態(tài)和內(nèi)核態(tài)對接,需求迭代速度也遠高與DPDK。所以軟件上做傻快型可以選DPDK,但智慧型XDP更適合。
以此為基礎(chǔ)的項目有k8s網(wǎng)絡(luò)組件Cilium,F(xiàn)acebook的業(yè)務(wù)負載均衡Katran。
Cilium - Network
迭代和硬件說完了,我們看下部署,部署上:盒子,私有系統(tǒng),各種云。對應(yīng)也就是Metal,VM,容器等。因為有了eBPF的約束,沒有操作系統(tǒng)的Rare Metal就不在討論范圍內(nèi),它更適合傻快的方案。
各種部署下都能運行的網(wǎng)絡(luò)就是用戶態(tài)網(wǎng)絡(luò)。XDP只要是內(nèi)核滿足的Linux,Cilium已經(jīng)證明了和容器結(jié)合,DPDK更費勁。所以還是eBPF更有優(yōu)勢。以此為基礎(chǔ)的軟件系統(tǒng),可以安裝在任意Linux,VM,Docker上,實現(xiàn)各種環(huán)境的架構(gòu)統(tǒng)一。
未來網(wǎng)絡(luò)層應(yīng)該還會有其他XDP的用戶協(xié)議棧方案,如果不需要路由交換的網(wǎng)絡(luò)功能,可直接與應(yīng)用結(jié)合,如Katran。
Envoy - Gateway
Cilium解決網(wǎng)絡(luò)的問題,路由交換,簡單策略。但業(yè)務(wù)感知還需要靈活的網(wǎng)關(guān),關(guān)于網(wǎng)關(guān)的選擇我之前也研究過。
https://donge.org/posts/envoy-vs-traefik/
這里網(wǎng)絡(luò)如果選擇了Cilium(主要是容器場景),那么結(jié)合最好的還是Envoy,Evony在四層進行業(yè)務(wù)感知,進行業(yè)務(wù)層面的路由和網(wǎng)關(guān),有強大的策略配置驅(qū)動和插件機制,也是快速迭代的優(yōu)選。
這里雖然拿了一個K8S中CNI的圖,但Cilium也可以僅作為有網(wǎng)絡(luò)路由功能的用戶態(tài)協(xié)議棧使用,也可以省略。

Golang - Plugins
采用通用網(wǎng)關(guān)驅(qū)動特定業(yè)務(wù),插件或二次開發(fā)是繞不過的,平衡性能與迭代速度,Golang比C++,Lua,JavaScript,Rust都稍微占一些優(yōu)勢。因為開發(fā)效率和不俗的性能。Envoy是C++,有開發(fā)門檻,但插件系統(tǒng)較為完善,Cilium是Golang。
WASM插件也是強有力的方案,只是今年來看還優(yōu)點早,得不償失。而且和Golang也不沖突,Envoy同時也支持WASM和LUA。
但只要不是天天變化的邏輯,Golang中庸的綜合實例還是略勝一點。
未來Rust with WASM很有想象力。
全家福
為什么叫2021流行架構(gòu),因為過幾年也許還有更好的選擇,就如同XDP對比DPDK的優(yōu)勢,順應(yīng)了一些DPDK出生時沒有的潮流,比如容器化。
最后祭出這張原創(chuàng)全家福,歡迎抄襲。

以此為基礎(chǔ),可以快速滿足大部分的網(wǎng)絡(luò)系統(tǒng),包括業(yè)務(wù)路由(負載均衡),WAF,API網(wǎng)關(guān),單點認證,日志,QoS,跟蹤系統(tǒng)等。并可部署與單機,私有化,混合云環(huán)境等無硬件依賴環(huán)境。
性能雖然在第二梯隊,但XDP,Golang這樣的選擇也是第二梯隊的王者。而網(wǎng)絡(luò)性能的熱點更可能會在IO,并發(fā)(鎖),加解密/壓縮反壓縮(計算),而他們的解決方案從來不是哪種語言,有機會再探討。
P.S. K3S是輕量級K8S,適用于小系統(tǒng)部署。
參考文檔:
- http://arthurchiao.art/blog/transparent-chaos-testing-with-envoy-cilium-ebpf-zh/
- https://gitlab.com/gitlab-org/gitlab/-/issues/205129
- https://github.com/zoidbergwill/awesome-ebpf