百度智能云章淼:详解企业级七层负载均衡开源软件BFE
随着云计算和云原生的发展,七层负载均衡得到了越来越多的关注,同时也出现了很多不同的解决方案。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会带来稳定性降低的风险,这和我们要将稳定性、安全性放在第一位的原则是相悖的。
百度智能云章淼:详解企业级七层负载均衡开源软件BFE相关推荐
- php+laravel+百度智能云人脸识别详解
前提条件: 首先,要有一个百度云账号并获取到自己的App_Id.API_KEY.Secret_Key和创建好的人脸库名 1. 下载SDK composer require baidu/aip-sdk ...
- 详解OSI七层模型和TCP/IP模型
详解OSI七层模型 1. 详解OSI七层模型 1.1 详解每层结构 1.2 交换机和路由器的区别 1.3 集线器与路由器在功能上有什么不同 2. 详解TCP/IP模型 2.1 详解每层结构 2.2 O ...
- 负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解
负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负载均衡的基 ...
- 百度智能AI面相配置详解二
上次分享了百度智能AI面相配置教程,有的朋友在配置中出现报错.今天整理了一下常见问题: 1.如果访问模块出现下面的报错信息,是因为没有安装 SG11 扩展 由于程序使用PHP-SG11加密, 按照提示 ...
- HAproxy七层负载均衡——环境搭建及实现过程详解
实验环境 主机名 IP 服务 虚拟机server1 172.25.6.1 haproxy,httpd,服务端 虚拟机server2 172.25.6.2 httpd,php,客户端 虚拟机server ...
- HAproxy七层负载均衡——访问控制、动静分离、读写分离实现过程详解
实验环境 主机名 IP 服务 虚拟机server1 172.25.6.1 haproxy,httpd,服务端 虚拟机server2 172.25.6.2 httpd,php,客户端 虚拟机server ...
- 详解OSI七层网络模型 TCP/IP四层模型
@TOC这里对OSI七层网络模型和TCP/IP四层模型及其下的各层和TCP协议的设计核心做出总结供大家参考,如有错误欢迎指出讨论! OSI七层网络模型 & TCP/IP四层模型 OSI七层模型 ...
- python 百度云文字识别 proxy_python使用百度文字识别功能方法详解
介绍python使用百度智能去的文字识别功能,可以识别截图中的文,登陆路验证码等等., 登陆百度智能云,选择产品服务. 选择"人工智能"---文字识别. 点击创建应用. 如图下面有 ...
- 百度智能云实战——静态文件CDN加速
前言 互联网进入移动互联网时代后,产品形态有几次大的演进.最初,H5站点如雨后春笋般的出现,大量H5站点迅速占领PC市场,中期,为了追求极致用户体验,大量原生Android.IOS应用出现,为用户提供 ...
最新文章
- CCAH-CCA-500-4题:Where are Hadoop task log files stored?
- 利用Diferencia和Java微服务进行分接比较测试
- 基于MATLAB的信号与系统实验指导,《信号与系统及MATLAB实现》实验指导书
- swift textView字数限制,textView点击完成隐藏键盘
- 动态规划——单词拆分(Leetcode 139)
- 政务外网001---政务外网介绍
- C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解
- NodeJS收发GET和POST请求
- 复杂性,科学,方法论?
- 2019年上半年软件设计师上午真题及答案解析
- python中print格式_python中print输出格式有哪些
- mysql 黑名单_51ak带你看MYSQL5.7源码4:实现SQL黑名单功能
- 【初识AI】(一):ASR和NLP
- Redis的ZSET的实现及结合源码的跳跃表结构分析
- 计算机组成原理文华学院,华中科技大学文华学院计算机组成原理课设(11页)-原创力文档...
- 帮你抢小游戏流量红利——360小游戏接入指南
- 合作开发收费系统——临时表解决用户重复登录问题
- java常见面试题(含答案)
- oracle获取某年第一天和最后一天,Oracle取得本月、本年第一天和最后一天
- Rstudio手动安装程序包
热门文章
- Hadoop-HA高可用架构分布式环境搭建教程
- 三招让硬盘资料隐身 保护你的隐私
- ddr2是几代内存_如何区分DDR1 DDR2 DDR3内存条
- 下一个好莱坞巨头——计算机
- php的ct表现,图文详解丨气胸的影像学表现
- 2022年5月22日【Jiawei_Z】C# 基础教程---刘铁锰 02 委托 事件 继承
- 赵运泓: 12:3下周黄金行情走势分析
- SAP 公司代码全局参数设置及其意义
- [转]漫画:混乱的标记语言XHTML2/HTML5(附中文版翻译)
- 有了SQL Server 2005 JDBC还需要SQL Server 2000 JDBC吗?