🔵 عنوان مقاله
How to Implement the Outbox Pattern in Go and Postgres
🟢 خلاصه مقاله:
** الگوی Outbox روشی عملی برای حذف مشکل دونوشتن و تضمین تحویل مطمئن پیامهاست. در این روش، تغییرات دامنه و یک رکورد رویداد در جدول outbox داخل همان تراکنش Postgres ذخیره میشوند؛ سپس یک پردازشگر در Go رویدادها را از جدول خوانده و به پیامرسانهایی مانند Kafka یا RabbitMQ منتشر میکند. با استفاده از فیلدهایی مانند ID، کلید موجودیت، نوع رویداد، payload به صورت JSONB، وضعیت/تعداد تلاش، و زمانها، همگامی داده و پیام تضمین میشود. پردازشگر با انتخاب دستههای کوچک و بهکارگیری SELECT … FOR UPDATE SKIP LOCKED از رقابت جلوگیری کرده، پس از انتشار وضعیت را به «پردازششده» تغییر میدهد و شکستها را با backoff و صف خطا مدیریت میکند. این الگو تحویل حداقل-یکبار را فراهم میکند و با مصرفکنندههای idempotent میتوان به پردازش مؤثرِ یکباره رسید. برای کارایی بهتر، ایندکسگذاری بر status و created_at، پارتیشنبندی جدول، حفظ ترتیب بر اساس کلید موجودیت و نظارت بر عمق صف و تأخیر انتشار توصیه میشود. بهعنوان جایگزین، CDC با منبعخوانی منطقی Postgres (مثلاً Debezium) میتواند بهجای polling استفاده شود، هرچند پیچیدگی عملیاتی بیشتری دارد. با آزمونهای یکپارچه، مدیریت مهاجرتهای شِما و پاکسازی دادههای پردازششده، پیادهسازی در Go و Postgres به پلی پایدار بین پایگاهداده و سامانه پیامرسان تبدیل میشود؛ همان رویکردی که Alex Pliutau در معرفی پیادهسازی Outbox با Go و Postgres بر آن تأکید دارد.
#OutboxPattern #Go #Postgres #Microservices #EventDriven #TransactionalOutbox #Reliability #Messaging
🟣لینک مقاله:
https://postgresweekly.com/link/174464/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
How to Implement the Outbox Pattern in Go and Postgres
🟢 خلاصه مقاله:
** الگوی Outbox روشی عملی برای حذف مشکل دونوشتن و تضمین تحویل مطمئن پیامهاست. در این روش، تغییرات دامنه و یک رکورد رویداد در جدول outbox داخل همان تراکنش Postgres ذخیره میشوند؛ سپس یک پردازشگر در Go رویدادها را از جدول خوانده و به پیامرسانهایی مانند Kafka یا RabbitMQ منتشر میکند. با استفاده از فیلدهایی مانند ID، کلید موجودیت، نوع رویداد، payload به صورت JSONB، وضعیت/تعداد تلاش، و زمانها، همگامی داده و پیام تضمین میشود. پردازشگر با انتخاب دستههای کوچک و بهکارگیری SELECT … FOR UPDATE SKIP LOCKED از رقابت جلوگیری کرده، پس از انتشار وضعیت را به «پردازششده» تغییر میدهد و شکستها را با backoff و صف خطا مدیریت میکند. این الگو تحویل حداقل-یکبار را فراهم میکند و با مصرفکنندههای idempotent میتوان به پردازش مؤثرِ یکباره رسید. برای کارایی بهتر، ایندکسگذاری بر status و created_at، پارتیشنبندی جدول، حفظ ترتیب بر اساس کلید موجودیت و نظارت بر عمق صف و تأخیر انتشار توصیه میشود. بهعنوان جایگزین، CDC با منبعخوانی منطقی Postgres (مثلاً Debezium) میتواند بهجای polling استفاده شود، هرچند پیچیدگی عملیاتی بیشتری دارد. با آزمونهای یکپارچه، مدیریت مهاجرتهای شِما و پاکسازی دادههای پردازششده، پیادهسازی در Go و Postgres به پلی پایدار بین پایگاهداده و سامانه پیامرسان تبدیل میشود؛ همان رویکردی که Alex Pliutau در معرفی پیادهسازی Outbox با Go و Postgres بر آن تأکید دارد.
#OutboxPattern #Go #Postgres #Microservices #EventDriven #TransactionalOutbox #Reliability #Messaging
🟣لینک مقاله:
https://postgresweekly.com/link/174464/web
➖➖➖➖➖➖➖➖
👑 @Database_Academy
packagemain.tech
How to implement the Outbox pattern in Go and Postgres
How and why to use the Outbox pattern to build a robust event-driven system.