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

Doug Hellmann doug.hellmann at dreamhost.com
Fri Apr 26 19:18:23 UTC 2013


On Fri, Apr 26, 2013 at 1:28 PM, Eric Windisch <eric at cloudscaling.com>wrote:

>
> > Up to this point, projects have interfaced with each other via HTTP
> > APIs. It seems much easier to replace a project with an alternate
> > implementation using HTTP based interfaces than one that presents the
> > equivalent of our home-grown rpc communication. I'm concerned about a
> > future where projects become more tightly coupled due to rpc
> > communications as opposed to HTTP APIs.
>
> Except we have certain scale and availability characteristics around RPC
> that don't apply natively to HTTP and specifically not to our HTTP servers
> or clients. There is nothing that would prevent us from supporting an
> HTTP-based "rpc" driver, if the low-level protocol is a problem.
>
> I think the problems with using and maintaining RPC compatibility across
> projects is of a greater concern than if there is an API to allow it.
>

The plugin Julien is describing won't be cross-project. It will live in the
ceilometer team code base, and talk to the ceilometer services. It will run
*in* nova, but it won't be a permanent part *of* nova. Any API
compatibility issues will be addressed by the ceilometer team.

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):

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

2. An application must be able to direct a message to a specific peer
(i.e., call() with a host specified).

3. An application must be able to direct a message to a pool of peers
(i.e., cast()).

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

5. An application must be able to listen for messages without interfering
with others receiving those same messages (i.e., join_consumer_pool()).

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

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

Are those accurate? Complete?

Doug
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20130426/5e3e9862/attachment.html>


More information about the OpenStack-dev mailing list