Description
Issue description
Feat: How to make apisix be the gateway for tars
Background:
TARS is a Linux Foundation project. It is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented
hosting-service via flexible schedule.
Now I want to implement Tars proxy function with apisix, and make apisix be the gateway for tars
What does it look like:
a service discovery plugin (can both work in http module and stream module)
rpc calls to tars are addressed through servants. this discovery plugin will provide translation services from servants to nodes, like:
local function discovery.nodes("Test.TestServer.HelloObj")
return {
{ host = "172.16.8.33", port = 12334, weight =100,},
{ host = "172.16.8.33", port = 12334, weight =100,},
}
end
a tars http proxy
There are two problems in providing tcp services externally:
- Limited exposed ports
- Poor synergy with different frameworks
So there needs to be a gateway to provide http->tcp conversion and proxy
Tars already has an official TarsGateway to do this work, I will refer to it to implement APISix Tars Proxy
a tars tcp proxy
It is also necessary to support tcp proxy:
- RPC request proxy in the environment of internal and external network isolation
- gateway can support server push
How to use this:
discovery configuration as follows:
discovery:
tars:
db_conf:
host: 172.16.1.99
port: 3306
database: db_tars
user: tars
password: tars2022
http proxy configuration as follows:
configuration format is based on TarsGateway, with slight changes
tars-proxy:
hosts: [ "*.tars.com","a.rpc.com" ]
tup_uri: /tup
json_uri: /tup-json
auto_proxy: false
default:
balancer: chash
hash_on: head
key: XGUID
timeout:
connect: 1000
send: 1000
read: 1000
discovery: tars
forward_headers: [ "XGUID","REMOTE_IP" ]
proxy:
hello:test:
servant: Test.TestServer.HelloObj
nodes:
- host: 172.16.33.8
port: 9927
hello:
servant: Test.TestServer.HelloObj
sum:
servant: Test.GetSumServer.GetSumObj
balancer: roudrobin
user:
servant: Test.UserServer.LoginObj
forward_headers: [ "GUID","token" ]
tcp proxy configuration as follows:
todo