ٹرانزیکشنل آؤٹ بکس پیٹرن: مائیکرو سروسز میں قابل اعتماد ایونٹ پبلشنگ

ٹرانزیکشنل آؤٹ بکس پیٹرن: مائیکرو سروسز میں قابل اعتماد ایونٹ پبلشنگ

جدید ایونٹ ڈریون مائیکرو سروسز آرکیٹیکچر (Event-Driven Architecture) میں سروسز ایک دوسرے کو تبدیلیوں کی اطلاع دینے کے لیے ایونٹس (جیسے OrderCreated یا PaymentProcessed) جاری کرتی ہیں۔

تاہم ایونٹ کو 100% قابل اعتماد طریقے سے پبلش کرنا ایک بڑا چیلنج ہے: آپ یہ کیسے یقینی بنا سکتے ہیں کہ ڈیٹا بیس کی اپ ڈیٹ اور ایونٹ کی اشاعت دونوں ایک ساتھ کامیاب ہوں یا دونوں ناکام ہوں؟

اگر مائیکرو سروس اپنے لوکل ڈیٹا بیس کو اپ ڈیٹ کرے اور پھر نیٹ ورک کے ذریعے میسج بروکر (جیسے Apache Kafka یا RabbitMQ) کو میسج بھیجنے کی کوشش کرے، تو نیٹ ورک میں خرابی ڈیٹا میں عدم مطابقت پیدا کر سکتی ہے۔

اس مسئلے کے حل کے لیے Transactional Outbox Pattern استعمال کیا جاتا ہے۔


بنیادی مسئلہ: ڈوئل رائٹ پرابلم (Dual-Write Problem)

جب کوئی سروس مسلسل دو الگ الگ رائٹ آپریشنز کرنے کی کوشش کرتی ہے:

  1. لوکل ڈیٹا بیس میں ڈیٹا محفوظ کرنا۔
  2. میسج بروکر کو ایونٹ بھیجنا۔
ڈوئل رائٹ پرابلم کی تصوير

اگر ڈیٹا بیس میں ریکارڈ محفوظ ہو جائے لیکن نیٹ ورک کی خرابی کے باعث Kafka کو میسج نہ جا سکے، تو ڈیٹا بیس میں آرڈر موجود ہوگا مگر دیگر سروسز کو علم نہیں ہوگا۔ نتیجہ: ڈیٹا کا عدم توازن۔


ٹرانزیکشنل آؤٹ بکس پیٹرن کیا ہے؟

یہ پیٹرن ریلیشنل ڈیٹا بیس کی ACID Transactions خصوصیت کو استعمال کرتا ہے۔

نیٹ ورک پر براہ راست میسج بھیجنے کے بجائے، سروس ایونٹ کو ایک مخصوص Outbox Table میں اسی لوکل ٹرانزیکشن کے اندر محفوظ کرتی ہے جس میں بزنس ڈیٹا محفوظ ہوتا ہے۔

ACID گارنٹی کی وجہ سے: یا تو دونوں ریکارڈز ایک ساتھ محفوظ ہوں گے یا دونوں منسوخ ہو جائیں گے۔

بعد میں، ایک پس منظر پروسیس (Message Relay) آؤٹ بکس ٹیبل سے ڈیٹا پڑھ کر میسج بروکر کو منتقل کرتا ہے۔


میسج ریلی کی حکمت عملیاں: Polling Publisher بمقابلہ CDC (Debezium)

پولنگ پبلشر بمقابلہ ڈیبیزیئم سی ڈی سی

1. پولنگ پبلشر (Polling Publisher)

ایک شیڈولڈ کام وقفے وقفے سے غیر پروسیس شدہ ریکارڈز کو دیکھتا ہے، Kafka پر پبلش کرتا ہے اور اسٹیٹس اپ ڈیٹ کرتا ہے۔

  • فوائد: سادہ اور اضافی انفراسٹرکچر کی ضرورت نہیں۔
  • نقصانات: پولنگ کی تاخیر اور ڈیٹا بیس پر بار۔

2. چینج ڈیٹا کیپچر (CDC مع Debezium)

ڈیبیزیئم ڈیٹا بیس لاگز (PostgreSQL WAL) کو لائیو پڑھتا ہے اور تبدیلیوں کو فوراً Kafka میں منتقل کرتا ہے۔

  • فوائد: تقریباً صفر تاخیر اور بہترین کارکردگی۔
  • نقصانات: Kafka Connect کے اضافی سیٹ اپ کی ضرورت۔

خلاصہ

مائیکرو سروسز کے آرکیٹیکچر میں Transactional Outbox Pattern ڈیٹا کی درستگی اور سسٹم کی بہتری کے لیے انتہائی اہم اور لازمی پیٹرن ہے۔