负载均衡模式
在v3.0.1版本后才支持,最初在设计上没有考虑到这一点,后面有同学反馈了这一个场景后便补充了这个功能
这个功能可以支持到根据设置的负载模式,来决定在规则匹配前进行模式选择,目前有两种模式,项目默认选用host,这个设置是对全负载策略生效,不进行区分
host: 优先匹配host,再匹配不同策略下的规则 api : 优先匹配规则,再从匹配的规则中进行host匹配
负载均衡策略
对于负载均衡,目前分为五个负载策略,在负载时,会按照这个顺序进行负载,而每个策略分为两种模式 指定路由,随机路由。
URL负载 > 请求参数负载 > 请求COOKIE负载 > 请求头负载 > 请求Body负载
指定路由
一旦请求命中模式中的任意一条规则,即会路由到具体节点。
随机路由
一旦请求命中模式中的任意一条规则,不会路由到具体节点,而是在命中的服务中随机选取一个节点进行路由。
对于模式的不同,每个随机方式也是不相同,对于 URL随机负载
随机模式是根据当前请求url的长度设置随机种子,得到随机数进行随机负载。
对于 请求参数
,请求COOKIE
,请求HEADER
的随机负载,是根据当前命中的key的长度设置随机种子,得到随机数进行随机负载。
正则匹配自定义
API策略和Body策略,是支持每条规则自定义正则匹配模式的,目前支持一下几种。其他几种策略暂不支持
tl_ops_match_mode = {-- api匹配模式
-- 精准匹配模式
all = "all",
-- 正则匹配
reg = "jo",
-- 正则忽略大小写
regi = "joi",
-- 最长字符串匹配
regid = "joid"
}
API路由虚拟前缀
这个场景也是有小伙伴反馈的,目前已支持在路由后将请求转发到具体服务下的具体路径,比如有这样几个规则
/open-api/order-api/*
- 订单服务节点1
/open-api/product-api/*
- 产品服务节点1
/open-api/member-api/*
- 会员服务节点1
那么对应的 /open-api 作为虚拟前缀, /order-api/* 作为订单服务下的所有接口,这样可以方便的统一多个服务的对外统一接口
静态资源路由
目前支持静态文件资源路由配置,需要结合page_proxy插件开启使用
首先需要配置好api路由策略,其次在插件配置页面设置好对应路由需要分发的静态资源路径即可。
在文件中的配置
在文件中的配置需注意的是,如果sync
插件为开启状态时,会有后台任务同步文件中的配置数据至store中,且是根据 id
来判定是否需要执行同步逻辑。所以需要保证文件中的配置的数据的id是具有唯一性的标识字段。
当然,此字段如果为关闭状态,静态规则将不会同步至store中,规则也就不会生效,
API策略
point = {
{
id = 1,
url = "/*", -- 当前url匹配规则
match_mode = match_mode.reg, -- 正则匹配模式
service = "tlops-demo", -- 当前url路由到的service
node = 0, -- 当前url路由到的service下的node的索引
host = "tlops1.com", -- 当前url处理的域名范围
rewrite_url = "", -- 当前url重写后的url
fake_prefix = "", -- 当前uri规则的虚拟前缀
api_type = api_type.api, -- 当前uri规则的类型
}
},
random = {
{
id = 1,
url = "/api", -- 当前url匹配规则
match_mode = match_mode.all, -- 精准匹配模式
service = "tlops-demo", -- 当前url路由到的service
host = "tlops1.com", -- 当前url处理的域名范围
rewrite_url = "", -- 当前url重写后的url
fake_prefix = "", -- 当前uri规则的虚拟前缀
api_type = api_type.api, -- 当前uri规则的类型
}
},
cookie策略
point = {
{
id = 1,
key = "_tl_session_id", -- 当前cookie匹配名称
value = { -- 当前cookie名称对应值列表
"ok","ok1","ok2"
},
service = "测试服务1", -- 当前cookie路由到的service
node = 0, -- 当前cookie路由到的service下的node的索引
host = "tlops1.com", -- 当前cookie处理的域名范围
}
},
random = {
{
id = 1,
key = "_tl_token_id", -- 当前cookie匹配名称
value = { -- 当前cookie名称对应值列表
"ok","ok1","ok2"
},
service = "测试服务1", -- 当前cookie路由到的service
host = "tlops1.com", -- 当前cookie处理的域名范围
}
},
参数策略
point = {
{
id = 1,
key = "_tl_id", -- 当前请求参数匹配名称
value = { -- 当前请求参数对应值列表
"ok","ok1","ok2"
},
service = "测试服务1", -- 当前请求参数路由到的service
node = 0, -- 当前请求参数路由到的service下的node的索引
host = "tlops1.com", -- 当前请求参数处理的域名范围
}
},
random = {
{
id = 1,
key = "_tl_name", -- 当前请求参数匹配名称
value = { -- 当前请求参数对应值列表
"ok","ok1","ok2"
},
service = "tlops-demo", -- 当前请求参数路由到的service
host = "tlops1.com", -- 当前请求参数处理的域名范围
}
},
请求头模式
point = {
{
id = 1,
key = "content-type", -- 当前请求头匹配名称
value = { -- 当前请求头名称对应值列表
"text/fragment+html","text/plain"
},
service = "tlops-demo", -- 当前请求头路由到的service
node = 0, -- 当前请求头路由到的service下的node的索引
host = "tlops1.com", -- 当前请求头处理的域名范围
}
},
random = {
{
id = 1,
key = "content-type", -- 当前请求头匹配名称
value = { -- 当前请求头名称对应值列表
"text/fragment+html","text/plain"
},
service = "tlops-demo", -- 当前请求头路由到的service
host = "tlops1.com", -- 当前请求头处理的域名范围
}
},
请求body模式
point = {
{
id = 1,
body = "iamtsm", -- 当前url匹配规则
match_mode = match_mode.reg, -- 正则匹配模式
service = "tlops-demo", -- 当前url路由到的service
node = 0, -- 当前url路由到的service下的node的索引
host = "tlops1.com", -- 当前url处理的域名范围
}
},
random = {
{
id = 1,
body = "iamtsm", -- 当前url匹配规则
match_mode = match_mode.all, -- 精准匹配模式
service = "tlops-demo", -- 当前url路由到的service
host = "tlops1.com", -- 当前url处理的域名范围
}
},
在管理台配置
URL模式
请求参数模式
COOKIE模式
请求头模式
请求body模式