Skip to content

feat: How to make apisix be the gateway for tars #6570

Open
@zhixiongdu027

Description

@zhixiongdu027

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:

  1. Limited exposed ports
  2. 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

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions