Adrian RomoAdrian Romo
Alle Texte
Architektur-Notiz 1 Min. Lesezeit

Architekturhinweis: Wann man SQS FIFO anstelle einer DB-Warteschlange wählen sollte

Ein Entscheidungsrahmen, den ich verwende, wenn das Team standardmäßig auf eine von Postgres unterstützte Warteschlange zurückgreift.

Teil von Backend Craft

Teams greifen öfter auf "benutze einfach eine Tabelle"-Queues zurück, als sie sollten. Manchmal ist das richtig. Oft ist es eine Zeitbombe.

Mein Entscheidungsbaum:

  1. Ist eine Sortierung pro Schlüssel erforderlich? → SQS FIFO mit MessageGroupId. Eine DB-Queue bekommt das nur hin, wenn du vorsichtig mit SELECT FOR UPDATE SKIP LOCKED umgehst.
  2. Wird der Durchsatz jemals ein paar hundert pro Sekunde überschreiten? → SQS. DB-Queues kämpfen mit dem Rest deiner App um Verbindungen und Zeilenlocks.
  3. Ist genau einmal beim Verbraucher erforderlich? → Keines von beiden bietet dir das. Entwerfe idempotente Verbraucher; nutze das Dedup-Fenster von SQS FIFO als Sicherheitsnetz.
  4. Befindet sich der Verbraucher außerhalb des Explosionsradius der DB? → SQS. Koppel einen externen Worker nicht an dein primäres Postgres.

Eine DB-Queue ist richtig, wenn die Arbeit intrinsisch an eine Transaktion gebunden ist — "nachdem diese Zeile bestätigt wurde, mache X." SQS ist richtig, wenn die Arbeit extrinsisch ist.

Weiter geht's

Wohin als Nächstes?

Stöbere durch weitere technische Texte, sieh dir die Engineering Case Studies an oder melde dich direkt.