每日轉(zhuǎn)發(fā)請(qǐng)求近 1 萬億、峰值 QPS 超 1000 萬,百度轉(zhuǎn)發(fā)引擎 BFE 開源了!

據(jù)了解,作為綜合的流量轉(zhuǎn)發(fā)平臺(tái),BFE 平臺(tái)主要集成了以下 4 大功能:

• 流量接入和轉(zhuǎn)發(fā):支持 HTTP、HTTPS、HTTP/2、QUIC 等多種協(xié)議,并支持強(qiáng)大的應(yīng)用層路由能力
• 流量全局調(diào)度:支持由外網(wǎng)流量調(diào)度和內(nèi)網(wǎng)流量調(diào)度共同構(gòu)成的全局流量調(diào)度系統(tǒng)
• 安全和防攻擊:支持黑名單封禁、精細(xì)限流和應(yīng)用層防火墻(WAF)等多種防攻擊能力
• 實(shí)時(shí)數(shù)據(jù)分析:支持分鐘級(jí)的超高維度時(shí)序報(bào)表

在 2019 年百度春晚紅包活動(dòng)中,BFE 平臺(tái)在超大用戶壓力、數(shù)次流量波峰下平穩(wěn)運(yùn)行,保證了春晚紅包活動(dòng)的順利進(jìn)行。 每日轉(zhuǎn)發(fā)請(qǐng)求近 1 萬億、峰值 QPS 超 1000 萬,百度轉(zhuǎn)發(fā)引擎 BFE 開源了!

BFE 目前已宣布開源(https://github.com/baidu/bfe),并支持以下重要能力:

1、主流網(wǎng)絡(luò)協(xié)議接入
• 支持 HTTP/HTTPS/SPDY/HTTP2/WebSocket 等
• 支持 TLS/HTTP/ WebSocket 反向代理模式

2、可擴(kuò)展插件框架
• 通過可擴(kuò)展插件框架,快速定制開發(fā)擴(kuò)展模塊,滿足業(yè)務(wù)定制化需

• 內(nèi)置重寫、重定向、流量修改、封禁等豐富插件

3、基于請(qǐng)求內(nèi)容的分流
• 基于領(lǐng)域?qū)S姓Z言的分流規(guī)則,滿足復(fù)雜業(yè)務(wù)場(chǎng)景定制化流量轉(zhuǎn)發(fā)
• 支持完備的分流條件原語集,包括基于請(qǐng)求內(nèi)容(URI/Header/Cookie 等)以及請(qǐng)求上下文(IP、協(xié)議、標(biāo)簽、時(shí)間等)的條件原語。

4、靈活的負(fù)載均衡策略
• 支持集群級(jí)別負(fù)載均衡及實(shí)例級(jí)別負(fù)載均衡,實(shí)現(xiàn)多可用區(qū)容災(zāi)及過載保護(hù)
• 內(nèi)置加權(quán)輪詢、加權(quán)最小連接數(shù)策略,基于 IP 或請(qǐng)求內(nèi)容識(shí)別用戶實(shí)現(xiàn)會(huì)話保持

使用 Go 語言完成重構(gòu)

作為 BFE 平臺(tái)的核心組件,BFE 轉(zhuǎn)發(fā)引擎從 2012 年開始研發(fā),并于 2014 年使用 Go 語言完成重構(gòu)。由于基于 Go 語言,和業(yè)界普遍使用的 Nginx 開源軟件相比,BFE 具有以下優(yōu)勢(shì):

• 研發(fā)效率高:Go 語言的開發(fā)效率遠(yuǎn)高于 C 語言(及 Lua),在代碼的可維護(hù)性方面也有巨大優(yōu)勢(shì)。
• 系統(tǒng)的安全和穩(wěn)定性高:Go 語言沒有 C 語言固有的緩沖區(qū)溢出隱患,規(guī)避了大量的穩(wěn)定性和安全風(fēng)險(xiǎn);另外對(duì)于異常可以捕捉,保證程序在快速迭代上線的情況下也不崩潰。

這是因?yàn)閺拈L期趨勢(shì)看,基于更高級(jí)編程語言的軟件系統(tǒng)會(huì)逐步取得競爭的優(yōu)—— CPU 等硬件資源的價(jià)格仍會(huì)快速下降,而開發(fā)人力成本、項(xiàng)目研發(fā)風(fēng)險(xiǎn)、系統(tǒng)穩(wěn)定性/安全性方面會(huì)成為更重要的決策考慮。
于是我們可以大膽推測(cè),主要基于 C 語言的 Nginx 會(huì)逐步衰落,而類似 BFE 這樣的基于更高級(jí)編程語言的軟件會(huì)逐步成為主流。
另外,BFE 在設(shè)計(jì)中還特別增加了企業(yè)級(jí)應(yīng)用場(chǎng)景的考慮:

• 轉(zhuǎn)發(fā)場(chǎng)景的直接支持:和 Nginx 這樣從 Web Server 轉(zhuǎn)型為 Proxy 的進(jìn)化路徑不同,BFE 直接為轉(zhuǎn)發(fā)場(chǎng)景設(shè)計(jì),從轉(zhuǎn)發(fā)模型和轉(zhuǎn)發(fā)配置方面更滿足轉(zhuǎn)發(fā)場(chǎng)景的需求
• 多租戶的支持:在云計(jì)算的場(chǎng)景下,多租戶復(fù)用是普遍的需求。在 BFE 的設(shè)計(jì)中,內(nèi)置提供了多租戶的支持
• 結(jié)構(gòu)化的配置:BFE 的配置設(shè)計(jì),大量使用 JSON 這樣的結(jié)構(gòu)化方式,便于和相關(guān)配置管理系統(tǒng)對(duì)接
• 豐富的監(jiān)控探針:作為一個(gè)工業(yè)級(jí)軟件,在 BFE 的設(shè)計(jì)中充分考慮了線上監(jiān)控的需求,BFE 程序通過 HTTP 方式向外暴露數(shù)千個(gè)內(nèi)部狀態(tài)變量

每日轉(zhuǎn)發(fā)請(qǐng)求近 1 萬億、峰值 QPS 超 1000 萬,百度轉(zhuǎn)發(fā)引擎 BFE 開源了!

對(duì)于 BFE 開源版本詳情及后續(xù)路線圖感興趣的用戶,可以關(guān)注 https://github.com/baidu/bfe 或登錄 github 搜索 BFE 持續(xù)保持關(guān)注。

來源 | 雷鋒網(wǎng)
作者 | 黃善清

Share this article:

Facebook
Twitter
LinkedIn
WhatsApp

More articles