1.基本信息
MSFE 全称为 MSHA-FRONT-END,由多活容灾产品(MSHA)产品提供的流量网关,负责⼊口流量的分发及路由。MSHA 产品架构上通常将业务系统自上而下分为接入层、应用层和数据层三层。而本文要介绍的 MSFE 主要工作在接⼊层,其核心是⼀个基于 Tengine 的多活组件。
MSFE需要多单元部署,它能承接所有的单元前端流量,并按照路由规则将流量分流到各个单元的后端应⽤。多活控制台提供MSFE集群新建、扩容、缩容等常规运维能⼒。
本⽂介绍如何配置MSFE。官⽹中,MSFE 的配置过程主要就是配置域名,或者ip的信息。 MSFE 是基于Tengine实现的,因此可以推测,我们可以利⽤ Nginx + lua ,或者openresty去实现相同的功能。
2.参考Apache APISIX动态路由的⽅案去实现 MSFE
为了实现路由动态配置,Apache APISIX 做了两件事:
- 在 Nginx 配置⽂件⾥⾯配置单个 server,这个 server ⾥⾯只有⼀个 location。我们把这个 location作为主⼊⼝,这样所有的请求都会⾛到这个地⽅上来。
- 我们⽤ Lua 完成路由分发的⼯作。Apache APISIX 的路由分发模块,⽀持在运⾏时增减路由,这样就能动态配置路由了。
3.⽅案设计
- 路由标提取⽅式:【多活接⼊⽹关】从HTTP请求信息中提取路由标的⽅式,⽀持从Parameter/Header/Cookie中提取。需要跟业务系统提前约定提取⽅式,并由业务系统将流量的路由标设置进HTTP请求约定key值中。当流量到达多活接⼊层后由接⼊⽹关进⾏提取识别,以便对流量进⾏路由计算和纠错处理。
- 路由标解析规则:⽤于定义如何解析路由标的逻辑,表⽰为对路由标的计算,解析规则分为精准和范围两类
- 精准:路由标解析逻辑没有限制
- 范围:解析逻辑⽣成的路由标固定落到⼀个数值范围中,如哈希、取模、截取等
- 路由规则:流量分配规则,与路由标解析规则相对应
- 精准:采⽤⽩名单的⽅式来配置各单元的路由标名单
- 范围:按照范围区间来配置各单元的路由规则
4.具体实现步骤
1). 获取http请求中的路由标,其值分为“精确”和“范围”两种。
- 从 Parameter 中获取,(demo已实现),路由标key为 “routeflag”,
- 从 Header 中获取,
- 从 Cookie 中获取,
2). 根据路由标解析规则计算,“精确”的情况设置⽩名单,“范围”的情况设置范围直接转发。
- 精确:实现⽩名单的功能,逐个对⽐转发,
- 范围:实现哈希值计算,将计算结果落⼊到某个范围中,按照落⼊区间转发
- (⽬前demo实现了进⼊判断之后,直接转发)
3). 实现转发功能。(即分流给后端的服务器)
- 利⽤ proxy_pass 转发,在 server 层⾯,(demo已实现)。
- 利⽤ lua 代码调⽤ nginx 函数进⾏转发