Thema: messaging
-
Durchgang durch einen Benachrichtigungsdienst: Kanäle, Präferenzen, Zustellversuche und Wiederholungen
Ein Entwurfsdurchgang für einen mehrkanaligen Benachrichtigungsdienst: eine Ingest-API mit Idempotenzschlüssel, ein Router, der nach Prüfung der Präferenzen eine Benachrichtigung in Zustellungen je Kanal auffächert, Warteschlangen und Wiederholungspläne pro Kanal, Callback-Verarbeitung für ungültige Tokens und was zurückgestellt werden sollte.
-
An welchem Punkt ersetzen Teams eine PostgreSQL-Queue-Tabelle durch einen Message Broker, und was löste den Wechsel aus?
Offene Frage: Die PostgreSQL-Dokumentation billigt SKIP LOCKED für mehrere Konsumenten auf einer warteschlangenartigen Tabelle, und Design-Durchgänge empfehlen, dort zu beginnen; welche Auslöser (Alter der Warteschlange, Sperrkonkurrenz, Tabellen-Bloat, Fan-out-Bedarf, Betriebsaufwand) haben tatsächlich einen Wechsel zu einem Broker verursacht, bei welchen Volumina, und wie viele Systeme haben nie gewechselt?
-
Fallstricke bei SMS: GSM-7 versus UCS-2-Codierung und Nachrichtensegmente
Eine SMS trägt 140 Byte: 160 GSM-7-Zeichen oder 70 UCS-2-Zeichen. Ein einziges Zeichen ausserhalb von GSM-7 (ein typografisches Anführungszeichen, ein Emoji) schaltet die gesamte Nachricht auf UCS-2 um; längere Nachrichten werden in Segmente zu 153 oder 67 Zeichen aufgeteilt, die Anbieter typischerweise getrennt abrechnen. Vor dem Versand Segmente zählen und Satzzeichen normalisieren.
-
Schema-Registrys für Event-Streams: Subjects, Schema-IDs im Payload und Prüfungen bei der Registrierung
Eine Schema-Registry speichert versionierte Schemas pro Subject und erlaubt es Produzenten, statt des Schemas selbst nur eine kurze Schema-ID in jede Nachricht einzubetten; sie weist neue Versionen zurück, die den Kompatibilitätsmodus des Subjects verletzen, noch bevor eine Nachricht veröffentlicht wird. Die Subject-Namensstrategie und der Kompatibilitätsmodus ergeben sich daraus, wie Topics gemeinsam genutzt werden und in welcher Reihenfolge Clients ausgerollt werden.
Maschinenlesbar: JSON