To jest dokładnie scenariusz, w którym byłem kilka miesięcy temu i zdecydowałem się użyć AMQP z RabbitMQ przy użyciu wymiany tematów, oprócz memcache dla dużych obiektów.
Wiadomości AMQP są ciągami w formacie obiektów JSON, dzięki czemu można łatwo dodać atrybuty do wiadomości (np. Liczbę ponownych prób) i ponownie opublikować. Obiekty JSON są podzbiorem JSON, które odpowiadają dykcjom Pythona. Na przykład {"recordid": "272727"} jest obiektem JSON z jednym atrybutem. Mógłbym właśnie przetrawić dyktando Pythona, ale zablokowałoby to nas tylko za pomocą Pythona z kolejkami wiadomości.
Duże obiekty nie są kierowane przez AMQP, zamiast tego przechodzą do pamięci memcache, gdzie są dostępne dla innego procesu, aby je odzyskać. Możesz równie dobrze wykorzystać Redis lub Tokyo Tyrant do tej pracy. Chodzi o to, że nie chcemy, aby krótkie wiadomości były ustawiane w kolejce za dużymi obiektami.
W końcu moje procesy w Pythonie zakończyły się przy użyciu zarówno AMQP, jak i ZeroMQ dla dwóch różnych aspektów architektury. Może się okazać, że ma sens stosowanie zarówno OpenMPI, jak i AMQP, ale w przypadku różnych typów zadań.
W moim przypadku proces przełożonego trwa wiecznie, uruchamia całe stado robotników, którzy również działają wiecznie, chyba że umrą lub zawiesią się, w takim przypadku przełożony ponownie je uruchomi. Praca nieustannie napływa w postaci komunikatów za pośrednictwem AMQP, a każdy proces obsługuje tylko jeden etap pracy, więc gdy zidentyfikujemy wąskie gardło, możemy mieć wiele instancji procesu, być może na oddzielnych maszynach, w celu usunięcia wąskiego gardła. W moim przypadku mam 15 wystąpień jednego procesu, 4 z dwóch innych i około 8 innych pojedynczych instancji.
opat, dziękuję za odpowiedź. Tak, wysyłam "duże pakiety" (po kilka MB każdego) przez sieć 100 maszyn; Mam prostą sieć 1G. Nic fajnego; może mieć małe opóźnienie - nie musi być najszybsze. – user3262424
+1. Ogólnie MPI jest dobry do uruchamiania pojedynczego dużego zadania na wielu niezawodnych węzłach (np. Węzłach w klastrze lub grupie komputerów w laboratorium).Jak wspomniano powyżej, jest to również świetne, gdy nie wiesz, jaki rodzaj sieci ma, lub chcesz skorzystać z pamięci współdzielonej między rdzeniami w węźle. Im dalej odbiegasz od tego rodzaju użycia, tym mniej dobrze pasuje MPI. Dodam tylko, że OpenMPI to tylko jedna implementacja MPI; MPICH2, inny, jest równie dobry. A jeśli zamierzasz używać MPI + Python, polecam mpi4py. (http://mpi4py.scipy.org/) –
Jonathan, dziękuję. Czy są jakieś plusy za używanie 'OpenMPI' vs.' RabbitMQ'? – user3262424