百度智能云章淼:详解企业级七层负载均衡开源软件BFE

2023-11-19

随着云计算和云原生的发展,七层负载均衡得到了越来越多的关注,同时也出现了很多不同的解决方案。BFE是基于Go语言编写的七层负载均衡开源软件,在2020年6月被CNCF接受为“沙盒项目”,成为中国第一个网络方向的CNCF开源项目。

2022年7月27日,在由开放原子开源基金会主办的“2022开放原子全球开源峰会”上,百度智能云资深研发工程师、BFE开源项目发起人章淼带来了《BFE:企业级七层负载均衡开源软件》的主题演讲。

BFE在百度的应用

对于企业来说,流量转发服务实际就是把服务高效地交付给终端用户。

上图展现了百度是如何将BFE用于整个流量转发的,有四道主要的系统。

  • 全局流量调度系统GTC:在网络入口对外网流量进行调度,基于DNS生效;

  • HTTPDNS:支持移动域名解析;

  • BGW:四层负载均衡;

  • BFE:七层负载均衡,支持多机房集群粒度的流量调度。

负载均衡技术的发展趋势

用软件替代硬件

使用软件替代硬件这件事情在互联网公司已经发生了超过十年的时间,但很多传统的行业还在大量使用硬件设备。当前,硬件所提供的负载均衡功能,可以用软件全部实现,相比之下硬件并不占优势。那软件有什么好处呢?

  • 降低成本;

  • 可快速升级功能;

  • 云原生化,可快速扩缩容。

从系统到服务

现在的企业都在使用开源软件,但并没有形成统一的云化服务。很多企业对于每个独立的业务都搭建了独立的开源软件集群,有的甚至达到上百套,对于这样的庞大数量,该如何有效地做运维成为难题。

为此,我们做了多次实验,最终在内部实现了基于BFE搭建的平台型的服务,实现了从负载均衡系统升级到流量转发服务,同时支持多用户模型,实现资源共享,降低维护成本。

加强七层处理能力

百度非常重视七层处理,很多企业没有统一的七层转发,只有四层,这对流量的控制能力是非常弱的。当前很多流量是加密的,而四层处理无法看到这些流量特征。

通过建立统一的七层负载均衡,能够在企业层面增强流量控制能力、增强数据分析和洞察能力,进而提升整体服务质量。

加强流量调度能力

当前云原生的发展如火如荼,微服务化后,服务的数量会呈爆炸性增长,这就对应用路由的能力提出了更高的要求。此外,当前企业的场景变得越来越复杂,具有多个数据中心、多个容器云集群,那么容器云之间如何进行流量调度是一个非常关键的问题。

BFE:为企业级场景而设计

BFE是针对与百度类似的复杂企业级场景而设计的,它具有以下四个特点。

稳定是负载均衡的第一需求,但当前很多工程师认为性能是最关键的,我想说这个观点是错误的。与K8s相比,Go语言在安全性、稳定性及研发效率方面具有极大的优势,可以大大降低内存管理的风险、捕捉异常。

BFE具有良好的插件设计,同时Go语言代码具有易于编写和维护的特点,这都利于功能在后期进行快速开发。

BFE内置多租户设计,具有强大的路由转发模型,支持多数据中心调度支持。

写出负载均衡的软件并不难,如何保证7x24小时的高效运维才是难点所在。对此,BFE提供一些系统支持,如内置大量状态探针、支持配置无损动态加载等。

  • 高安全性和稳定性

  • 功能快速开发

  • 复杂场景支持

  • 运维友好支持

BFE的路由转发模型

如上图所示,该场景有三个数据中心,每个数据中心内都有BFE服务(S1)存在,请求的转发共有以下四个步骤。

demo.baidu.com => demo

/static => S1

=> S1-3

=> S1-3_1

  • Step 1:确定租户(tenant)

  • Step 2:确定集群(cluster)

  • Step 3:选择子集群

  • Step 4:选择实例(instance)

在确定服务或者集群时,BFE也提供了转发机制。

  • 基础转发表针对请求中的Host和Path字段进行匹配,这是一种高效的树型查找;

  • 高级转发表使用BFE独特的条件表达式,相比传统的正则表达式,它的可读性得到了极大的提升。

七层负载均衡生态对比

近年来,七层负载均衡的生态非常繁荣,有四大主流生态。

Nginx /OpenResty生态

  • OpenResty是对Nginx的一种扩展,可以利用Lua语言对Nginx功能做扩展;

  • 代表项目:

    Nginx、OpenResty、Kong、APISIX;

  • 特点:性能高、开源生态强,但稳定性、开发效率、转发延迟较低。

Envoy生态

  • Envoy是基于C++开发的七层开源软件,已经成为Service Mesh中Sidecar网关的重要候选系统;

  • 代表项目:Envoy;

  • 特点:性能高、开源生态强,但稳定性、开发效率、转发延迟较低。

Go语言生态

  • 代表项目:FFE、Traefik、Tyk;

  • 特点:稳定性、开发效率、开源生态强,但性能、转发延迟低。

Rust语言生态

  • 专注于Service Mesh方向,包含使用Rust语言开发的七层负载均衡软件;

  • 代表项目:Linkerd;

  • 特点:性能、稳定性高,但开发效率、开源生态弱,转发效率低。

BFE和Nginx对比分析

Go生态

优势:

  • 相比于Nginx和Envoy,Go生态在安全性、稳定性、研发效率方面都有碾压性优势;

  • 相比于Rust生态,Go生态在开发效率和开源生态方面有明显优势。

劣势:

Go生态在性能和长尾延迟方面有弱点。(注:长尾延迟对于用于一般场景无影响,但阻碍部分场景如实时交易,可以通过增加CPU资源来缓解。)

BFE和Nginx的性能对比

  • HTTP转发场景 : 极端场景下

BFE : Nginx = 1 : 5

  • HTTPS转发场景 : BFE配合RSA硬件加速卡

BFE(加速卡): Nginx(纯CPU)= 1 : 1

综合成本对比分析

场景假设:HTTP转发,100w QPS容量(已是很大规模的企业)

硬件成本对比:

  • BFE需要50台服务器,Nginx需要10台服务器;

  • BFE硬件成本每年增加92万元(单台服务器年度折旧为1.3万元,上架成本为1万元,BFE方案多用40台服务器)

人力成本对比:

对于一家具有100w QPS容量的公司,使用Nginx至少需要5名综合成本60万元以上的工程师,而是用BFE只需要2名。这意味着,BFE方案每年节省人力成本180万元以上。

机会成本对比:

  • 和Nginx相比,BFE出现稳定性和安全性问题的概率更低;

  • BFE可实现功能快速交付,和Nginx相比,交付周期缩短至4%。

结论:BFE的综合成本优于Nginx。

BFE对Kubernetes的支持

在K8s集群之内,BFE可以作为Ingress,且BFE Ingress已于2021年10月开源发布。

在K8s集群之外,BFE可以作为全局负载均衡器。

BFE控制面已经于2021年10月开源,为用户提供更完整可用的BFE开源产品,具有以下三个组件。

  • API Server:提供API接口,负责BFE配置的变更、存储和下发;

  • Dashboard:管理控制台,用于BFE集群的可视化管理;

  • Conf Agent:配置加载组件,从API Server获取最新配置,触发 BFE 进行配置热加载。

Q&A

Q:BFE在将来会不会考虑提供WebAssembly插件?

章淼:这是一个很好的问题,明确地说BFE不会支持。Nginx之所以要增加这种支持,原因在于它的底层开发成本太高了。但BFE使用Go语言,开发成本已经足够低,我们并不需要去引入Wasm来降低成本。同时,引入Wasm会带来稳定性降低的风险,这和我们要将稳定性、安全性放在第一位的原则是相悖的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度智能云章淼:详解企业级七层负载均衡开源软件BFE 的相关文章

  • 【视频编码学习】VTM15.0编译运行

    VTM版本 15 0 操作系统 Win10 x64位 IDE Visual Studio 2019 编译器 cmake 利用VS2019运行VTM15 0 前言 一 下载VTM15 0 二 下载安装cmake 1 下载cmake并安装 2
  • Java中的IO流如何理解——精简

    目录 引言 缓冲流 字节缓冲流 字符缓冲流 转换流 字符输入转换流 字符输出转换流 序列化和反序列化 对象序列化 对象反序列化 打印流 Properties 引言 通过前面的简单学习 我们已经能够大致了解了关于文件的操作 但是能够明显感受到
  • mybatis中pagehelper分页、排序

    原文链接 https blog csdn net liuyuanjiang109 article details 78955881 在springboot 结合mybatis 时用到pagehelper 分页工具 并进行分页 排序 其git
  • 安装 mysqldb for python

    1 安装 ssetuptools wget http pypi python org packages 2 6 s setuptools setuptools 0 6c9 py2 6 egg md5 ca37b1ff16fa2ede6e19
  • 常用GIT命令速览,现学也能登堂入室

    系列文章目录 手把手教你安装Git 萌新迈向专业的必备一步 GIT命令只会抄却不理解 看完原理才能事半功倍 常用GIT命令速览 现学也能登堂入室 系列文章目录 一 GIT HELP 1 命令文档 2 简要说明 二 配置 config 1 配

随机推荐

  • minio上传文件报错io.minio.errors.InvalidResponseException: Non-XML response from server

    上传文件报错io minio errors InvalidResponseException Non XML response from server 开发中上传文件到minio遇到问题 上传小于1M的文件成功 上传大于1M的文件失败 检查
  • 《算法图解》第九章动态规划学习心得

    1 背包问题 动态规划先解决子问题 再逐步解决大问题 每个动态规划都从一个网格开始 背包问题的网格如下 网格最初是空的 动态规划就是逐步将网格填满 吉他行 第一个单元格表示背包的容量为1磅 吉他的重量也是1磅 这意味着它能装入背包 因此这个
  • list类型的用法(含列表合并)

    编程中对于链表的处理通常都是比较麻烦的 C 的STL库中提供了list类型 大大方便了我们对链表的处理 不熟悉的小伙伴们快来了解 一定能为你的编程带来益处 list是双向带头循环链表 不同于之前讲过的vector 它不支持随机访问 即下标访
  • python提取两个引号中的内容,怎样用 Python 提取不在双引号的内容?

    三叔2016 11 11 13 30 281楼 import re a Peter d 13tsddgjlsv gt gt bgeghg n desfegeivm x wb rhwrohjow dddeuvb n dwegjosnngwei
  • C语言中的静态函数

    关于C中的static类型的函数是与extern类型相对的 也就是说函数的调用方式并没有改变 只通过这个关键字影响了linker的行为 下面在具体说说他们的区别 extern都知道 是指该函数在整个工程中可见 而static是指只在当前文件
  • STL : vector 矢量容器

    目录 Vector Capacity Elements access Modifiers Allocator Non member Notice overloads Template specializations Vector inclu
  • 业务流程图怎么画?3步+8张案例,5分钟教你快速上手!

    业务流程图能很好地帮助我们梳理业务 高效表达需求 尤其是产品经理在梳理业务时 经常会用到业务流程图 业务流程图会在产品经理画原型图前 帮助梳理产品业务流程 避免做无用功 今天从业务历程图的基本介绍 常用场景和绘制方法三方面介绍 让大家对业务
  • C11头文件声明了创建和管理线程,信号,条件变量的函数

    作者Danny Kalev 是通过以色列系统分析师协会认证的系统分析师 并且是专攻C 的软件工程师 Kalev 写了多本C 的书籍 同时给不同的软件开发者站点投搞C 文章 他是C 标准委员会的成员 还获得了通用语言学的硕士学位 原始鏈接 h
  • TypeError: can only concatenate list (not "str") to list

    类型错误 只能将list类型和list类型联系起来 而不是str类型 出现上述类型错误 判断一下需要连接的两个变量的类型 如果是将str类型加入list用append添加 如果是移除用pop或remove
  • Ubuntu 10.10下安装TFTP的步骤 tftp-hpa版本

    背景 由于想要在tq2440板子上用tftp下载kernel 所以要在自己的PC机的Ubuntu 10 10上安装tftp服务 所以就去网上找了些教程 但是很悲剧 按照那些教程去操作 结果还都是无法正常运行tftp服务 最后还是从一个外国人
  • 自己动手写CSDN博客提取器,提取文件保存支持PDF、doc、txt三种格式

    转载自 http blog csdn net w397090770 article details 7760907 下载地址http download csdn net detail w397090770 4438566 不需要积分 下面有
  • npm配置及.npmrc文件

    一 npm配置 1 npm cli 提供了npm config 命令进行npm相关配置 通过npm config ls l 可查看npm的所有配置 包括默认配置 2 npm config set 进行配置项修改 使用命令配置后会把配置文件中
  • POJ - 1129 Channel Allocation(染色问题)

    题意 AC代码 When a radio station is broadcasting over a very large area repeaters are used to retransmit the signal so that
  • Oracle RAC FailOver配置

    Oracle RAC FailOver配置 Oracle RAC主要为数据库的应用提供了HA High Available 的环境 HA体现在负载均衡 loadbalance 和容错 failover 两个方面 Oracle RAC 的Fa
  • Scala 的 Set集合详解

    目录 一 不可变长Set集合 1 Set的声明与遍历 2 Set的几个常用方法 intersect diff 操作符 filter过滤 二 可变长Set集合 三 Set的其他方法 Set集合的特点 元素存放无序 且不可重复 一 不可变长Se
  • c++:多态案例,电脑组装

    需求 include
  • 【Ansible初识】Linux系统之Ansible的基本介绍

    Ansible初识 Linux系统之Ansible的基本介绍 一 Ansible的介绍 1 Ansible简介 2 Ansible的特点 3 Ansible的原理 二 Ansible的架构 1 Ansible的架构图 2 Ansible的核
  • oracle数据库分区的几种方式

    范围分区 每个分区都由一个分区键值范围指定 对于一个以日期列作为分区键的表 2005 年 1 月 分区包含分区键值为从 2005 年 1 月 1 日 到 2005 年 1 月 31 日 的行 列表分区 每个分区都由一个分区键值列表指定 对于
  • IOS 访问系统粘贴板

    粘贴板提供了一种核心OS特性 用于跨应用程序共享数据 用户可以跨应用来复制粘贴 也可以设置只在本应用中复制粘贴用来保护隐私 UIPasteboard类允许访问共享的设备粘贴板以及内容 下面代码返回一般的系统粘贴板 它适合大多数一般的复制粘贴
  • 百度智能云章淼:详解企业级七层负载均衡开源软件BFE

    随着云计算和云原生的发展 七层负载均衡得到了越来越多的关注 同时也出现了很多不同的解决方案 BFE是基于Go语言编写的七层负载均衡开源软件 在2020年6月被CNCF接受为 沙盒项目 成为中国第一个网络方向的CNCF开源项目 2022年7月