<div dir="ltr"><div class="gmail_quote">Hello Folks,</div><div class="gmail_quote"><br><div dir="ltr"><div>When zeromq is use as rpc-backend, "nova-rpc-zmq-receiver" service needs to be run on every node.</div><div>
<br></div><div>zmq-receiver receives messages on tcp://*:9501 with socket type PULL and</div>
<div>based on topic-name (which is extracted from received data), it forwards data to respective local services, over IPC protocol.</div><div><br></div><div>While, openstack services, listen/bind on "IPC" socket with socket-type PULL.</div>

<div><br></div><div>I see, zmq-receiver as a bottleneck and overhead as per the current design. </div><div>1. if this service crashes: communication lost.</div><div>2. overhead of running this extra service on every nodes, which just forward messages as is.</div>

<div><br></div><div><br></div><div>I'm looking forward to, remove zmq-receiver service and enable direct communication (nova-* and cinder-*) across and within node.</div><div><br></div><div>I believe, this will create, zmq experience more seamless.</div>

<div><br></div><div>the communication will change from IPC to zmq TCP socket type for each service.</div><div><br></div><div>like: rpc.cast from scheduler -to - compute would be direct rpc message passing. no routing through zmq-receiver.</div>

<div><br></div><div>Now, TCP protocol, all services will bind to unique port (port-range could be, 9501-9510)</div><div><br></div><div>from nova.conf, rpc_zmq_matchmaker = nova.openstack.common.rpc.matchmaker_ring.MatchMakerRing.</div>

<div><br></div><div>I have put arbitrary ports numbers after the service name.</div><div><br></div><div>file:///etc/oslo/matchmaker_ring.json</div><div><br></div><div>    {</div><div>     "cert:9507": [</div><div>

         "controller"</div><div>     ],</div><div>     "cinder-scheduler:9508": [</div><div>         "controller"</div><div>     ],</div><div>     "cinder-volume:9509": [</div><div>

         "controller"</div><div>     ],</div><div>     "compute:9501": [</div><div>         "controller","computenodex"</div><div>     ],</div><div>     "conductor:9502": [</div>

<div>         "controller"</div><div>     ],</div><div>     "consoleauth:9503": [</div><div>         "controller"</div><div>     ],</div><div>     "network:9504": [</div><div>         "controller","computenodex"</div>

<div>     ],</div><div>     "scheduler:9506": [</div><div>         "controller"</div><div>     ],</div><div>     "zmq_replies:9510": [</div><div>         "controller","computenodex"</div>

<div>     ]</div><div> }</div><div> </div><div>Here, the json file would keep track of ports for each services.</div><div><br></div><div>Looking forward to seek community feedback on this idea.</div><div><br></div><div><br>

</div><div>Regards,</div><div>Yatin</div></div>
</div><br></div>