查看原文
其他

为什么BFE可以取代Nginx – 从设计的视角

Miles Zhang BFE开源项目 2024-04-14

    


    今年6月份我们发表了《为什么BFE可以取代Nginx》。有些同学说,那篇文章只讲了BFE在使用Go语言方面的优势,这不是BFE优势,而是编程语言的优势

    这个意见提的很对。我认为BFE有两大“基因优势”,一个来自于Go语言,一个来自于BFE的设计思想。今天就来重点讲讲第二点。

    在202112月发布的BFE:企业级负载均衡软件》(PPT及视频)中,关于“BFE为什么是企业级软件”做了详细的介绍,可以概括为以下四点:

(1)高安全性和稳定性

(2)功能快速开发能力

(3)对复杂场景的支持能力

(4)对运维友好性的支持


  1. 1. 高安全性和稳定性

    BFE的优势已经在《为什么BFE可以取代Nginx》及《稳定才是负载均衡的第一需求》中详细说明,这里不再赘述。

    这方面可以总结为一句话,BFE在安全性和稳定性方面可以碾压Nginx!


  1. 2. 功能快速开发

    BFE的插件化机制已经在《BFE编写扩展插件回调点》及《如何为BFE开发扩展模块》中说明。

    Nginx也有很强大的插件化机制。但是由于Go语言代码更容易编写和维护,BFE在功能的快速开发方面还是有明显的优势。如果仅考虑编码和调试的成本,BFENginx相比,研发效率的提升大概为4-5倍。


3. 复杂场景支持

多租户支持

    BFE从诞生的第一天起,就是为构建多租户的流量转发平台而设计的,为多租户提供了原生支持。而Nginx最初是为单业务的Web Server场景而设计,在扩展成为七层负载均衡后,仍然不支持多租户。在Nginx内,多个租户的配置混杂在一起,提高了配置管理的复杂性,也难以保证配置变更的安全性。

路由转发模型

    BFENginx在路由转发模型方面的对比已经在《BFENginx有什么差异?- 转发模型的对比》中做了详细的说明。BFE的设计中考虑了复杂业务场景的需求,可以支持复杂的转发规则,支持多数据中心和多容器云调度场景

    在20228月,我们对于BFE的转发表做了一次较大的升级(详见《BFE转发表的升级说明》)。在这次升级后,BFE既可以支持以域名和路径作为匹配条件的大量规则,也可以继续保持对于转发条件的强大描述机制

    另外,针对Nginx路由转发中所常用的正则表达式的问题,BFE研发了“条件表达式”,既解决了正则表达式难以维护的问题,也避免了正则表达式所存在的性能隐患。详细说明见《上医治未病:BFE对正则表达式的思考》。


4. 运维友好支持

    从企业级的需求场景出发,在BFE的设计中,充分的考虑了系统可观测性和配置热加载的需求。

系统的可观测性

    BFE内,存在上千个状态探针埋点,可以充分反映系统的健康情况。对比来看,Nginx能够提供的内部状态信息要少的多。在《如何为BFE开发扩展模块》中也介绍了如何在开发扩展模块时向外展示模块的内部状态信息。

    BFE为可观测性所研发的系统库也可以被其它Go语言的后台程序使用。有兴趣的同学可以查看《深入理解BFE》(https://github.com/baidu/bfe-book)中的第十三章“监控机制”。

配置热加载

    对于一个要同时服务很多不同业务的平台型系统来说,高效而无损的配置热加载能力非常重要。

    在配置热加载方面,BFE一方面将配置文件做了切分,以尽量降低单个配置文件热加载对系统的影响(这么做的一个副作用是配置文件的数量较多,提高了学习和维护的成本,这个问题可以通过使用BFE控制面系统来解决);另一方面,基于多线程的模型,BFE可以保证配置热加载不会影响处理中的请求或连接

    Nginx对于配置热加载的处理没有那么友好。任何配置内容的修改,都会引起所有配置内容的重新加载,配置热加载的开销较大。而对于Nginx开源版本来说,配置热加载还会导致正在处理中的长连接的中断


5. 总结

    本文从系统设计思想的角度,再次说明了“为什么BFE可以取代Nginx”。

    相关机制的详细讲解,可以查看位于B站的视频“深入理解BFE(在B站搜索“深入理解BFE”,视频存档于“云原生社区”,也可以点击本文左下方的“阅读原文”观看 )

    必须要说明,虽然这里对于NginxBFE做了“非常残酷”的对比,但是我们非常尊敬Nginx及其作者的历史成就(见《NginxIgor Sysoev致敬》)。Nginx是一个伟大的系统,BFE要好好的向Nginx学习

    纵观历史,无论一个技术、一种产品曾经多么流行、多么强大,如果其不符合技术发展的趋势,最终都会被淘汰,这样的故事一再上演!(见《“软件化”是负载均衡发展的必然趋势》)。正是因为一代代工程师的前仆后继,才使得互联网的技术快速向前进化。未来也一定会有新的方案来取代BFE,让我们拭目以待!

    

    要了解BFE开源项目的设计原理、技术细节和使用方法,可以在下方扫码购买《万亿级流量转发:BFE核心技术与实现》,或查看在线免费版本https://github.com/baidu/bfe-book 


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

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

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

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