[openstack-dev] [OSLO][RPC] AMQP / ZeroMQ control_exchange vs port numbers

Doug Hellmann doug.hellmann at dreamhost.com
Mon Apr 29 13:39:31 UTC 2013


On Mon, Apr 29, 2013 at 7:00 AM, Mark McLoughlin <markmc at redhat.com> wrote:

> On Fri, 2013-04-26 at 15:18 -0400, Doug Hellmann wrote:
>
> > We've gone around a few times with ideas for having better driver-parity
> in
> > the rpc library, so maybe the best thing to do is start by making sure we
> > have all of the requirements lined up. Here's a list of some that I came
> up
> > with based on existing features and my understanding of the shortcomings
> > (numbered for reference, but in no particular order):
>
> Thanks for doing this. We definitely need to be stepping back and
> thinking about this at a high level. I've attempted to step a little
> further back in my writeup:
>
>   https://wiki.openstack.org/wiki/Oslo/Messaging
>
> > 1. Application code using RPC connections must not be required to know to
> > pass different arguments to establish the connection (i.e., the app
> > shouldn't have to care if it is using Rabbit or ZMQ).
>
> Yes.
>
> > 2. An application must be able to direct a message to a specific peer
> > (i.e., call() with a host specified).
>
> s/direct a message to/invoke a method on/
>

RPC and notification aren't the only usage patterns for messaging. If we're
going to design a general purpose library, we should not limit ourselves to
RPC semantics. RPC can be built on top of messaging, but it has been
painful to try to make it work the other way around.


>
> But, yes.
>
> > 3. An application must be able to direct a message to a pool of peers
> > (i.e., cast()).
>
> ... and for it to be delivered to one of those peers, yes.
>
> > 4. An application must be able to direct a message to a specific peer (or
> > unknown? or both?) using a different rpc endpoint than the originating
> > app's default (i.e., calling into cells).
>
> I've tried to separate the notion of a transport from the target. The
> properties of the target is what's known to the application code, the
> properties of the transport are target specific and come from
> configuration.
>
> So, I'd say "an application must be able to invoke a method on a
> specific target using a supplied transport configuration".
>

Something has to know how to map the target to the configuration. What does
that, and how much does that code know about the transport?


>
> > 5. An application must be able to listen for messages without interfering
> > with others receiving those same messages (i.e., join_consumer_pool()).
>
> For notifications, yes - and we should have an API for consuming
> notifications.
>
> But for RPC (i.e. create_worker()), I don't really see it. See here:
>
>
> https://wiki.openstack.org/wiki/Oslo/Messaging#Ceilometer_Metering_Messages
>
> Should ceilometer be using notifications instead of record_metering_data()
>

Probably.


>
> > 6. An application must be able to listen for messages sent by any peer,
> and
> > any service (i.e., specifying a different "exchange", though we want to
> > extend this to include a different broker as well).
>
> For notifications, yes.
>
> For RPC, this sounds like a "tap" - i.e. listen in on RPC exchanges
> between peers.
>
> > 7. Any configuration changes must maintain backwards compatibility (i.e.,
> > if we move to URLs instead of N different variables, we still have to
> > support the old format somehow for some time).
>
> Yes.
>
> Thanks,
> Mark.
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20130429/57bf0ff6/attachment.html>


More information about the OpenStack-dev mailing list