BFE 初探

简介: BFE 初探

概述

什么是 BFE?一起来看下官方介绍。


BFE(Baidu Front End)是百度的一开源的应用负载均衡产品,目前已接入百度大部分流量,每日转发请求接近1万亿,峰值QPS超过1000万。在2019年百度春晚红包活动中,BFE平台在超大用户压力、数次流量波峰下平稳运行,保证了春晚红包活动的顺利进行。详情请查看 BFE 官网地址:https://www.bfe-networks.net,github 地址:https://github.com/baidu/bfe


BFE 源码是使用 GO 语言开发的,这篇文章我们一起来认识 BFE

我用 BFE 做什么?

我用 BFE 做网关,主要实现路由转发和过滤器,路由转发指的是,接收一切外部请求转发到后端微服务上,过滤器指的是,限流、鉴权、协议转化等等。

BFE 还支持 日志、链路、监控等等。

BFE 基本概念

两大概念:产品线和集群,见下图。

a209726c2a1af09463e646ac28eb90ec.jpg

能解决哪些问题?

场景一:比如前后端分离项目,前端需要请求两个服务(服务A 和 服务B),服务A 和 服务B 的域名是不同的,怎么解决这个问题?

第一反应使用 跨域资源共享 CORS 去解决,当然需要浏览器和服务器同时支持。

1、后台需要新增代码:

设置 Access-Control-Allow-Origin,必选,要么是自定义设置域名,要么是 * 。

设置 Access-Control-Allow-Methods,必选,设置允许请求的方法。

设置 Access-Control-Allow-Credentials,可选,是否允许发送 Cookie,默认情况下 Cookie 不包括在CORS请求之中。

设置 Access-Control-Expose-Headers,可选,设置其他的 Header 参数。

2、前端请求了两次(浏览器自动请求两次)

第一个请求是 OPTIONS 请求,也可以称为 “预检请求”,根据服务器返回的内容,判断服务器是否允许该请求访问。

第二个请求是 具体的 POST 或 GET 请求。

这个弊端是需要后端开发人员调整代码,同时浏览器请求两次,增加请求时间及服务器资源,还有没有更好的解决方案?有同学肯定会说 “设置 Access-Control-Max-Age 参数” 用来指定本次预检请求的有效期,单位为秒,比如设置 120s,表示在此期间内,不用发出另一条预检请求,你还有没有其他方案?

可以使用 BFE 路由规则 和 重写规则就能搞定!比如:前端项目为 abc.com,当访问 abc.com/service-a/xxx 请求到服务A,当访问 abc.com/service-b/xxx 请求到服务B。

场景二:开发了一个服务A,目前微服务是内网访问的,假设有一种场景外网的客户端项目需要请求这个微服务,你怎么解决这个问题?

1、外网客户端项目,请求自己项目的 API,然后 API 项目再去请求订单管理微服务,进行数据返回,这样的弊端是增加了 API 开发人员的工作量。

2、服务A 直接配置外网可以访问,这样的弊端是安全风险太大,如果使用签名访问,也存在安全风险,同时还增加了前端人员的工作量。

可在将域名解析到负载均衡(LB)上,然后负载均衡(LB)去找下游的 BFE 配置。

场景三:上线一个新需求,想让一部分用户继续用老版本,一部分用户开始使用新版本,如果用户对新版本没有什么反对意见 或 研发未收到重大的问题反馈,然后再逐步扩大范围,把所有用户都迁移到新版本上来?另外这个比例是需要动态配置的,怎么去解决这个问题?

可以使用 BFE 集群配置,设置子集群的分流权重。

上面的主要使用了 路由转发 和 集群配置。

路由转发 相关配置文件如下:

  • server_data_conf/host_rule.data(域名规则)
  • server_data_conf/route_rule.data(分流规则)
  • server_data_conf/cluster_conf.data(集群配置文件)
  • mod_redirect/redirect.data(重定向规则)
  • mod_rewrite/rewrite.data(重写规则)

集群配置 相关配置文件如下:

  • cluster_conf/cluster_table.data(集群实例列表)
  • cluster_conf/gslb.data(子集群负载均衡)

如何使用?

根据官方介绍的每个文件及每个文件的配置项,进行配置,配置完了记得进行重启,部分文件支持热加载的方式,进行更新。

后面会挨个介绍每个文件及其配置项。

小结

这篇文章主要是分享一些简单的介绍,初探,就先分享到这。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
Python 容器
Python collections模块之Counter()详解
Python collections模块之Counter()详解
605 3
|
8月前
|
弹性计算 监控 Linux
阿里云服务器网络性能测试方法:网络PPS、带宽和时延测试(图文测试结果)
本文介绍2026年阿里云ECS实例网络性能测试方法,涵盖PPS、带宽和时延测试,使用Netperf、sockperf等工具,图文详解操作步骤,帮助用户评估云服务器网络性能。
|
11月前
|
安全 NoSQL 中间件
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件AliEE”、“消息队列软件RocketMQ”、“云数据库Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。 此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
672 5
|
机器学习/深度学习 人工智能 算法
技术开源|FunASR升级第三代热词方案
技术开源|FunASR升级第三代热词方案
4977 62
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
922 12
|
前端开发 网络协议 Linux
通过hosts文件修改本地域名映射
hosts是一个没有扩展名的系统文件,windows系统里位置在 C:\Windows\System32\drivers\etc,macOS/Linux/iOS/Android位置在 /etc/hosts,其作用就是将一些常用的网址域名与其对应的IP地址建立一个映射关系
|
JavaScript 开发者 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
存储 算法
【树】数据结构——树和二叉树的概念&笔记
【树】数据结构——树和二叉树的概念&笔记
|
机器学习/深度学习 监控 数据可视化
数据分享|电信行业客户流失预测:KNN、朴素贝叶斯、逻辑回归、LDA/QDA、随机森林、支持向量机、CART、神经网络
数据分享|电信行业客户流失预测:KNN、朴素贝叶斯、逻辑回归、LDA/QDA、随机森林、支持向量机、CART、神经网络