Transactional Outbox β€” это шаблон проСктирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² распрСдСлённых систСмах для обСспСчСния Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСний, особСнно ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ сообщСний. Π­Ρ‚ΠΎΡ‚ шаблон ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ атомарности ΠΌΠ΅ΠΆΠ΄Ρƒ измСнСниями Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ событий, гарантируя, Ρ‡Ρ‚ΠΎ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  1. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, создаётся запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ outbox. Π­Ρ‚Π° запись содСрТит сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ сСрвисам.
  2. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ создания записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ outbox происходит Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с основной бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ запись сообщСния Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ.
  3. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ сообщСния ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ outbox ΠΈ отправляСт ΠΈΡ… Π² Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний.
  4. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСния запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ outbox помСчаСтся ΠΊΠ°ΠΊ обработанная ΠΈ спустя ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя удаляСтся.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • Гарантированная доставка сообщСний: сообщСния Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ вмСстС с бизнСс-опСрациями, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹, Π° сообщСниС Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ.
  • Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹: использованиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ outbox вмСсто распрСдСлённых Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (2PC) Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΈ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ слоТных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

НСдостатки:

  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°: ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСний Ρ‡Π΅Ρ€Π΅Π· Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² доставкС сообщСний, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ.
  • Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…: Ρ‚Π°Π±Π»ΠΈΡ†Π° outbox Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ хранСния ΠΈ управлСния, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, особСнно ΠΏΡ€ΠΈ большом ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ сообщСний.

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ outbox Π² вашСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для хранСния сообщСний, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π² Kafka.

ВозмоТная структура outbox Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

CREATE TABLE outbox (
    id BIGSERIAL PRIMARY KEY,
    topic VARCHAR(255) NOT NULL,
    payload TEXT NOT NULL,
    status VARCHAR(20) DEFAULT 'PENDING',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • id: Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ записи.
  • topic: НазваниС Ρ‚ΠΎΠΏΠΈΠΊΠ°/ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ событиС.
  • payload: Π΄Π°Π½Π½Ρ‹Π΅ события.
  • status: Бтатус ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (PENDING, SENT, FAILED).
  • created_at ΠΈ updated_at: Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ для отслСТивания создания ΠΈ обновлСния записи.

ΠœΠ΅Ρ‚Π° информация

ΠžΠ±Π»Π°ΡΡ‚ΡŒ:: 00 АрхитСктура ПО
Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ:: ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ::
Π‘ΠΎΠ·Π΄Π°Π½Π°:: 2024-11-15
Автор::

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ