标题出现了三个关键词:全球化、多租户、七层流量转发。我们倒序介绍这三个词,最后再通过一张架构图展开理解所谓的全球化架构。
本篇介绍的内容会比较浅显,目的是让大家通过阅读本篇文章能够对全球化架构有所了解,不会涉及到公司的内部技术。
首先是七层流量转发,七层即七层网络模型中的第七层:应用层,如http协议、websocket协议、自定义协议。常见且大家熟悉的七层流量代理如Nginx。
通常七层流量代理之前还会有一层四层流量代理实现负载均衡,如LVS、Nginx,Nginx可用作四层流量代理,也可用作七层流量代理。
本篇的七层流量代理主角是BFE。
那么什么是BFE?
BFE(百度统一前端)是百度开源的七层流量接入转发平台。开源部分为BFE的核心转发引擎,因此很多功能还需要二次开发。BFE主要提供以下功能:接入和转发(仅支持主流协议)、流量调度(负载均衡、限流、路由)、安全防攻击、日记数据分析。
为什么选择BFE而不是Nginx?相信大家都会有这样的疑问,我们带着这个问题阅读本篇内容。
多租户,即一个七层流量转发平台支持多个用户使用,这些用户共享硬件资源,但每个租户都可以使用定制或自定义配置功能,相互之间不影响,并且应该支持一个租户的流量突增不会拖垮其它租户。
如果只是公司内部产品,通常多租户指的就是多个不同业务线的产品。一个电商平台可能有商城业务、物流业务,如果两个业务线的项目都接入七层流量转发平台,那么每个业务线就是一个租户。
开源BFE支持多租户,且限流支持全局限流和按租户限流。资源是有限的,必须通过限流手段限制每个租户可用流量,避免一个租户流量突增或其它原因导致的流量不正常突增而影响其它租户。
全球化,并非指在中国区域内部署一套系统,全球各个角落都能访问,而是需要在全球多区域多机房部署系统,借助CDN、AnyCast调度流量到用户所在区域的最近机房。
如中国用户的流量全部调度到中国境内的机房,如果中国境内也部署多机房,也会选择离用户最近的机房。但并非每个国家都有机房部署系统,例如亚太地区只会部署一套系统,所有亚太地区的用户流量都会调度到亚太地区机房。
由于是多租户架构,并非每个租户都会在各个区域部署一套系统,因此还需要七层流量转发平台支持跨区域流量调度。
当流量调度到用户所在区域的七层流量转发平台,而该区域下并未部署该租户的服务时,就需要七层流量转发平台能够发现就近区域的服务,将流量跨区域转发到就近区域的七层流量转发平台。
与RPC一样,七层流量转发平台需要将流量转发给后端服务,就需要实现服务注册与发现功能,这也是BFE没有提供的。后端服务需要主动注册到区域内的注册中心,七层流量转发平台从注册中心发现服务。
要支持跨区域流量调度就必须要让部署在每个机房的七层流量转发平台能够自动的发现其它区域注册中心注册的服务,这就需要注册中心也支持跨区域数据同步,而这属于数据同步的全球化架构范围,本篇不做分析。
为什么要跨区域转发流量,而不是直接让用户连接到目标区域机房?
如果理解CDN的用途就不难理解这个问题。用户到边缘节点的网络是比较稳定的,用户就进接入能够保证网络稳定。而接入边缘节点后跨区域流量调度走的是内网专线,相当于从高速公路上了高铁,虽然物理距离没变,但乘坐高铁的速度更快,也不会堵车。
这种七层流量转发平台跨区域流量调度也叫东西向路由,指服务到服务间的路由,与之对应的还有南北向路由,指客户端流量到服务端的路由。BFE支持很多路由规则的配置,如前缀路由、host路由等,有兴趣可以了解下BFE。
以下是基于BFE画的一个简易版全球化流量调度架构图。
流量接入与转发流程分析:
客户端App启动时根据内置的BFE域名通过CDN接入就近区域的BFE;
BFE根据租户信息按:
租户(对应bfe中的概念:产品)
-> 服务(对应bfe中的概念:集群)
-> 机房(对应bfe中的概念:子集群) 进行路由,
如果当前区域未发现服务,则通过跨区域流量转发到其它注册有该服务的区域的BFE;
最后负载均衡从机房下的集群选项一个服务实例转发流量。
当然,这是比较简单的实现。
前文提到的问题:为什么不使用Nginx之类的七层流量代理?
Nginx功能过于简单,基于Nginx开发成本更高。
为什么选择BFE?并且还需要二次开发?
BFE基于GO语言开发,语法简单,性能优秀,并且BFE已经提供好实现多租户、多协议的接入转发框架,扩展性好。
BFE只开源了核心的接入转发框架,实际上很多工作都需要进行二次开发。包括多租户资源调度、配置管理、限流扩展支持按握手次数与按连接数限流,扩展支持历史遗留项目的各种自定义协议,支持长连接,支持h5等。
本文转载自微信公众号「Java艺术」,可以通过以下二维码关注。转载本文请联系Java艺术公众号。