Nginx module dev: loadbalancer vs upstream handler options

First time here, was looking at supporting http protocol (using nginx)
over our custom zeromq server talking protocol buf. Read the excelled
tutorial by Evan and was also looking at few similar plugins to get an
idea.

One confusion I have is, I see some plugins like memcache/redis ones
where the http request and response parsing is done by upstream handler
modules, while I also see some modules like
GitHub - openresty/drizzle-nginx-module: an nginx upstream module that talks to mysql and drizzle by libdrizzle where the
request/response handling is done by peer.init_upstream class of
functions. My typical flow would : parse http request → convert to
protobuf request object → send to zmq server → {nginx event
notification} → convert protobuf response back to http response →
respond to client.

I can imagine doing all the request/response handling during connection
send/receive part or by registering create_request,process_header ,
filter hooks. Is there any guideline on which is the right approach. (I
have seen GitHub - FRiCKLE/ngx_zeromq: ZeroMQ transport for nginx , not exactly what I
want)

Thanks

Jai

Hello!

On Wed, Mar 12, 2014 at 12:31:42PM -0700, Jayadev C wrote:

GitHub - openresty/drizzle-nginx-module: an nginx upstream module that talks to mysql and drizzle by libdrizzle where the
GitHub - FRiCKLE/ngx_zeromq: ZeroMQ transport for nginx , not exactly what I want)

The peer.init_upstream callback is to initialize balancing
metadata, not to implement any protocol-related details.

Correct approach to implement your own protocol on top of the
upstream module is to use create_request/process_header/etc
callbacks.


Maxim D.
http://nginx.org/