Top 6 Warteschlangensysteme für Backend-Entwickler

Suchen Sie ein Warteschlangensystem? Oder suchen Sie einen besseren? Hier finden Sie alle Informationen, die Sie benötigen!


Warteschlangensysteme sind das bestgehütete Geheimnis der Backend-Entwicklung.

Ohne zu versuchen, ein Gedicht zum Lob von Warteschlangensystemen zu schreiben, würde ich sagen, dass ein Junior-Backend-Entwickler ein Backend-Entwickler mittlerer Ebene wird, nachdem er gelernt hat, Warteschlangen in das System zu integrieren. Warteschlangen verbessern das Kundenerlebnis (wir werden sehen, wie), reduzieren die Komplexität und verbessern die Zuverlässigkeit in einem System.

Sicher, für sehr einfache Web-Apps mit nahezu null Verkehr und Broschüren-Websites können Warteschlangen insgesamt (oder sogar unmöglich zu installieren sein, wenn Sie sich in einer typischen Shared-Hosting-Umgebung befinden), aber nicht triviale Apps profitieren alle von Warteschlangen Systeme und große Apps sind ohne Warteschlangen nicht möglich.

Bevor wir beginnen, ein Haftungsausschluss: Wenn Sie bereits mit Warteschlangensystemen vertraut sind und die verschiedenen Optionen vergleichen möchten, führen die nächsten einleitenden Abschnitte zu einem starken Schlaf. �� Also zögern Sie nicht, geradeaus zu springen. Die einleitenden Abschnitte sind für diejenigen gedacht, die nur eine dunstige Vorstellung von Warteschlangensystemen haben oder den Namen nur beiläufig gehört haben.

Was ist ein Warteschlangensystem??

Beginnen wir damit, zu verstehen, was eine Warteschlange ist.

Eine Warteschlange ist eine Datenstruktur in der Informatik, die die Warteschlangen der realen Welt nachahmt, die wir um uns herum sehen. Wenn Sie beispielsweise zu einem Ticketschalter gehen, werden Sie feststellen, dass Sie am Ende der Warteschlange stehen müssen, während die Person am Anfang der Warteschlange zuerst das Ticket erhält. Dies nennen wir auch das Phänomen „Wer zuerst kommt, mahlt zuerst“. In der Informatik ist es möglich, Programme zu schreiben, die ihre Aufgaben wie diese in einer Warteschlange speichern und sie nacheinander auf der gleichen Basis verarbeiten, je nach Verfügbarkeit.

Beachten Sie, dass die Warteschlange selbst keine eigentliche Verarbeitung durchführt. Es ist nur eine Art temporärer Speicher, in dem Aufgaben warten, bis sie von etwas aufgenommen werden. Wenn das alles etwas zu abstrakt klingt, mach dir keine Sorgen. Es ist ein abstraktes Konzept, aber wir werden im nächsten Abschnitt eindeutige Beispiele sehen. ��

Warum brauchen Sie Warteschlangensysteme??

Ohne auf eine sehr ausführliche Beschreibung einzugehen, würde ich sagen, dass der Hauptbedarf für Warteschlangensysteme in der Hintergrundverarbeitung, der parallelen Ausführung und der Wiederherstellung nach einem Fehler liegt. Schauen wir uns diese anhand von Beispielen an:

Hintergrundverarbeitung

Angenommen, Sie führen eine E-Commerce-Marketingkampagne durch, bei der es auf die Zeit ankommt, und Ihre Anwendung ist so aufgebaut, dass eine Bestätigungs-E-Mail ausgelöst wird, bevor der Kunde die Zahlung abschließt, und die Seite “Danke” angezeigt wird. Wenn der Mailserver, zu dem Sie eine Verbindung herstellen, nicht verfügbar ist, stirbt die Webseite einfach ab und beeinträchtigt die Benutzererfahrung.

Stellen Sie sich vor, wie viele Supportanfragen Sie erhalten würden! In diesem Fall ist es besser, diese E-Mail-Sendeaufgabe in eine Jobwarteschlange zu verschieben und dem Kunden die Erfolgsseite anzuzeigen.

Parallele Ausführung

Viele Entwickler, insbesondere diejenigen, die meist einfachere, verkehrsarme Apps codieren, haben die Gewohnheit, Cron-Jobs für die Hintergrundverarbeitung zu verwenden. Dies ist in Ordnung, bis die Eingabe so groß wird, dass sie nicht mehr gelöscht werden kann. Angenommen, Sie haben einen Cron-Job, der Analyseberichte erstellt und per E-Mail an Benutzer sendet, und Ihr System kann 100 Berichte pro Minute verarbeiten.

Sobald Ihre App wächst und durchschnittlich mehr als 100 Anfragen pro Minute erhält, fällt sie immer mehr zurück und kann niemals alle Aufträge ausführen.

In einem Warteschlangensystem kann diese Situation vermieden werden, indem mehrere Mitarbeiter eingerichtet werden, die jeweils einen Job auswählen (mit jeweils 100 zu erledigenden Berichten) und parallel arbeiten, um die Aufgabe viel, viel früher zu erledigen.

Wiederherstellung nach einem Fehler

Wir denken im Allgemeinen nicht an Fehler als Webentwickler. Wir gehen davon aus, dass unsere Server und die von uns verwendeten APIs immer online sind. Die Realität sieht jedoch anders aus: Netzwerkausfälle sind nur allzu häufig und die hervorragenden APIs, auf die Sie sich verlassen, sind möglicherweise aufgrund von Infrastrukturproblemen ausgefallen (bevor Sie “Nicht ich!” Sagen, vergessen Sie das nicht massiver Ausfall von Amazon S3). Zurück zum Berichtsbeispiel: Wenn Sie für einen Teil Ihrer Berichtserstellung eine Verbindung zur Zahlungs-API herstellen müssen und diese Verbindung 2 Minuten lang unterbrochen ist, was passiert dann mit den 200 fehlgeschlagenen Berichten??

Warteschlangensysteme sind jedoch mit einem erheblichen Overhead verbunden. Die Lernkurve ist ziemlich steil, wenn Sie in eine völlig neue Domäne eintreten, die Komplexität Ihrer Anwendung und Bereitstellung zunimmt und Aufträge in der Warteschlange nicht immer mit 100% iger Genauigkeit gesteuert werden können. Es gibt jedoch Situationen, in denen das Erstellen einer Anwendung ohne Warteschlangen einfach nicht möglich ist.

Schauen wir uns einige der gängigen Optionen für Backends / Systeme in der Warteschlange an.

Redis

Redis ist als Schlüsselwertspeicher bekannt, der Datenstrings ohne Kenntnis der Datenstruktur speichert, aktualisiert und abruft. Während dies früher der Fall gewesen sein mag, verfügt Redis heute über effiziente und äußerst nützliche Datenstrukturen wie Listen, sortierte Mengen und sogar ein Pub-Sub-System, was es für Warteschlangenimplementierungen äußerst wünschenswert macht.

Die Vorteile von Redis sind:

  • Vollständig speicherinterne Datenbank, was zu schnelleren Lese- / Schreibvorgängen führt.
  • Hocheffizient: Kann problemlos mehr als 100.000 Lese- / Schreibvorgänge pro Sekunde unterstützen.
  • Hochflexibles Persistenzschema. Sie können entweder die maximale Leistung auf Kosten eines möglichen Datenverlusts bei Fehlern anstreben oder im vollständig konservativen Modus einrichten, um die Leistung für die Konsistenz zu opfern.
  • Sofort unterstützte Cluster

Bitte beachten Sie, dass Redis keine Messaging- / Warteschlangen- / Wiederherstellungsabstraktionen enthält. Sie müssen daher entweder ein Paket verwenden oder selbst ein leichtes System erstellen. Ein Beispiel ist, dass Redis das Standard-Warteschlangen-Backend für das Laravel PHP-Framework ist, in dem ein Scheduler von den Framework-Autoren implementiert wurde.

Redis lernen ist einfach.

RabbitMQ

Es gibt ein paar subtile Unterschiede zwischen Redis und RabbitMQ, Lassen Sie uns sie also zuerst aus dem Weg räumen.

Erstens hat RabbitMQ eine spezialisiertere, klar definierte Rolle, und so wurde es entwickelt, um dies widerzuspiegeln – Messaging. Mit anderen Worten, sein Sweet Spot besteht darin, als Vermittler zwischen zwei Systemen zu fungieren, was bei Redis, das als Datenbank fungiert, nicht der Fall ist. Infolgedessen bietet RabbitMQ einige weitere Funktionen, die in Redis fehlen: Nachrichtenrouting, Wiederholungsversuche, Lastverteilung usw..

Wenn Sie darüber nachdenken, können Aufgabenwarteschlangen auch als Messaging-System betrachtet werden, bei dem der Planer, die Mitarbeiter und die Job-Übermittler an Entitäten denken können, die an der Nachrichtenübermittlung teilnehmen.

RabbitMQ hat folgende Vorteile:

  • Bessere Abstraktionen für die Nachrichtenübermittlung, wodurch die Arbeit auf Anwendungsebene reduziert wird, wenn Sie die Nachrichtenübermittlung benötigen.
  • Widerstandsfähiger gegen Stromausfälle und Stromausfälle (zumindest standardmäßig als Redis).
  • Cluster- und Verbundunterstützung für verteilte Bereitstellungen.
  • Hilfreiche Tools zum Verwalten und Überwachen Ihrer Bereitstellungen.
  • Unterstützung für praktisch alle nicht trivialen Programmiersprachen.
  • Bereitstellung mit dem Werkzeug Ihrer Wahl (Docker, Chef, Puppet usw.).

Wann soll RabbitMQ verwendet werden? Ich würde sagen, es ist eine gute Wahl, wenn Sie wissen, dass Sie die asynchrone Nachrichtenübermittlung verwenden müssen, aber nicht bereit sind, die enorme Komplexität einiger anderer Warteschlangenoptionen in dieser Liste zu bewältigen (siehe unten)..

ActiveMQ

Wenn Sie sich im Unternehmensbereich befinden (oder eine stark verteilte und groß angelegte App erstellen) und das Rad nicht ständig neu erfinden müssen (und dabei Fehler machen möchten), ActiveMQ ist einen Blick wert.

Hier zeichnet sich ActiveMQ aus:

  • Es ist in Java implementiert und hat daher eine wirklich nette Java-Integration (folgt dem JMS-Standard)..
  • Es werden mehrere Protokolle unterstützt: AMQP, MQTT, STOMP, OpenWire usw..
  • Behandelt Sicherheit, Routing, Ablauf von Nachrichten, Analysen usw. sofort.
  • Eingebaute Unterstützung für beliebte verteilte Messaging-Muster, wodurch Sie Zeit und kostspielige Fehler sparen.

Das heißt nicht, dass ActiveMQ nur für Java verfügbar ist. Es verfügt über Clients für Python, C / C ++, Node, .Net und andere Ökosysteme, sodass keine Bedenken hinsichtlich eines möglichen Zusammenbruchs in der Zukunft bestehen sollten. Außerdem basiert ActiveMQ auf völlig offenen Standards und das Erstellen eigener Lightweight-Clients sollte einfach sein.

Beachten Sie bitte, dass ActiveMQ nur ein Broker ist und kein Backend enthält. Sie müssen weiterhin eines der unterstützten Backends verwenden, um die Nachrichten zu speichern. Ich habe es hier aufgenommen, weil es nicht an eine bestimmte Programmiersprache gebunden ist (wie andere beliebte Lösungen wie Sellerie, Sidekiq usw.).

Amazon MQ

Amazon MQ verdient hier eine schnelle, aber wichtige Erwähnung. Wenn Sie der Meinung sind, dass ActiveMQ die ideale Lösung für Ihre Anforderungen ist, sich aber nicht mit dem Aufbau und der Wartung der Infrastruktur selbst befassen möchten, bietet Amazon MQ einen verwalteten Service, um dies zu tun. Es unterstützt alle Protokolle, die ActiveMQ ausführt – es gibt überhaupt keinen Unterschied in den Funktionen -, da ActiveMQ selbst unter der Oberfläche verwendet wird.

Der Vorteil ist, dass es sich um einen verwalteten Dienst handelt, sodass Sie sich um nichts anderes kümmern müssen, als ihn zu verwenden. Dies ist für Bereitstellungen in AWS noch sinnvoller, da Sie andere Services und Angebote direkt aus Ihrer Bereitstellung heraus nutzen können (z. B. schnellere Datenübertragungen)..

Amazon SQS

Wir können nicht erwarten, dass Amazon in Bezug auf kritische Infrastrukturelemente ruhig sitzt, oder? ��

Und so haben wir Amazon SQS, Dies ist ein vollständig gehosteter, einfacher Warteschlangendienst (im wahrsten Sinne des Wortes) des bekannten Riesen AWS. Auch hier sind subtile Unterschiede wichtig. Beachten Sie daher, dass SQS nicht über das Konzept der Nachrichtenübermittlung verfügt. Wie Redis ist es ein einfaches Backend zum Akzeptieren und Verteilen von Jobs in Warteschlangen.

Wann möchten Sie Amazon SQS verwenden? Hier sind einige Gründe:

  • Sie sind ein AWS-Fan und werden nichts anderes anfassen (ehrlich gesagt gibt es viele Leute da draußen, und ich denke, daran ist nichts auszusetzen)..
  • Sie benötigen eine gehostete Lösung. Stellen Sie daher sicher, dass die Fehlerrate Null ist und keiner der Jobs verloren geht.
  • Sie möchten keinen Cluster aufbauen und müssen ihn selbst überwachen. Oder schlimmer noch, Sie müssen Überwachungstools erstellen, wenn Sie diese Zeit für eine produktive Entwicklung nutzen könnten.
  • Sie haben bereits erhebliche Investitionen in die AWS-Plattform getätigt, und es ist wirtschaftlich sinnvoll, daran gebunden zu bleiben.
  • Sie möchten ein fokussiertes, einfaches Warteschlangensystem ohne die mit der Nachrichtenübermittlung, den Protokollen und so weiter verbundenen Probleme.

Alles in allem ist Amazon SQS eine gute Wahl für alle, die Jobwarteschlangen in ihr System integrieren möchten und sich nicht um die Installation / Überwachung von Dingen selbst kümmern müssen.

Bohnenstange

Bohnenstange gibt es schon seit langer Zeit und es ist ein kampferprobtes, schnelles und einfaches Backend für die Warteschlange. Es gibt einige Eigenschaften von Beanstalkd, die es erheblich von Redis unterscheiden:

  • Es handelt sich ausschließlich um ein Warteschlangensystem und sonst nichts. Sie schieben Jobs dorthin, die später von Jobarbeitern gezogen werden. Wenn Ihre Anwendung also nur einen geringen Bedarf an Nachrichtenübermittlung hat, sollten Sie Beanstalkd vermeiden.
  • Es gibt keine erweiterten Datenstrukturen wie Sätze, Prioritätswarteschlangen usw..
  • Beanstalkd ist eine sogenannte FIFO-Warteschlange (First In, First Out). Es gibt keine Möglichkeit, Jobs nach Priorität zu ordnen.
  • Es gibt keine Optionen für das Clustering.

All dies besagt, dass Beanstalkd ein schnelles Warteschlangensystem für einfache Projekte darstellt, die auf einem einzigen Server leben. Für viele ist es schneller und stabiler als Redis. Also, wenn Sie haben Probleme Mit Redis, das Sie einfach nicht lösen können, egal was passiert, und Ihre Bedürfnisse sind einfach, ist Beanstalkd einen Versuch wert.

Fazit

Wenn Sie so weit gelesen haben (oder hier Skim-Reading �� erreicht haben), besteht eine gute Chance, dass Sie an Warteschlangensystemen interessiert sind oder eines benötigen. In diesem Fall ist die Liste auf dieser Seite hilfreich, es sei denn, Sie suchen nach einem sprach- / Framework-spezifischen Warteschlangensystem.

Ich wünschte, ich könnte Ihnen sagen, dass das Anstehen einfach und 100% zuverlässig ist, aber nicht. Es ist chaotisch und da alles im Hintergrund läuft und sehr schnell geschieht (Fehler können unbemerkt bleiben und sehr kostspielig werden). Warteschlangen sind jedoch über einen bestimmten Punkt hinaus sehr wichtig, und Sie werden feststellen, dass sie eine mächtige Waffe (vielleicht sogar die mächtigste) in Ihrem Arsenal sind. Viel Glück! ��

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map