2015-05-27 11 views
26

Mamy rozproszoną architekturę opartą na rabbitMQ i Celery. Możemy uruchamiać równolegle wiele zadań bez żadnego problemu. Skalowalność jest dobra.Współdziałać z bieżącym zadaniem selera

Teraz musimy zdalnie kontrolować zadanie: PAUSE, RESUME, CANCEL. Jedynym znalezionym rozwiązaniem jest wykonanie w zadaniu Selera wywołania RPC do innego zadania, które odpowiada komendzie po żądaniu DB. Zadanie Celery i zadanie RPC nie znajdują się na tym samym komputerze, a tylko zadanie RPC ma dostęp do bazy danych.

Czy masz porady, jak to poprawić i łatwo komunikować się z bieżącym zadaniem? Dziękuję

EDIT: W rzeczywistości chcielibyśmy zrobić coś jak na zdjęciu poniżej. Łatwo jest wykonać konfigurację Blue lub Orange, ale nie wiemy, jak wykonać oba jednocześnie. enter image description here Pracownicy subskrybują wspólny Jobs queue, a każdy pracownik ma swój własny Admin queue zadeklarowany na giełdzie.

EDIT: Jeśli nie jest to możliwe z Celery, I'am otwarty na rozwiązania z innych ram jak python-rq.

Odpowiedz

5

Wygląda jak Control Bus pattern.

Aby uzyskać lepszą skalowalność i zmniejszyć liczbę wywołań RPC, zalecamy odwrócenie tej logiki. Polecenie PAUSE, RESUME, CANCEL jest popychane do zadań Selera przez magistralę sterującą po wystąpieniu zmiany stanu. Aplikacja Seler będzie przechowywać bieżący stan aplikacji Seler w sklepie (może być w pamięci, w systemie plików ..). Jeśli stany zadań muszą być zachowane nawet po zatrzymaniu/uruchomieniu aplikacji, będzie to wymagało więcej pracy, aby synchronizacja obu aplikacji była zsynchronizowana (np. Synchronizacja przy uruchomieniu).

+0

Dziękuję, ale czy istnieje sposób na wdrożenie kanału zarządzania za pomocą selera? – Julio