扩大插件机制是所有现代化的七层负载平衡开源软件都具备的能力。通过扩大插件机制,能够很不便的为BFE减少新的性能,同时又能放弃BFE代码组织的清晰逻辑。

因为波及BFE扩大插件的内容比拟多,将分为多篇文章来解说。明天首先解说“回调点”。

1. 扩大插件和回调点

BFE扩大插件机制是围绕“回调点”来实现的。模块插件的根本工作原理如下:

  1. 在BFE的转发过程中,提供多个回调点(参见图1)。在图1中,包含2个解决步骤,3个回调点。
  2. 对于一个扩大插件,能够针对这些回调点对应编写回调函数(参见图1)。在图1中,扩大插件提供了2个回调函数。
  3. 在模块初始化时,把这些回调函数注册到对应的回调点(参见图1)。对于某个回调点,注册在这里的多个回调函数造成了一个链表或队列(参见图2)。
  4. 在解决一个连贯或申请时,当执行到某个回调点时,会程序执行所有注册的回调函数(参见图2)。


图1 扩大插件的回调函数和主流程的回调点


图2 在回调点注册的回调函数队列

2. BFE解决的主流程

BFE解决的主流程如图2所示。流程次要包含9步,能够分为5个大的阶段(参见图3):
(1) 建设连贯和TLS握手
(2) 读取申请头部
(3) 确定租户、集群、子集群、实例
(4) 转发申请和响应
(5) 敞开连贯


图3 BFE解决的主流程

3. BFE的回调点设置

在BFE中,针对次要的解决步骤,设置了9个回调点(参见图4):
(1) HandleAccept: 位于和客户端的TCP连贯建设后。
(2) HandleHandshake:位于和客户端的SSL或TLS握手实现后。
(3) HandleBeforeLocation:位于确定租户(产品线)之前。
(4) HandleFoundProduct:位于确定租户(产品线)之后。
(5) HandleAfterLocation:位于确定集群之后。
(6) HandleForward:位于确定子集群和实例之后,以及转发申请之前。
(7) HandleReadResponse:位于转发申请和读取到后端响应之后。
(8) HandleRequestFinish:位于转发响应处理完毕后。
(9) HandleFinish:位于和客户端的TCP连贯敞开后。

有了这些回调点,就能够在BFE解决连贯和申请的过程中塞入本人想实现的各种性能了。在编写某个扩大插件时,只须要抉择适合的回调点,编写对应的回调函数。


图4 BFE的回调点设置

一个BFE的扩大插件怎么写?这方面的具体内容将在下一篇文章中细说。心急的读者能够参阅《万亿级流量转发:BFE核心技术与实现》中的阐明。也能够参阅位于 https://github.com/baidu/bfe-... 的在线图书。

欢送关注“BFE开源我的项目”微信公众号,取得本我的项目的更多更新。谢谢!