协议代理服务,支持 tars-tars
协议,tars-tup
协议和 tars-json
协议。
主要有两个应用场景
- 作为
tars
协议的转发接入; - 跨 IDC 的
tars
请求透明转发。
除了支持基本的协议转发,还能够做被调用的服务及接口 ip 授权。
在第四层网络上工作,直接获取 buffer 并解析 Tars 请求包,根据请求包包体字段信息进行转发。请求包和响应包格式可以参见官方文档中的消息格式部分。
配置文件 ProtocolProxyServer.conf
用于配置代理服务,与 TARS 服务 conf 文件格式一致,采用 xml
风格。
根节点为 conf
节点,可以配置属性 tarsping_interval
,用于配置心跳请求的间隔,单位为秒,0
表示不启用心跳,如下
<conf>
tarsping_interval=10
...
</conf>
conf
节点下可配置 proxy
, proxy_conn
, auth
节点,分别是代理配置,长连接配置和鉴权黑白名单配置。
proxy
节点下可以配置服务 Obj 的代理信息,根据配置直接转发,而不从主控获取。主要用在网络出局,即集群内部服务通过该 proxy 转发调用集群外部服务。
<conf>
...
<proxy>
Test.SumClientServer.SumClientObj1=Test.SumClientServer.SumClientObj@tcp -h 172.16.8.147 -t 60000 -p 10032
</proxy>
...
</conf>
通过 proxy_conn
节点可以配置需要保持长连接的 Obj,会轮训发心跳,保持连接活跃,主要用在请求量非常少且走外网转发的场景,避免偶尔外网连接建立失败而影响业务调用。
<conf>
...
<proxy_conn>
Test.GetSum22Server.GetSumObj = Base.ProtocolProxyServer.TarsProxyObj@tcp -h 172.16.8.115 -t 60000 -p 8888
</proxy_conn>
...
</conf>
auth
节点可以添加 IP 鉴权配置信息,包含属性 on_off
, 值为 on
时表示开启访问控制,off
表示关闭。
auth
节点下可以添加若干节点,方便按业务划分,不同节点名只要不重复即可,没有实际含义;也可以设置全局配置,在 auth
节点下配置属性 ip_white_list
和 ip_black_list
,分别为 IP 白名单和黑名单。
<auth>
# 是否打开ip授权,on 打开,off 关(关闭的时候,任何ip可以访问集群内的任何服务,一般只有内网转发才会这么配置)
on_off=off
# 按业务配置,方便管理,这里业务名没有实际含义,只要不重复即可
<test_buss_1>
# obj = white ip
Test.GetSumServer.GetSumObj=124.74.236.120|124.74.236.122
</test_buss_1>
<news>
News.HelloServer.HelloObj=124.74.236.11|124.74.236.12
</news>
# 全局添加ip白名单,黑名单
ip_white_list=1.1.1.1|2.2.2.2
ip_black_list=3.3.3.3
</auth>
完整的配置文件如下
<conf>
tarsping_interval=10
<proxy>
Test.SumClientServer.SumClientObj1=Test.SumClientServer.SumClientObj@tcp -h 172.16.8.147 -t 60000 -p 10032
Test.TestServer.TestObj=Test.TestServer.TestObj@-h 192.168.242.176 -p 8888 -t 60000
</proxy>
<proxy_conn>
Test.GetSum22Server.GetSumObj = Base.ProtocolProxyServer.TarsProxyObj@tcp -h 172.16.8.115 -t 60000 -p 8888
</proxy_conn>
<auth>
on_off=off
<test_buss_1>
Test.GetSumServer.GetSumObj=124.74.236.120|124.74.236.122
</test_buss_1>
<news>
News.HelloServer.HelloObj=124.74.236.11|124.74.236.12
</news>
ip_white_list=1.1.1.1|2.2.2.2
ip_black_list=3.3.3.3
</auth>
</conf>
协议代理服务本质上也是一个 Tars 服务,因此部署过程与一般的 Tars 服务类似。
执行以下命令编译服务并生成发布包
mkdir build
cd build
cmake ..
make
make tar
协议代理服务需要一些额外的配置,我们需要新增一个模板。
在 TarsWeb 页面的 运维管理 -> 模板管理
中点击 新增模板
,弹出窗口中
模板
可以自定,这里我们填写Base.ProtocolProxyServer
;父模板名
选择tars.default
;模板内容
中填写如下内容
<tars>
<application>
<server>
deactivating-timeout=3000
openthreadcontext=0
threadcontextnum=10000
threadcontextstack=32768
</server>
<client>
sync-invoke-timeout=5000
async-invoke-timeout=20000
sample-rate=1000
max-sample-count=100
sendthread=1
recvthread=1
</client>
</application>
</tars>
点击 确定
即可生成模板。
在 TarsWeb 页面的 运维管理 -> 服务部署
中
- 应用名:
Base
- 服务名:
ProtocolProxyServer
- 服务类型:
tars_cpp
- 模板:
Base.ProtocolProxyServer
(上节新建的模板) - OBJ:
TarsProxyObj
- 协议:
非TARS
其他默认即可,端口可以自动生成,但这里建议固定端口(8300),方便业务方配置使用。如下
前面提到的配置文件,需要上传到配置中心,使服务启动时能够拉取相关的代理配置。
在 TarsWeb 页面进入 ProtocolProxyServer
的服务配置,点击 添加配置
在弹出窗口填写文件名和代理配置内容
点击 确定
即添加完成。
在 TarsWeb 页面对应服务的 发布管理
中上传服务发布包并发布服务,服务成功发布即 Tars 协议代理服务部署成功。