Jak postavit dokovací cluster s celerem a RabbitMQ za 10 minut

Existuje mnoho tutoriálů o tom, jak používat Celery s Djangem nebo Flaskem v Dockeru. Většina z nich je dobrým návodem pro začátečníky, ale tady nechci mluvit o Djangu víc, jen vysvětlím, jak jednoduše spustit Celery s RabbitMQ s Dockerem, a generovat pracovní klastry s pouhým ONE příkazem.

Samozřejmě byste s tím mohli vytvořit efektivní klastry prolézacích modulů!

1.Přijmout mapu výrobce a spotřebitele

Zdroj: test4geeks.com
Celery je asynchronní fronta úloh / fronta úloh založená na předávání distribuovaných zpráv. Zaměřuje se na provoz v reálném čase, ale podporuje také plánování.
Prováděcí jednotky, nazývané úkoly, jsou prováděny souběžně na jednom nebo více pracovních serverech pomocí multiprocesingu, Eventlet nebo gevent. Úkoly lze provádět asynchronně (na pozadí) nebo synchronně (počkat, až bude připraven).

Jak je uvedeno výše na oficiálních webových stránkách, Celery je distribuovaná fronta úkolů, díky níž můžete v krátké době zvládnout miliony nebo dokonce miliardy úkolů.

Celery vyžaduje agenta zasílání zpráv, aby mohl vyřizovat požadavky z externího zdroje, obvykle se jedná o samostatnou službu zvanou zprostředkovatel zpráv.

Pro brokery je k dispozici mnoho možností, včetně relačních databází, databází NoSQL, obchodů s klíčovou hodnotou a systémů zasílání zpráv. Zde vybíráme RabbitMQ pro systém zasílání zpráv. RabbitMQ je kompletní, stabilní, odolný a snadno se instaluje. Je to vynikající volba pro výrobní prostředí.

2. Nainstalujte Docker a Docker-compose

V průvodci nainstalujte Docker

aktualizace sudo apt-get
sudo apt-key adv - keyserver hkp: //p80.pool.sks-keyservers.net: 80 - recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo apt-add-repository ‘deb https://apt.dockerproject.org/repo ubuntu-xenial main’

Nainstalujte docker-compose, jak je uvedeno níže, nebo si přečtěte návod oficiálního webu Docker.

sudo apt-get install docker-compose

3. Struktura kódu

Struktura kódu je uvedena níže

Dále vysvětlím kód podrobně krok za krokem:

celery.py

Prvním argumentem pro Celery je název projektového balíčku, kterým je „test_celery“.

Druhým argumentem je argument klíčového slova makléře, který by měl být určen URL makléře. Zde pomocí RabbitMQ.

Upozornění: admin: mypass@10.211.55.12: 5672, měli byste to změnit na to, co jste nastavili pro RabbitMQ. uživatel: heslo @ ip: port

Třetím argumentem je backend, který by měl být specifikován backend URL. Backend v Celeru se používá k ukládání výsledků úkolů. Pokud tedy potřebujete získat přístup k výsledkům svého úkolu po dokončení, měli byste nastavit backend pro Celery. rpc znamená odeslání výsledků zpět jako zprávy AMQP. Další možnosti formátů zpráv naleznete zde.

tasks.py

V tomto souboru vidíte, že importujeme aplikaci definovanou v předchozím celerovém modulu a používáme ji jako dekoratér pro naši metodu úlohy. Všimněte si, že app.task je pouze dekoratér. Navíc v našem longtime_add úkolu spíme 5 sekund, abychom simulovali časově nákladný úkol.

run_tasks.py

Zde nazýváme úlohu longtime_add pomocí metody zpoždění, což je nutné, pokud chceme úlohu zpracovat asynchronně. Kromě toho uchováváme výsledky úkolu a tiskneme některé informace. Připravená metoda vrátí True, pokud byla úloha dokončena, jinak False. Atribut result je výsledek úkolu („3“ v naší ase). Pokud úkol nebyl dokončen, vrátí Žádné.

docker-compose.yml

Byl dokončen hlavní kód spotřebitele a výrobce, dále nastavíme docker-compose a docker.

V tomto souboru jsme nastavili verzi souboru docker-compose na „2“ a nastavili jsme dvě „služby“: králíka a pracovníka. Zde bychom si měli všimnout „obrazu“, později „obrázek králíka: nejnovější“ vytáhneme později s dokem.

Zde musíme vytvořit dokovací obrázek s celerem pro pracovníka. A spustit, když začíná ENTRYPOINT

Spousta kódu? Stačí si stáhnout všechny z Githubu

Před dalším krokem bychom měli stáhnout obrázek rabbitmq a vytvořit obrázek pracovníka.

ukotvení tahu rabbitmq: nejnovější
cd / adresář dockerfile /
sestavení dock-compose

Po dokončení se zobrazí, když do terminálu zadáte cmd „docker ps -a“, „celeryrabbitmq_worker“ a „rabbitmq“.

Oheň to!

Nyní můžeme začít dělníky pomocí následujícího příkazu (spustit ve složce našeho projektu Celery_RabbitMQ_Docker)

dělník v docker-compose = 5

Poté, co se zobrazí „hotovo“, uvidíte níže zobrazené terminálové ukázky, což znamená, že všech 5 pracovníků bylo vytvořeno a dobře spuštěno.

Vytváření a spouštění celeryrabbitmq_worker_2… hotovo
Vytváření a spouštění celeryrabbitmq_worker_3… hotovo
Vytváření a spouštění celeryrabbitmq_worker_4… hotovo
Vytváření a spouštění celeryrabbitmq_worker_5… hotovo

Další příkaz zadejte:

docker-compose up

Pak uvidíte něco jako níže:

(Aktualizováno, děkuji za komentář od jlkinsel. Pokud máte před spuštěním „docker-compose up“ a poté zastavení, docker-compose up, zobrazí se „Spuštění celeryrabbitmq_rabbit_1“. Oba zde fungují)

celeryrabbitmq_rabbit_1 je aktuální
celeryrabbitmq_worker_2 je aktuální
celeryrabbitmq_worker_3 je aktuální
celeryrabbitmq_worker_4 je aktuální
celeryrabbitmq_worker_5 je aktuální
Připojení k celeryrabbitmq_rabbit_1, celeryrabbitmq_worker_5, celeryrabbitmq_worker_2, celeryrabbitmq_worker_4, celeryrabbitmq_worker_3, celeryrabbitmq_worker_1

Nyní bylo všech pět prací zahájeno a připraveno přijímat zprávy. Pokud existují nějaké zprávy z produkce, uvidíte výsledky zde.

OK, otevřete další terminál a přejděte do adresáře projektu, docker-cluster-with-celery-and-rabbitmq. Začněme s výrobcem:

docker exec -i -t scaleable-crawler-with-docker-cluster_worker_1 / bin / bash python -m test_celery.run_tasks

* Díky za opravu fizerkhanů.

Nyní můžete vidět výsledky z tohoto snímku obrazovky. Číslo 12 za „Task test_celery.tasks.longtime_add“ je výsledek vypočítaný pomocí „tasks.py“.

Zde jen změním „result = longtime_add.delay (1,2)“ na (10,2), pak výsledek je 12, můžete jej změnit na libovolné, které chcete vyzkoušet, pokud běží dobře.

Závěr

Je to jen jednoduché demo ukázat, jak postavit docker cluster s Celery a RabbitMQ v krátké době. Pomůže vám to dobře pochopit Docker, Celery a RabbitMQ. Díky výkonnému jednomu stroji nebo cloudovému clusteru snadno zvládnete velké úkoly. Pokud máte pouze jeden stroj s nízkými specifiky, je lepší volbou vícenásobné zpracování nebo vícevláknové zpracování.