Thrift proxy code contribution

魏俊杰 Junjie Wei weijunjie at didiglobal.com
Tue Jul 7 14:45:00 UTC 2020


Hi Maxim Dounin, I'm glad to receive your reply.

The nginx directories are as follow:

auto
conf
contrib
docs
misc
objs
src
|-core
|-event
|-http
|-mail
|-misc
|-os
|-stream
|-thrift
  |-modules



Just like supporting tcp proxy, we developed a series of modules to support thrift protocol proxying.

No matter using or compiling, these modules are optional.


Config example:

worker_rlimit_nofile 204800;
worker_processes 1;?
error_log  logs/error.log error;
pid        run/nginx.pid;
http{
    ...
}
thrift {
    access_log logs/access.log;

    server {
        listen 8000;
        server_name counter; # counter is service name in thrift request
        location ping {      # ping is method name in thrift request
            proxy_pass ua;
 ?       }
    }

    upstream ua {
        server 127.0.0.1:8003;
    }
}?


Most of our codes are placed in thrift directory, which consists of 1 core module:

  1.  ngx_thrift_core_module

and other functional modules:

  1.  ngx_thrift_upstream_module

  2.  ngx_thrift_proxy_module
  3.  ngx_thrift_log_module
  4.  ngx_thrift_upstream_check_module:tcp active health check
  5.  ngx_thrift_upstream_keepalive_module
  6.  ngx_http_dynamic_upstream_module : using http request to change nginx upstream endpoint without reload nginx conf
  7.  ngx_thrift_limit_req_module
  8.  ngx_thrift_dynamic_req_module: dispatching request to different upstream accoding to request content

The only things we change in original nginx are:

  1.  build script in auto directory to support compile thrift proxy core framework code into nginx
  2.  macro constance like "#define NGX_LOG_DEBUG_THRIFT 0x800" in ngx_log.h, which is non-logical

Otherwise, we developed a standalone thrift procotol encoder/decoder and we preliminarily plan to publish it independently, which will be imported in nginx as a third party lib.

Do you think out thoughts are feasible? We are really looking forward for suggestions and opinions.

By the way, must out codes support other OS like Windows or other event mechanics like poll, select, kqueue?


Thanks!

Junjie Wei

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20200707/787c0095/attachment-0001.htm>


More information about the nginx-devel mailing list