2013-07-18 24 views
6

W mojej aplikacji mam kolejkę, która może potencjalnie stać się bardzo duża. Co się stanie, jeśli odkryję, że na mojej maszynie nie ma więcej miejsca? Jak podzielić moją kolejkę na wiele komputerów? Może filozofia RabbitMQ jest inna i powinienem utworzyć wiele kolejek zamiast jednej dużej kolejki ...?Projektowanie i skalowanie kolejki RabbitMQ

Best, Flavio

Odpowiedz

1

RabbimMQ zapewnia clustering i high availability features zaraz po wyjęciu z pudełka, po prostu trzeba je skonfigurować do swoich potrzeb.

W rzeczywistości AMQP może przechowywać wiadomości o dowolnym rozmiarze, ale w większości przypadków wiadomości mają tylko 32 KB w 99%, tak myślę. Można obliczyć szacunkowe zużycie zasobów (min/max/śr) i podjąć dalsze decyzje dotyczące klastrów lub nie klastra.

+2

Z tego, co zrozumiałem, kolejek nie mogą być dzielone między różnymi maszynami, pojedyncza kolejka przebywał tylko na jednym węźle (tak pojedyncza kolejka nie można skalować tak bardzo) .. czy jestem w błędzie? – user2539645

+0

To prawda, kolejka na żywo na jednym węźle (ale może być dublowany na inny). Jaka jest twoja wiadomość szacunkowa wielkość i natężenie przepływu? – pinepain

+0

Właściwie to jest coś, co zostanie ocenione w ciągu najbliższych dni. Spodziewam się, że terabajty danych pojawią się w ciągu kilku godzin, więc powinienem oczekiwać bardzo obciążonego systemu. Być może lepszym rozwiązaniem byłoby stworzenie nowej wymiany zamiast w kolejce i dodaj kolejkę (wymagającą do klastra) w miarę wzrostu obciążenia. Co o tym myślisz? Problem polega na tym, że czy wymiana tworzy nową kolejkę równomiernie na węzłach (np. Round robin)? – user2539645

1

Jak można przeczytać na wątku listy dyskusyjnej RabbitMQ http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-scalability-design-question-td28323.html, rozwiązaniem, które wymyśliłem, jest wdrożenie konkurencyjnego wzorca konsumenckiego (wielu klientów w kolejce), który po wykryciu specjalnej wiadomości (z włączoną flagą zatrzymania) wysyła STOP wiadomość do wymiany tematów.

Ten komunikat zatrzymania jest odbierany przez "głównego" konsumenta dla tej kolejki, która rozpoczyna odpytywanie Zookeepera (przez kustosza), aż wszystkie dzieci z ceratain zkNode zostały usunięte (używając Zookpeer jako rejestru klientów kolejki w tym przypadku)). Kiedy wszyscy konsumenci zakończyli fazę zatrzymania, "główny" konsument wykonuje pewne zadanie i ponownie włącza pierwotnych klientów kolejki wysyłających komunikat RESTART do giełdy tematów (gdzie każdy konsument słucha z dedykowaną kolejką).

Mam nadzieję, że to może pomóc (lub „inspirować”) ktoś inny ..