[openstack-dev] [oslo][messaging][zmq] Discussion on zmq driver design issues
Doug Hellmann
doug at doughellmann.com
Wed Mar 4 18:21:38 UTC 2015
Thanks for pulling this list together, Oleksii. More comments inline. -
Doug
On Wed, Mar 4, 2015, at 12:10 PM, ozamiatin wrote:
> Hi,
>
> By this e-mail I'd like to start a discussion about current zmq driver
> internal design problems I've found out.
> I wish to collect here all proposals and known issues. I hope this
> discussion will be continued on Liberty design summit.
> And hope it will drive our further zmq driver development efforts.
>
> ZMQ Driver issues list (I address all issues with # and references are
> in []):
>
> 1. ZMQContext per socket (blocker is neutron improper usage of messaging
> via fork) [3]
It looks like I had a question about managing backwards-compatibility on
that, and Mehdi responded that he thinks things are broken enough ZMQ
can't actually be used in production now. If that's true, then I agree
we don't need to be concerned about upgrades. Can you add a comment to
the review with your impression of the current version's suitability for
production use?
>
> 2. Too many different contexts.
> We have InternalContext used for ZmqProxy, RPCContext used in
> ZmqReactor, and ZmqListener.
> There is also zmq.Context which is zmq API entity. We need to
> consider a possibility to unify their usage over inheritance (maybe
> stick to RPCContext)
> or to hide them as internal entities in their modules (see
> refactoring #6)
>
>
> 3. Topic related code everywhere. We have no topic entity. It is all
> string operations.
> We need some topics management entity and topic itself as an entity
> (not a string).
> It causes issues like [4], [5]. (I'm already working on it).
> There was a spec related [7].
>
>
> 4. Manual implementation of messaging patterns.
> Now we can observe poor usage of zmq features in zmq driver. Almost
> everything is implemented over PUSH/PULL.
>
> 4.1 Manual polling - use zmq.Poller (listening and replying for
> multiple sockets)
> 4.2 Manual request/reply implementation for call [1].
> Using of REQ/REP (ROUTER/DEALER) socket solves many issues. A
> lot of code may be reduced.
> 4.3 Timeouts waiting
>
>
> 5. Add possibility to work without eventlet [2]. #4.1 is also related
> here, we can reuse many of the implemented solutions
> like zmq.Poller over asynchronous sockets in one separate thread
> (instead of spawning on each new socket).
> I will update the spec [2] on that.
>
>
> 6. Put all zmq driver related stuff (matchmakers, most classes from
> zmq_impl) into a separate package.
> Don't keep all classes (ZmqClient, ZmqProxy, Topics management,
> ZmqListener, ZmqSocket, ZmqReactor)
> in one impl_zmq.py module.
The AMQP 1.0 driver work did something similar under a "protocols"
directory. It would be nice to be consistent with the existing work on
organizing driver-related files.
>
> _drivers (package)
> +-- impl_rabbit.py
> +-- impl_zmq.py <- leave only ZmqDriver class here
> +-- zmq_driver (package)
> | +--- matchmaker.py
> | +--- matchmaker_ring.py
> | +--- matchmaker_redis.py
> | +--- matchmaker_.py
> ...
> | +--- client.py
> | +--- reactor.py
> | +--- proxy.py
> | +--- topic.py
> ...
>
> 7. Need more technical documentation on the driver like [6].
> I'm willing to prepare a current driver architecture overview with
> some graphics UML charts, and to continue discuss the driver
> architecture.
>
> Please feel free to add or to argue about any issue, I'd like to have
> your feedback on these issues.
This looks like a good list, and I'm encouraged to see activity around
the ZMQ driver. I would like to see more participation in reviews for
the ZMQ-related specs before the summit, so we can use our time together
in person to resolve remaining issues rather than starting from scratch.
Doug
> Thanks.
>
> Oleksii Zamiatin
>
>
> References:
>
> [1] https://review.openstack.org/#/c/154094/
> [2] https://review.openstack.org/#/c/151185/
> [3] https://review.openstack.org/#/c/150735/
> [4] https://bugs.launchpad.net/oslo.messaging/+bug/1282297
> [5] https://bugs.launchpad.net/oslo.messaging/+bug/1381972
> [6] https://review.openstack.org/#/c/130943/8
> [7] https://review.openstack.org/#/c/144149/1
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe:
> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
More information about the OpenStack-dev
mailing list