简介
喜欢博主的可以关注一波,后续出一系列博主学习开源BFE项目的心得以及学习笔记,对于学习Go语言的同学是一个不错的学习教程哈
BFE项目简介
- BFE是百度统一七层负载均衡接入转发平台,其相比于传统的四层负载均衡转发平台,优点如下:
(1)功能统一开发;
(2)运维统一管理(针对公司级别普篇使用的安全策略);
(3)增强对流量的控制能力;
四层负载均衡存在的问题:
(1)功能重复开发;
(2)运维成本高;
(3)流量统一控制能力差;
可以看见,BFE的优点正是原有传统四层负载均衡转发平台的缺点。 - 四层负载均衡平台:也被称为网络负载均衡,主要是基于TCP和UDP的流量进行处理,主要基于IP地址和端口号进行处理;LVS、DPVS、Nginx;
- 七层负载均衡平台:主要是基于应用层协议做相应的规则转发,例如基于HTTP的请求头的内容转发;BFE、ENvoy、Nginx;
- 针对开发者而言,BFE选型与Nginx作为技术选型的对比:
(1)从研发效率,Nginx采用C++\C语言、BFE采用GO语言,研发效率高;
(2)基于语言的特性,减少线上问题的,Go语言有原生的一套内存管理机制;
(3)代码可维护性;等等
BFE总览
开源内容:
(1)主流接入协议的支持,包含HTTP、HTTPS、SPDY、HTTP/2、Web Socket和TLS;
(2)灵活的模块框架:在BFE的主流程中,在不同的地方设置了回调点,在对应的回调点,开发者可以插入灵活的第三方插件(有点类似于NGINX Http的11个阶段的意思);
(3) 基于请求内容的路由:基于BFE团队自研的“条件表达式”(用于确定具体的产品线),类似于NGINX的location确定,采用正则表达式;
(4)多种负载均衡策略:支持多机房、集群粒度的负载均衡、支持过载保护;
(5)丰富的监控探针:可以在BFE内置丰富详尽的监控指标;
BFE平台定位:
(1)接入和转发:可以处理多种传输层的协议,且可以基于HTTP的头部做转发;
(2)流量调度:主要是内网流量调度和外网流量调度;
(3)数据分析:可以实时的放映业务的流量变化情况以及下游业务群的健康状态;
(4)安全防攻击;
代码组织:
网络协议:bfe_net: BFE网络相关基础库代码;bfe_http: BFE HTTP协议基础代码;bfe_tls: BFE TLS协议基础代码;bfe_http2: BFE HTTP2协议基础代码;bfe_spdy: BFE SPDY协议基础代码;bfe_stream: BFE TLS代理基础代码;bfe_websocket: BFE WebSocket代理基础代码;bfe_proxy: BFE Proxy协议基础代码
分发转流:bfe_route: BFE分流转发相关代码;bfe_balance: BFE负载均衡相关代码;
扩展插件:bfe_modules主要包括扩展插件的代码,这些插件,开发者可以根据自己需求,插入下面的回调点中;每一个回调点顺序执行插入的插件,其实和Nginx插入第三方模块是很像的;
服务框架:BFE主要的流程的代码从bfe_server中开始,好比于一个程序的main函数,可能有点不准确,大概意思就是那个意思;
基础组件:这几个文件主要是支持BFE开发的配置、数据类型、以及基础库存放的代码空间;
BFE基于插件执行:
在BFE的转发过程中,提供多个回调点,对于一个模块,可以针对这些回调点、对应编写回调函数,在模块初始化时,把这些回调函数注册到对应的回调点,在处理一个连接或请求时,当执行到某个回调点,会顺序执行所有注册的回调函数,各个回调点的含义:
HandleAccept: 位于和客户端的TCP连接建立后
HandleHandshake:位于和客户端的SSL或TLS握手完成后
HandleBeforeLocation:位于查找产品线之前
HandleFoundProduct:位于完成查找产品线之后
HandleAfterLocation:位于完成查找集群之后
HandleForward:位于完成查找子集群和后端实例之后,位于转发请求之前
HandleReadResponse:位于读取到后端响应之后
HandleRequestFinish:位于后端响应处理完毕后
HandleFinish:位于和客户端的TCP连接关闭后
参考资料
BFE核心技术与实现
BFE源码.
提示
本文用于记录BFE学习的笔记,方便查询,在学习过程中根据个人知识认知,会不断的修正博客内容;