关于负载均衡:为BFE编写扩展插件1-–-回调点

4次阅读

共计 1121 个字符,预计需要花费 3 分钟才能阅读完成。

扩大插件机制是所有现代化的七层负载平衡开源软件都具备的能力。通过扩大插件机制,能够很不便的为 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 开源我的项目”微信公众号,取得本我的项目的更多更新。谢谢!

正文完
 0