查看原文
其他

如何为BFE开发扩展模块

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

    在《为BFE编写扩展插件(1) – 回调点》一文中,已经介绍了BFE的回调点机制。在此基础上,本文将以mod_block的实现作为例子,说明如何为BFE开发扩展模块。

    mod_block的代码位于Github中BFE开源项目的 /bfe_modules/mod_block 目录。

    在为BFE编写一个新的模块时,需要考虑以下方面:

  • 配置的加载

  • 回调函数的编写和注册

  • 模块状态的展示


1. 配置的加载

(1) 配置的分类

    对于一个模块,包括两种配置:

  • 静态加载的配置:在BFE程序启动的时候加载

    • 对每个模块有一个这样的配置文件

    • 配置文件的名字和模块名字一致,并以.conf结尾

    • 如:mod_block.conf

  • 可动态加载的配置:在BFE程序启动的时候加载,在BFE运行过程中也可以动态加载

    • 对每个模块可以有一个或多个这样的配置文件

    • 配置文件的名字一般以.data结尾

    • 如:在mod_block下有 block_rules.data 和 ip_blocklist.data

    对于每一个配置文件,应编写独立的加载逻辑。

(2) 配置文件的放置

  • 模块的配置文件,应该统一放置于/conf目录下为每个模块独立建立的目录中

  • 如:mod_block的配置文件,都放置在/conf/mod_block中

(3) 配置加载的检查

    无论对于静态加载的配置,还是对于可动态加载的配置,为了保证程序正常的运行,在配置加载的时候,都需要对于配置文件的正确性进行检查。

  • 在BFE程序启动阶段,如果模块的配置文件加载失败,则BFE无法启动

  • 在BFE程序启动后,如果模块的可动态加载配置文件加载失败,BFE仍然会继续运行

(4) 配置的动态加载

    对于可动态加载的配置,需要在BFE用于监控和加载的专用web server上做回调注册。这样,通过访问BFE对外监控端口的特定URL,就可以触发某个配置的动态加载。

    例如,在mod_block的初始化函数中,可以看到类似下面的逻辑,就是在注册配置加载的回调(详见mod_block.go):


2. 回调函数的编写和注册

(1) 回调函数的编写

    根据模块的功能需求,选择合适的回调点,对应编写回调函数。

    注意,对于不同的回调点,回调函数的形式可能不同。BFE所提供的回调点和回调函数的形式,可参考《为BFE编写扩展插件(1) – 回调点》。

    例如,在mod_block中,编写了以下两个回调函数(详见mod_block.go):

(2) 回调函数的注册

    为了让回调函数生效,需要在模块初始化的时候对回调函数进行注册。

    例如,在mod_block中,回调函数的注册逻辑如下(详见mod_block.go):


3. 模块状态的展示

    对于每个BFE的模块,强烈推荐通过BFE规定的机制,向外暴露足够的内部状态信息。

在模块对外暴露内部状态,需要做以下3步:

  • 定义状态变量

  • 注册显示内部状态的回调函数

  • 在代码中插入状态设置逻辑

(1) 定义状态变量

    需要首先设计在模块中需要统计哪些值,并通过结构体成员变量的方式定义出来。

    如,在mod_block中,有如下定义(详见mod_block.go):

    然后,要在ModuleBlock中定义一个类型为ModuleBlockState的成员变量,还需要定义一个Metrics类型的成员变量,用于相关的计算。

    然后,需要在构造函数中做初始化的操作

(2) 注册显示内部状态的回调函数

    为了可以通过BFE的监控端口查看模块的内部状态,需要首先实现回调函数。

    如,在mod_block中,有如下逻辑(详见mod_block.go),其中monitorHandlers()是回调函数:

    然后,在模块的初始化时,需要注册这个回调函数

(3) 在代码中插入统计逻辑

    在模块的执行逻辑中,可以插入一些统计的代码。

    如,在mod_block中,可以看到如下代码(详见mod_block.go):


4. 总结

    基于BFE的扩展插件机制,可以很容易的为BFE扩展功能。欢迎大家尝试为BFE编写扩展模块。如果感觉所开发的扩展模块有一定通用性,也欢迎将代码提交到BFE开源项目,以便更多的人可以使用。


    本文的内容大部分来自于《万亿级流量转发:BFE核心技术与实现》。要了解BFE开源项目的设计原理、技术细节和使用方法,可以扫码购买,或查看在线免费版本https://github.com/baidu/bfe-book (可通过点击本文左下方的“阅读原文”访问)


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


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

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

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