[rabbitmq-discuss] Federation Topologies & Limitations

Simon MacMullen simon at rabbitmq.com
Mon Jan 20 09:36:39 GMT 2014


Not trying to talk you out of any aspect of your design :-) But it's 
worth pointing out that the shovel doesn't have any issues with hop 
count because it always forwards messages unconditionally - so it can't 
do the thing max-hops is trying to do...

Cheers, Simon

On 18/01/2014 20:56, Laing, Michael wrote:
> It is possible. But it is a while since I set up the 'postoffice' using
> federation.
>
> Ultimately I settled on shovels because they are simple, reliable,
> didn't create structures I couldn't thoroughly understand or control,
> and didn't have the hop count issues.
>
> We auto-generate our configs, alleviating the big pain associated with
> shovels.
>
> That said, this year I will look again into federation for at least some
> of our requirements.
>
> Michael
>
>
> On Sat, Jan 18, 2014 at 3:33 PM, Josh West <jsw at one.com
> <mailto:jsw at one.com>> wrote:
>
>     Hi Michael,
>
>     Wow great response.  Thanks for the details!
>
>     Do you think I could accomplish something similar with federated
>     queue's and appropriate federation policies?
>
>     Thanks.
>
>
>     On 01/15/2014 07:03 PM, Laing, Michael wrote:
>>     Not seeing any other answers (yet)...
>>
>>     We have experimented with many topologies and have tried
>>     federation, but the design that has proven the most rugged and
>>     simplest and is in production uses shovels.
>>
>>     We have a core cluster that runs an exchange: the 'postoffice',
>>     This cluster has a 'well-known' address so the retail instances
>>     can find it. Each retail instance that comes up creates and runs 2
>>     shovels:
>>
>>     1) the shovel from the core defines a source queue in the core
>>     with an instance identifier, e.g. 'outbox_i-12345', and a binding
>>     to the core postoffice exchange including that identifier (its
>>     address - more about that later).
>>
>>     2) the shovel to the core uses the instance's 'outbox' queue as
>>     source, which is bound to the instance postoffice exchange and
>>     specifies the destination exchange as postoffice.
>>
>>     We use 'addresses' as routing and binding keys. Our addresses have
>>     3 parts: 'action', 'from_address', 'to_address'. The parts are
>>     separated by periods.
>>
>>     Each address has parts: we use 'region', 'product', 'service',
>>     'instance_id', 'pid'. Also separated by periods.
>>
>>     Hence the 'address' of a retail instance is, e.g.:
>>     action: any action => *
>>     from_address:
>>       region: from any => * (the postoffice actually spans multiple
>>     regions)
>>       product: from any => * (identifies an internal customer)
>>       service: from any => * (an app or a level of service)
>>       instance: from any => *
>>       pid: from any => *
>>     to_address:
>>       region: mine => us-west-2
>>       product: for any => *
>>       service: for any => *
>>       instance: mine => i-12345
>>       pid: for any => *
>>
>>     So that is: '*.*.*.*.*.*.us-west-2.*.*.i-12345.*' meaning the
>>     instance will accept anything sent to its region and instance-id.
>>
>>     A typical routing key might be:
>>     'sub-resp.eu-west-1.messaging.update.i-98765.444.us-west-2.messaging.gateway.i-12345.-'
>>     meaning that a service running on a particular pid in another
>>     instance is sending our instance a message for a different
>>     service, same product, on an unknown pid.
>>
>>     There should be an app queue bound to the postoffice on the
>>     instance with an appropriate key to receive the message.
>>
>>     We have standard routines, of course, to handle the creation and
>>     manipulation of keys. Plus our deployments are automated - so all
>>     those asterisks are quite easy to handle in practice although a
>>     little hard to look at!
>>
>>     And of course you can come up with your own addressing scheme to
>>     match your requirements that could be simpler.
>>
>>     This is just a straightforward bus implementation, made possible
>>     by the flexibility of the RabbitMQ routing/binding scheme. We have
>>     found it very useful and have extended the 'postoffice' across all
>>     of our instances in multiple regions with good result.
>>
>>     Michael Laing
>>     NYTimes
>>
>>
>>
>>     On Wed, Jan 15, 2014 at 2:19 PM, Josh West <jsw at one.com
>>     <mailto:jsw at one.com>> wrote:
>>
>>         Hi folks,
>>
>>         I'm currently working with the federation plugin in order to
>>         connect potentially 100-200 different brokers.  The purpose is
>>         to provide a virtual message bus, where systems on any broker
>>         can send messages to other systems that are likely connected
>>         to a different broker. Basically, a communication network /
>>         message bus.
>>
>>         I am experimenting with different architectures and it seems
>>         that in order to prevent message duplications, I'll have to go
>>         with a complete graph and max-hops set to 1 -- or in other
>>         words, each broker will have to directly federate with the
>>         other 100-200 brokers.
>>
>>         I'm wondering about the limitations (if they exist) of the
>>         federation plugin or this style of architecture.  There isn't
>>         much information out there on the pro's and con's of different
>>         topologies (aside from obvious issues with a large ring topology).
>>
>>         Can anybody elaborate or add any input?
>>
>>         Thanks!
>>
>>         --
>>         Josh West
>>         One.com - http://www.one.com
>>
>>         _______________________________________________
>>         rabbitmq-discuss mailing list
>>         rabbitmq-discuss at lists.rabbitmq.com
>>         <mailto:rabbitmq-discuss at lists.rabbitmq.com>
>>         https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>>
>>
>>
>>
>>     _______________________________________________
>>     rabbitmq-discuss mailing list
>>     rabbitmq-discuss at lists.rabbitmq.com  <mailto:rabbitmq-discuss at lists.rabbitmq.com>
>>     https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>
>     --
>     Josh West
>     One.com -http://www.one.com
>
>
>     _______________________________________________
>     rabbitmq-discuss mailing list
>     rabbitmq-discuss at lists.rabbitmq.com
>     <mailto:rabbitmq-discuss at lists.rabbitmq.com>
>     https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>
>
>
>
> _______________________________________________
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
> https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>



More information about the rabbitmq-discuss mailing list