2017-04-08 7 views
6

Ich werde ein Projekt in kleine Microservices brechen.Mit Sellerie Microservices bauen

Alle Microservices sind Cron-basiert. Ich denke an Sellerie als Aufgabenverteilung sowie einen Mechanismus zur Durchführung periodischer Aufgaben (Selleriebeat).

Ich möchte nicht mehrere Sellerie-App pro Mikroserver erstellen, da dies den Overhead erhöhen wird, mehrere Makler und mehrere Blumen-System für die Überwachung zu verwenden.

Ich versuchte mit einzelnen App auf mehreren Servern, aber ich scheiterte. Meine Bedürfnisse mit Sellerie sind:

  1. I unabhängigen Server für jede Micro
  2. Aufgabe Gehört bestimmte Micro haben müssen, sollte nur auf ihren Servern auszuführen; keine gemeinsame Nutzung von Aufgaben unter anderen Servern
  3. Falls der Microservice ausfällt, möchte ich nicht, dass Sellerybeat den Broker mit Tausenden von ausstehenden Tasks blockiert, was dazu führt, dass der Service bei anderen Microservices unterbrochen wird.
  4. In brauchen keine Kommunikation zwischen Microservices.

Ich versuchte Warteschlangen pro Arbeiter zu trennen, die nicht möglich zu sein scheint Ich habe versucht, ein Arbeiter pro Server, aber ich brauche mehr als ein Arbeiter auf pro Microservices

Antwort

4

Für Ihren Anwendungsfall, eine einfache Warteschlange basiert Routing von einem einzigen Broker sollte ausreichen.

Behalten Sie nur 1 Broker, der auf einem einzelnen Server oder auf einem separaten Server ausgeführt wird.

Fügen Sie die Warteschlangen während der Aufgaben in Warteschlangen hinzu.

Von Mikro-Service 1:

In [2]: add.apply_async(args=(12, 1), queue='queue1') 
Out[2]: <AsyncResult: 2fa5ca61-47bc-4c2c-be04-e44cbce7680a> 

Start Arbeiter verbrauchen nur diese Warteschlange

celery worker -A tasks -l info -Q queue1 

Von Mikro-Service 2:

In [2]: sub.apply_async(args=(12, 1), queue='queue2') 
Out[3]: <AsyncResult: 4d42861c-737e-4b73-bfa8-6d1e86241d57> 

starten ein Arbeiter nur diese zu konsumieren Warteschlange

celery worker -A tasks -l info -Q queue2 

Dadurch wird sichergestellt, dass Aufgaben von einem Microservice nur von diesem Microservice ausgeführt werden.

+0

Danke für die Antwort. Dieser Ansatz erzeugt jedoch Probleme beim Skalieren. Während Sie Aufgaben bis zu 5000 oder mehr pro 15 Minuten aufaddieren, und wenn die Aufgabe intensiv ist, werden Warteschlangen blockiert, so dass Aufgaben. Überwachungssystem auf Warteschlangenebene ist auch nicht zu einfach. –

+2

Kann das Problem im Detail erklären? Wenn Aufgaben zeitaufwändig sind und zu viele Aufgaben in die Warteschlange gestellt werden, sollte die Skalierung der Mitarbeiter in Ordnung sein. Auf welche Dinge achten Sie? – ChillarAnand

+0

@RakeshBhatt Sie können die automatische Skalierung verwenden, um Mitarbeiter zu skalieren, wenn zu viele Aufgaben zu bearbeiten sind und Sie diese schneller ausführen müssen. Sellerie Arbeiter -l info -A t --autoscale = 8,1'. Sie können Ihre Sellerie-Worker-Server auch horizontal skalieren, um schneller zu konsumieren. – ChillarAnand