网络用户爆发式的增长,要求网络接入必须能快速响应各种层面的需求,如访问加速、接入高可用、安全防攻击等。在 2019 年的春晚红包活动中,BFE(Baidu Front End, 百度统一前端)稳定处理了海量用户请求,同时极大降低了对后端服务的压力,保证了活动的顺利进行。
实际上在 2019 年 8 月 BFE 转发引擎就已在 GitHub 上开源。截止今天 Star 已高达 3.2K,我们不妨一起来回顾一下这个项目。首先奉上 GitHub 开源地址:https://github.com/baidu/bfe
BFE 引擎已在 GitHub 开源
BFE 在百度网络接入架构中是如何部署的呢?
百度的网络接入架构
上图为百度的网络接入架构图,其中包括关键系统:GTC(外网流量调度系统,负责将来自各地的流量分配至合适的外网带宽出口),BGW(百度自研的四层负载均衡系统),BFE(七层负载均衡系统),GSLB(内网流量调度系统,可以在内网实现集群粒度的跨机房、跨集群的流量调度)。
设置 BFE 的主要目的是:一方面,支持网络资源统一管理,尤其是是带宽资源,在统一管理后可以进行深度优化。另一方面,实现功能的统一开发,配置和策略也可以统一上线。
可以看到,BFE 的主要功能包括:
流量接入:提供多种协议支持(HTTP/HTTPS/HTTP2/QUIC 等)
流量分发:基于 HTTP Header,支持丰富语义、各种规则组合的流量分发机制
安全防攻击:提供应用层防火墙(WAF)、应用层 DDoS 攻击防御
数据分析:提供多维度的数据报表,用于分析用户分布、服务状态、网络状态
流量采集和调度:为上文提到的调度系统 GTC / GSLB 提供流量数据,并为 GSLB 提 供调度执行能力
为什么 BFE 在解决这类问题上面能力突出?
首先, 更高的安全性和稳定性。BFE 完全基于 Golang 开发 。相比于基于 C 语言开发的同类软件(如 Nginx),BFE 不存在缓冲区溢出这样的安全隐患,且可以针对异常进行精细的捕捉,可尽量避免服务程序的整体崩溃。其次,更高的研发效率。同样基于 Golang 相对于 C 的优势,对 BFE 进行功能扩展开发,研发效率提高数倍。最后, 完善的平台化解决方案。BFE 是包含运维管理、流量调度、安全和防攻击、数据统计等功能的完整解决方案,BFE 已经成功实现百度之外的商业化落地。
目前 BFE 转发引擎已在 GitHub 上开源,主要功能包括:
主流的接入协议支持,如 HTTP(S)、SPDY、HTTP/2、WebSocket、TLS
基于请求内容的路由,包括 BFE 独特而强大的“条件表达式”(Condition Expression) 能力。多种负载均衡策略包括 BFE 的多层级负载均衡模型,及过载保护能力
灵活的模块框架,开发者可以方便的基于这个框架、开发扩展功能
丰富的监控探针,相比于同类开源软件 BFE 面向金融级企业场景,内置了丰富详尽的监控指标
BFE 平台全景
目前 BFE 开源版本的功能还相对简单 ,据悉未来将围绕接入协议、转发协议、证书密钥管理等多方面对功能进行完善,以更好的满足各类使用者的需求,同时加强与其他主流开源软件 (如:k8s、gRPC、Prometheus 等) 的对接,更好的融入开源生态。
BFE 高效开源大赛交作业领奖品啦
一转眼 BFE 大赛开赛 3 个多月啦,比赛还未结束,欢迎各位童靴积极报名参赛!
TOP 20 提交代码的团队,团队成员将会获得小度音响一台哟!
如今已进入赛事的第一波高潮,报 bug、提 feature,改文档~赛程还有半年。欢迎同学们的积极贡献!来自佛山科技学院的团队率先提交了代码。百度将会为该团队成员分别寄送小度音响一台!据小童鞋反馈,BFE 的代码可读性非常强拥有简洁清晰的代码结构,易于进行的模块开发。
此次参加开源大赛收获颇丰,愉快的阅读了 n 多 RFC 文档,熟悉了参加开源项目的流程速成了 go 语言。屏幕前的你,是不是也想好好学习,天天向上呢?那么,快来参加 BFE 开源大赛吧!