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:
- 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 LOCKEDumgehst. - Wird der Durchsatz jemals ein paar hundert pro Sekunde überschreiten? → SQS. DB-Queues kämpfen mit dem Rest deiner App um Verbindungen und Zeilenlocks.
- Ist genau einmal beim Verbraucher erforderlich? → Keines von beiden bietet dir das. Entwerfe idempotente Verbraucher; nutze das Dedup-Fenster von SQS FIFO als Sicherheitsnetz.
- 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.
Geschrieben von
Adrian Romo
Senior Backend Engineer für skalierbare Python-APIs, AWS-Lambda-Architekturen, Voice-Systeme und Enterprise-Integrationen.
Verwandt
Weiterlesen
Zusammengesetzte Primitives vs. eine Plattform
Ich habe einen Voice-Agenten aus Cloud-Primitiven gebaut, und er hat funktioniert. Inzwischen wurde er durch eine speziell entwickelte Voice-Plattform ersetzt, und ich denke, das war die richtige Entscheidung.
Sechs Beiträge am Tag und der Scheduler, der lernte, wann er sagen soll
Eine Social-Pipeline, die jeden Tag genau einen Reel veröffentlicht hat und sonst nichts, weil die Quoten pro Format als Obergrenzen galten und niemand die anderen Formate nachgefragt hat.
Ein Planer, der nichts onboarden wird
Das Tool, das entscheidet, wie ein neuer Service in mein Homelab integriert wird, hat selbst keine Möglichkeit, einen Service zu integrieren. Diese Trennung ist das Design und keine Einschränkung.
Weiter geht's
Wohin als Nächstes?
Stöbere durch weitere technische Texte, sieh dir die Engineering Case Studies an oder melde dich direkt.