查看原文
其他

为BFE编写扩展插件(1) – 回调点

BFE开源项目 BFE开源项目 2024-04-15



扩展插件机制是所有现代化的七层负载均衡开源软件都具有的能力。通过扩展插件机制,可以很方便的为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-book 的在线图书。





    虎年春节就要到了,提前拜个早年,预祝大家虎虎生威,虎年大吉






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


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存