Thrift proxy code contribution

Maxim Dounin mdounin at mdounin.ru
Fri Jul 10 14:30:03 UTC 2020


Hello!

On Tue, Jul 07, 2020 at 02:45:00PM +0000, 魏俊杰 Junjie Wei wrote:

> 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.

I don't see any problems with publishing your code as a module for 
nginx.  Changes you've mentioned in nginx itself should be 
relatively easy to avoid.

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

That's completely up to you.  If you don't, it might be a good 
idea to outline somewhere in the documentation that your module 
has known bugs and cannot be used with some event methods.

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx-devel mailing list