🔥 FREE PRO OFFER OnlyLink.click Pro Version is 100% Free of Cost till 31 December, 2026! Claim Free Pro

کوریوگرافی بمقابلہ آرکیسٹریشن: مائیکرو سروسز میں تقسیم شدہ ورک فلو ڈیزائن کرنا

مائیکرو سروسز آرکیٹیکچر میں کوریوگرافی بمقابلہ آرکیسٹریشن

یک سنگی فن تعمیر میں، ایک پیچیدہ کاروباری لین دین کو انجام دینا — جیسے کہ ای کامرس آرڈر کو پورا کرنا — سیدھا ہے۔ تمام ڈیٹا ایک واحد رشتہ دار ڈیٹا بیس میں رہتا ہے، جس سے ڈویلپرز کو ایک ہی ACID ٹرانزیکشن کے اندر انوینٹری، ادائیگیوں اور شپنگ میں متعدد ڈیٹا بیس لکھنے کی اجازت دیتا ہے۔ اگر کسی بھی مقام پر کوئی خرابی واقع ہوتی ہے تو، ایک SQL ROLLBACK فوری طور پر سسٹم کی مستقل مزاجی کو بحال کرتا ہے۔

تاہم، جدید کلاؤڈ-نیٹیو سسٹم مائکرو سروسز آرکیٹیکچر کو اپناتے ہیں، جہاں ہر سروس اپنے ڈیٹا کی مالک ہوتی ہے اور الگ الگ API حدود کو ظاہر کرتی ہے۔ اس تقسیم شدہ تمثیل میں، ایک ہی اختتام سے آخر تک کاروباری آپریشن متعدد آزاد مائیکرو سروسز اور ڈیٹا بیس انجنوں پر محیط ہے۔

چونکہ دو فیز کمٹ (2PC) پروٹوکول کلاؤڈ نیٹ ورکس میں سست، مسدود، اور نازک ہوتے ہیں، اس لیے تقسیم شدہ نظاموں کو حتمی مستقل مزاجی کو برقرار رکھتے ہوئے کام کے بہاؤ کو متضاد طور پر مربوط کرنا چاہیے۔

یہ سافٹ ویئر آرکیٹیکٹس کو ڈیزائن کے ایک بنیادی فیصلے پر لے آتا ہے: کیا آپ کو تقسیم شدہ مائیکرو سروس ورک فلو کو منظم کرنے کے لیے کوریوگرافی یا آرکیسٹریشن کا استعمال کرنا چاہیے؟

اس جامع گائیڈ میں، ہم دونوں آرکیٹیکچرل پیٹرن کو توڑیں گے، حقیقی دنیا کی مشابہتیں دریافت کریں گے، آرکیٹیکچرل ٹریڈ آف کا تجزیہ کریں گے، Go اور Java میں پروڈکشن کوڈ کے نفاذ کا تفصیلی جائزہ لیں گے، اور آپ کے انفراسٹرکچر کے لیے صحیح پیٹرن کو منتخب کرنے کے لیے ایک فریم ورک قائم کریں گے۔


حقیقی دنیا کی تشبیہ: فلیش موب بمقابلہ سمفنی آرکسٹرا

دونوں نمونوں کے لیے ایک بدیہی ذہنی ماڈل بنانے کے لیے، غور کریں کہ انسانی فنکاروں کے گروہ اپنے اعمال کو کیسے مربوط کرتے ہیں:

کوریوگرافی کی تشبیہ: ایک فلیش موب ڈانسر نیٹ ورک

تصور کریں کہ پیشہ ورانہ اسٹریٹ ڈانسرز کا ایک گروپ فلیش موب روٹین پرفارم کر رہا ہے۔ اسٹیج پر کھڑا کوئی انسٹرکٹر نہیں ہے جو انفرادی رقاصوں کی طرف اشارہ کر کے ان کے اگلے اقدام کا حکم دے سکے۔ اس کے بجائے، ہر ڈانسر مرکزی میوزک ٹریک کو سنتا ہے اور اپنے ساتھ والے ڈانسر کی حرکات پر متحرک ردعمل ظاہر کرتا ہے۔

  • جب ڈانسر A پلٹنا مکمل کرتا ہے، ڈانسر B اس بصری اشارے کو پہچانتا ہے اور گھومنا شروع کر دیتا ہے۔
  • جب ڈانسر بی گھومنا ختم کرتا ہے، ڈانسر سی آگے بڑھتا ہے۔
  • اہم خصوصیت: وکندریقرت، رد عمل، اور خود مختار۔ ہر شریک مرکزی سمت کے بغیر اپنی ذمہ داری کو سمجھتا ہے۔

آرکیسٹریشن قیاس: ایک سمفنی آرکسٹرا

اب 70 ٹکڑوں کے کلاسیکی سمفنی آرکسٹرا کا تصور کریں۔ وائلن بجانے والے، ٹکرانے والے، اور سیلسٹ سٹیج پر ایک دوسرے کے ہاتھ دیکھ کر اشارہ نہیں لیتے۔ اس کے بجائے، ہر کوئی براہ راست کنڈکٹر کو دیکھتا ہے۔

  • کنڈکٹر وائلن کو اشارہ کرتا ہے کہ نرم تار کب بجانا ہے۔
  • کنڈکٹر ٹککر ہڑتال کا اشارہ دینے کے لیے ڈرم کی طرف اشارہ کرتا ہے۔
  • اگر کوئی موسیقار ٹیمپو چھوٹ جاتا ہے، تو کنڈکٹر ٹیمپو ایڈجسٹمنٹ کو مربوط کرتا ہے یا توقف کا اشارہ کرتا ہے۔
  • اہم خصوصیت: مرکزی، واضح، اور کمانڈ سے چلنے والا۔ ایک واحد رہنما تمام شرکاء کو ہدایت کرتا ہے۔

1. کوریوگرافی آرکیٹیکچر: ڈی سینٹرلائزڈ اور ایونٹ پر مبنی

کوریوگرافی میں، تقسیم شدہ مائیکرو سروسز مرکزی ماسٹر کوآرڈینیٹر کے بغیر رد عمل سے بات چیت کرتی ہیں۔ جب بھی ان کی داخلی حالت تبدیل ہوتی ہے، سروسز ڈومین ایونٹس کو غیر مطابقت پذیر میسج بروکر (جیسے Apache Kafka، RabbitMQ، یا AWS EventBridge) کو شائع کرتی ہیں۔ ڈاؤن اسٹریم مائیکرو سروسز متعلقہ ایونٹ کے عنوانات کو سبسکرائب کرتی ہیں اور آزادانہ طور پر فیصلہ کرتی ہیں کہ آگے کیا اقدام کرنا ہے۔

ایونٹ سے چلنے والی کوریوگرافی مائیکرو سروسز آرکیٹیکچر ڈایاگرام

کوریوگرافی کے تحت ای کامرس فلو

کوریوگرافی کا استعمال کرتے ہوئے ای کامرس چیک آؤٹ کے عمل پر غور کریں:

  1. آرڈر سروس: HTTP POST چیک آؤٹ کی درخواست وصول کرتا ہے، زیر التواء آرڈر کو اپنے ڈیٹا بیس میں لکھتا ہے، اور کافکا ایونٹ بس میں ایک OrderCreated ڈومین ایونٹ کا اخراج کرتا ہے۔
  2. ادائیگی کی خدمت: OrderCreated موضوع کو سبسکرائب کرتا ہے۔ ایونٹ موصول ہونے پر، یہ گاہک کے کریڈٹ کارڈ سے چارج کرتا ہے اور ایک PaymentProcessed ایونٹ کا اخراج کرتا ہے۔
  3. انوینٹری سروس: PaymentProcessed موضوع کو سبسکرائب کرتا ہے۔ یہ گودام کی اشیاء کو محفوظ رکھتا ہے اور ایک InventoryReserved ایونٹ کا اخراج کرتا ہے۔
  4. شپنگ سروس: InventoryReserved موضوع کو سبسکرائب کرتا ہے۔ یہ ایک شپنگ لیبل بناتا ہے اور ایک OrderShipped ایونٹ کو خارج کرتا ہے۔
  5. اطلاع کی خدمت: OrderShipped کو سبسکرائب کرتی ہے اور گاہک کو ٹریکنگ ای میل بھیجتی ہے۔

کوریوگرافی کے فوائد

  • اعلی خودمختاری اور ڈھیلے جوڑے: سروسز کو ڈاون اسٹریم ہینڈلرز کے وجود کا علم نہیں ہے۔ آرڈر سروس صرف یہ جانتی ہے کہ آرڈر بنایا گیا تھا۔ اس سے کوئی فرق نہیں پڑتا کہ کون اس معلومات کو استعمال کرتا ہے۔
  • آزاد اسکیل ایبلٹی اور رفتار: ٹیمیں مائیکرو سروسز کو آزادانہ طور پر بنا، تعینات اور اسکیل کرسکتی ہیں۔ ایک نئی خصوصیت (مثال کے طور پر، تجزیاتی سروس ٹریکنگ سیلز) شامل کرنے کے لیے اپ اسٹریم کوڈ میں ترمیم کیے بغیر موجودہ ایونٹس کو سبسکرائب کرنے کی ضرورت ہوتی ہے۔
  • **ناکامی کا کوئی واحد نقطہ نہیں (SPOF): چونکہ کوئی مرکزی ورک فلو کوآرڈینیٹر نہیں ہے، اس لیے غیر متعلقہ سروس کی ناکامی پورے ایگزیکیوشن انجن کو نیچے نہیں لاتی ہے۔
  • اعلی کارکردگی اور تھرو پٹ: ایونٹ سے چلنے والی پب/سب اسٹریمنگ مطابقت پذیر HTTP/gRPC بلاکنگ لیٹنسی کے بغیر مطابقت پذیری کے ساتھ بڑے پیمانے پر ایونٹ کے حجم کو ہینڈل کرتی ہے۔

کوریوگرافی کے نقصانات

  • مضمون ورک فلو منطق: کوئی ایک کوڈ مقام اختتام سے آخر تک کاروباری عمل کی وضاحت نہیں کرتا ہے۔ پورے ورک فلو کو سمجھنے کے لیے ایک سے زیادہ کوڈ بیسز میں ایونٹ ہینڈلرز کو اکٹھا کرنے کی ضرورت ہوتی ہے۔
  • سائیکلک انحصار کا خطرہ: اگر مائیکرو سروسز محتاط موضوع کے ڈیزائن کے بغیر اوور لیپنگ عنوانات کو شائع اور سبسکرائب کرتی ہیں، تو لامحدود ایونٹ لوپس سسٹم میسج کیو کو کریش کر سکتے ہیں۔
  • پیچیدہ مشاہدہ اور تقسیم شدہ ٹریسنگ: 10 ایونٹ کے عنوانات میں ایک ہی آرڈر کے لین دین کو ٹریک کرنے کے لیے مضبوط تقسیم شدہ ٹریسنگ انفراسٹرکچر کی ضرورت ہوتی ہے (جیسے، OpenTelemetry، Jaeger، W3C ٹریس سیاق و سباق)۔
  • مشکل خرابی ہینڈلنگ اور معاوضے: اگر ادائیگی کامیاب ہونے کے بعد انوینٹری سروس ناکام ہوجاتی ہے، تو انوینٹری سروس کو ایک InventoryFailed ایونٹ کا اخراج کرنا ہوگا۔ ادائیگی کی خدمت کو اس واقعہ کو سننا چاہیے اور دستی طور پر رقم کی واپسی کے معاوضے کو متحرک کرنا چاہیے۔

2. آرکیسٹریشن آرکیٹیکچر: سنٹرلائزڈ اور کمانڈ پر مبنی

آرکیسٹریشن میں، ایک سرشار کوآرڈینیٹر سروس (ساگا آرکیسٹریٹر) واضح طور پر عملدرآمد کے سلسلے کی ہدایت کرتی ہے۔ آرکیسٹریٹر ورک فلو سٹیٹ مشین رکھتا ہے، ورکر مائیکرو سروسز کو کمانڈ کی درخواستیں (gRPC، HTTP REST، یا وقف کردہ کمانڈ قطاروں کے ذریعے) بھیجتا ہے، جوابات کا انتظار کرتا ہے، اور عمل درآمد کے اگلے مرحلے کا تعین کرتا ہے۔

ساگا آرکیسٹریشن مائیکرو سروسز آرکیٹیکچر ڈایاگرام

آرکیسٹریشن کے تحت ای کامرس کا بہاؤ

  1. آرڈر سروس / ساگا آرکیسٹریٹر: چیک آؤٹ کی درخواست وصول کرتا ہے اور ریاست ORDER_PENDING میں OrderSagaCoordinator ورک فلو مثال کو فوری کرتا ہے۔ مرحلہ 1 (ادائیگی کا حکم): آرکیسٹریٹر PaymentService.ExecutePayment() کو کال کرتا ہے۔ ادائیگی کی خدمت ادائیگی پر کارروائی کرتی ہے اور SUCCESS واپس کرتی ہے۔
  2. مرحلہ 2 (انوینٹری کمانڈ): آرکیسٹریٹر SUCCESS وصول کرتا ہے اور InventoryService.ReserveStock() کو کال کرتا ہے۔ انوینٹری سروس اسٹاک محفوظ رکھتی ہے اور SUCCESS واپس کرتی ہے۔
  3. مرحلہ 3 (شپنگ کمانڈ): آرکیسٹریٹر ShippingService.CreateShipment() کو کال کرتا ہے۔ شپنگ سروس ٹریکنگ کی تفصیلات واپس کرتی ہے۔
  4. مرحلہ 4 (تکمیل): آرکیسٹریٹر اپنے اسٹیٹ اسٹور میں آرڈر کی حیثیت کو ORDER_COMPLETED میں اپ ڈیٹ کرتا ہے۔

اگر InventoryService.ReserveStock() مرحلہ 2 کے دوران ناکام ہوجاتا ہے، آرکیسٹریٹر ترتیب وار رول بیک کمانڈز کو انجام دیتا ہے:

  • مرحلہ 1 کو کالعدم کرنے کے لیے PaymentService.RefundPayment() کی درخواست کرتا ہے۔
  • ساگا حالت کو ORDER_CANCELLED میں اپ ڈیٹ کرتا ہے۔

آرکیسٹریشن کے فوائد

  • واضح اور سنٹرلائزڈ ورک فلو مرئیت: کاروبار کا پورا عمل ایک واحد ریاستی مشین کی تعریف یا ورک فلو DSL میں واضح طور پر نظر آتا ہے (مثلاً، وقتی ورک فلو کی تعریف)۔ آسان ناکامی کا انتظام: اگر کوئی مرحلہ ناکام ہوجاتا ہے، تو آرکیسٹریٹر بالواسطہ واقعہ کی زنجیروں پر انحصار کیے بغیر پہلے سے مکمل شدہ تمام مراحل کے لیے براہ راست معاوضہ دینے والے لین دین کی درخواست کرتا ہے۔
  • سائیکلک انحصار کو روکتا ہے: ورکر سروسز ایک دوسرے کو براہ راست کال کرنے کے بجائے آرکیسٹریٹر کے ساتھ آگے پیچھے بات چیت کرتی ہیں۔
  • آسان جانچ اور آڈیٹنگ: آپ یونٹ ٹیسٹ میں سروس کے جوابات کا مذاق اڑاتے ہوئے ورک فلو اسٹیٹ ٹرانزیشن کی جانچ کر سکتے ہیں۔

آرکیسٹریشن کے نقصانات

  • زیادہ مرکزیت کا خطرہ (“خدا کی خدمت”): اگر ڈویلپرز ڈومین بزنس منطق کو آرکیسٹریٹر میں دھکیلتے ہیں، تو کارکن مائیکرو سروسز کو “گونگی CRUD سروسز” میں تبدیل ہونے کا خطرہ ہوتا ہے، اور ایک یک سنگی کور کو دوبارہ بناتا ہے۔
  • ** سخت API کپلنگ**: آرکیسٹریٹر کو تمام شریک مائیکرو سروسز کے API معاہدوں اور اختتامی نکات سے واضح طور پر آگاہ ہونا چاہیے۔
  • ممکنہ اسکیل ایبلٹی رکاوٹ: مرکزی آرکیسٹریٹر ہر فعال لین دین کے لیے ریاستی استقامت کو سنبھالتا ہے۔ ہائی تھرو پٹ سسٹم کے لیے افقی طور پر قابل توسیع اسٹیٹ انجن بیک اینڈز کی ضرورت ہوتی ہے۔

3. جامع تعمیراتی موازنہ

کوریوگرافی بمقابلہ آرکیسٹریشن کا جائزہ لینے کے لیے، ان کی اہم آپریشنل خصوصیات پر غور کریں:

کوریوگرافی بمقابلہ آرکیسٹریشن آرکیٹیکچرل موازنہ میٹرکس
طول و عرض کوریوگرافی (ایونٹ پر مبنی) آرکیسٹریشن (کمانڈ پر مبنی)
مواصلات کا انداز غیر مطابقت پذیر پب/سب (Event براڈکاسٹ) پوائنٹ ٹو پوائنٹ / RPC (Command + جواب)
سروس کپلنگ بہت کم (سروسز صرف ڈومین ایونٹس کو جانتی ہیں) میڈیم (آرکیسٹریٹر کارکن APIs کو جانتا ہے)
ریاست کا انتظام سروس ڈیٹا بیس میں تقسیم آرکیسٹریٹر اسٹیٹ انجن کے اندر سنٹرلائزڈ
ورک فلو مرئیت مضمر (ہینڈلرز میں پھیلاؤ) واضح (مرکزی ریاستی مشین کوڈ)
ناکامی کی بازیابی کمپلیکس (واقعات کی تلافی) سیدھا سادھا (آرکیسٹریٹر رول بیکس کا انتظام کرتا ہے)
تقسیم شدہ ٹریسنگ تمام عنوانات میں ارتباطی ID کی ضرورت ہے آرکیسٹریٹر لاگز کے ذریعے آسان ٹریسنگ
** مثالی ٹیم سائز** خود مختار ٹیموں کے ساتھ انجینئرنگ کے بڑے ادارے پیچیدہ انٹرپرائز فلو کا انتظام کرنے والی درمیانی/بڑی ٹیمیں
** کے لیے بہترین ** ہائی تھرو پٹ، سادہ لکیری ورک فلو بھاری کاروباری قواعد کے ساتھ پیچیدہ ملٹی برانچ ورک فلو

4. ہائبرڈ اپروچ: میکرو کوریوگرافی + مائیکرو آرکیسٹریشن

جدید انٹرپرائز فن تعمیر شاذ و نادر ہی ایک تمام یا کچھ بھی نہیں انتخاب پر مجبور کرتا ہے۔ اس کے بجائے، سرکردہ انجینئرنگ ٹیمیں ہائبرڈ آرکیٹیکچر کو ملازمت دیتی ہیں:

  • میکرو لیول (کوریوگرافی): اعلیٰ سطح کے پابند سیاق و سباق (مثلاً، سیلز باؤنڈڈ سیاق و سباق، سپلائی چین باؤنڈڈ سیاق و سباق، کسٹمر سپورٹ) کافکا یا NATS کے ذریعے ایونٹ پر مبنی کوریوگرافی کا استعمال کرتے ہوئے بات چیت کرتے ہیں۔
  • مائیکرو لیول (آرکیسٹریشن): ایک مخصوص پابند سیاق و سباق کے اندر (مثال کے طور پر، ادائیگی کے پابند سیاق و سباق کے اندر ملٹی گیٹ وے کی دوبارہ کوششوں، دھوکہ دہی کی توثیق، اور لیجر اندراجات کو سنبھالنا)، ایک مقامی آرکیسٹریٹر عمدہ خدمات کے عمل کو مربوط کرتا ہے۔
                  [EVENT BROKER: KAFKA]
             /              |              \
   (OrderCreated)     (PaymentSuccess)   (StockReserved)
           /                |                \
  [Order Domain]   [Payment Domain]   [Inventory Domain]
         |                  |                 |
  (Local Saga        (Local Saga       (Local Saga
  Orchestrator)      Orchestrator)     Orchestrator)

یہ ہائبرڈ پیٹرن انفرادی سروس ٹیموں کے اندر آرکیسٹریشن کی ریاستی مرئیت کو برقرار رکھتے ہوئے ڈومین کی حدود میں کوریوگرافی کے ڈھیلے جوڑے پیدا کرتا ہے۔


5. پروڈکشن کوڈ کی مثالیں۔

آئیے دیکھتے ہیں کہ گو اور جاوا (اسپرنگ بوٹ) کا استعمال کرتے ہوئے پیداواری ماحول میں دونوں نمونوں کو کیسے نافذ کیا جائے۔

گو عمل درآمد: کوریوگرافی ایونٹ کنزیومر بمقابلہ ساگا آرکیسٹریٹر

1. گو میں کوریوگرافی (کافکا ایونٹ کنزیومر)

کوریوگرافی میں، انوینٹری سروس کافکا سے PaymentProcessedEvent کو رد عمل سے سنتی ہے:

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"log"

	"github.com/segmentio/kafka-go"
)

type PaymentProcessedEvent struct {
	OrderID string  `json:"order_id"`
	Amount  float64 `json:"amount"`
	Status  string  `json:"status"`
}

type InventoryReservedEvent struct {
	OrderID string `json:"order_id"`
	Status  string `json:"status"`
}

func main() {
	reader := kafka.NewReader(kafka.ReaderConfig{
		Brokers: []string{"localhost:9092"},
		Topic:   "payment-events",
		GroupID: "inventory-service-group",
	})
	defer reader.Close()

	writer := kafka.NewWriter(kafka.WriterConfig{
		Brokers: []string{"localhost:9092"},
		Topic:   "inventory-events",
	})
	defer writer.Close()

	fmt.Println("Inventory Service listening for payment events...")

	for {
		msg, err := reader.ReadMessage(context.Background())
		if err != nil {
			log.Fatalf("Error reading message: %v", err)
		}

		var event PaymentProcessedEvent
		if err := json.Unmarshal(msg.Value, &event); err != nil {
			log.Printf("Invalid message payload: %v", err)
			continue
		}

		if event.Status == "SUCCESS" {
			log.Printf("[Choreography] Reserved stock for Order: %s", event.OrderID)
			
			// Publish downstream domain event reactively
			resEvent := InventoryReservedEvent{
				OrderID: event.OrderID,
				Status:  "RESERVED",
			}
			payload, _ := json.Marshal(resEvent)
			
			err = writer.WriteMessages(context.Background(), kafka.Message{
				Key:   []byte(event.OrderID),
				Value: payload,
			})
			if err != nil {
				log.Printf("Failed to publish inventory event: %v", err)
			}
		}
	}
}

2. گو میں آرکیسٹریشن (سنٹرل اسٹیٹ مشین کوآرڈینیٹر)

آرکیسٹریشن میں، ایک واضح ریاستی مشین اقدامات کو انجام دیتی ہے اور معاوضے کو سنبھالتی ہے:

package main

import (
	"context"
	"errors"
	"fmt"
	"log"
)

type OrderSagaOrchestrator struct {
	paymentClient *PaymentClient
	stockClient   *StockClient
}

func NewOrderSagaOrchestrator(p *PaymentClient, s *StockClient) *OrderSagaOrchestrator {
	return &OrderSagaOrchestrator{paymentClient: p, stockClient: s}
}

func (o *OrderSagaOrchestrator) ExecuteSaga(ctx context.Context, orderID string, amount float64) error {
	log.Printf("[Orchestrator] Starting Saga execution for Order ID: %s", orderID)

	// Step 1: Charge Payment
	if err := o.paymentClient.Charge(ctx, orderID, amount); err != nil {
		log.Printf("[Orchestrator] Payment failed for Order %s: %v", orderID, err)
		return err
	}
	log.Printf("[Orchestrator] Step 1 Complete: Payment Charged")

	// Step 2: Reserve Inventory
	if err := o.stockClient.Reserve(ctx, orderID); err != nil {
		log.Printf("[Orchestrator] Inventory reservation failed: %v. Initiating Compensation...", err)
		
		// Compensation Step: Refund Payment
		if refundErr := o.paymentClient.Refund(ctx, orderID, amount); refundErr != nil {
			log.Printf("[CRITICAL] Compensation failed! Manual intervention required for Order %s", orderID)
		}
		return errors.New("saga aborted: inventory unavailable")
	}

	log.Printf("[Orchestrator] Saga Completed Successfully for Order ID: %s", orderID)
	return nil
}

type PaymentClient struct{}
func (p *PaymentClient) Charge(ctx context.Context, id string, amt float64) error { return nil }
func (p *PaymentClient) Refund(ctx context.Context, id string, amt float64) error { return nil }

type StockClient struct{}
func (s *StockClient) Reserve(ctx context.Context, id string) error { return errors.New("out of stock") }

func main() {
	saga := NewOrderSagaOrchestrator(&PaymentClient{}, &StockClient{})
	_ = saga.ExecuteSaga(context.Background(), "ORD-9982", 149.99)
}

جاوا (اسپرنگ بوٹ) کا نفاذ

1. جاوا میں کوریوگرافی (اسپرنگ کلاؤڈ اسٹریم / کافکا سننے والا)

package com.ghaznix.microservices.choreography;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.function.Function;

public record PaymentProcessedEvent(String orderId, String status, double amount) {}
public record InventoryReservedEvent(String orderId, String status) {}

@Configuration
public class InventoryChoreographyProcessor {

    @Bean
    public Function<PaymentProcessedEvent, InventoryReservedEvent> processPaymentEvent() {
        return paymentEvent -> {
            System.out.println("[Choreography Java] Processing payment event for order: " + paymentEvent.orderId());

            if ("SUCCESS".equals(paymentEvent.status())) {
                // Reserve stock in database...
                System.out.println("[Choreography Java] Reserved inventory for: " + paymentEvent.orderId());
                return new InventoryReservedEvent(paymentEvent.orderId(), "SUCCESS");
            } else {
                return new InventoryReservedEvent(paymentEvent.orderId(), "FAILED");
            }
        };
    }
}

2. جاوا میں آرکیسٹریشن (اعلانیہ اسٹیٹ کوآرڈینیٹر)

package com.ghaznix.microservices.orchestration;

import org.springframework.stereotype.Service;

@Service
public class OrderSagaOrchestratorService {

    private final PaymentServiceClient paymentClient;
    private final InventoryServiceClient inventoryClient;
    private final ShippingServiceClient shippingClient;

    public OrderSagaOrchestratorService(PaymentServiceClient p, InventoryServiceClient i, ShippingServiceClient s) {
        this.paymentClient = p;
        this.inventoryClient = i;
        this.shippingClient = s;
    }

    public boolean processCheckoutSaga(String orderId, double totalAmount) {
        System.out.println("[Orchestrator Java] Initiating Saga Workflow for Order: " + orderId);

        // Step 1: Execute Payment
        boolean paymentSuccess = paymentClient.processPayment(orderId, totalAmount);
        if (!paymentSuccess) {
            System.err.println("[Orchestrator Java] Step 1 Failed: Aborting Saga.");
            return false;
        }

        // Step 2: Reserve Inventory
        boolean inventorySuccess = inventoryClient.reserveStock(orderId);
        if (!inventorySuccess) {
            System.err.println("[Orchestrator Java] Step 2 Failed: Triggering Compensation.");
            paymentClient.refundPayment(orderId, totalAmount);
            return false;
        }

        // Step 3: Trigger Shipping
        boolean shippingSuccess = shippingClient.createShipment(orderId);
        if (!shippingSuccess) {
            System.err.println("[Orchestrator Java] Step 3 Failed: Compensating Step 2 & Step 1.");
            inventoryClient.releaseStock(orderId);
            paymentClient.refundPayment(orderId, totalAmount);
            return false;
        }

        System.out.println("[Orchestrator Java] Saga Executed Successfully.");
        return true;
    }
}

6. مقبول انڈسٹری ٹولنگ لینڈ اسکیپ

اس پر منحصر ہے کہ آپ کس تعمیراتی سمت کا انتخاب کرتے ہیں، اوپن سورس اور کلاؤڈ ایکو سسٹم وقف شدہ انفراسٹرکچر انجن پیش کرتا ہے:

کوریوگرافی ماحولیاتی نظام

  • میسج اسٹریمنگ: اپاچی کافکا، اپاچی پلسر، ربیٹ ایم کیو، این اے ٹی ایس جیٹ اسٹریم۔
  • کلاؤڈ ایونٹ روٹرز: AWS EventBridge، Azure Event Grid، Google Cloud Eventarc۔
  • سکیمہ رجسٹریاں: سنگم اسکیما رجسٹری (ایورو/پروٹوبف گورننس کے لیے)۔

آرکیسٹریشن ماحولیاتی نظام

  • ورک فلو کوڈ انجن: Temporal.io (Go/Java/TypeScript پائیدار عملدرآمد انجن)، Cadence۔
  • کلاؤڈ مینیجڈ کوآرڈینیٹرز: AWS اسٹیپ فنکشنز، Azure Logic Apps، GCP ورک فلوز۔
  • BPMN اور انٹرپرائز انجن: Camunda 8 (Zeebe)، نیٹ فلکس کنڈکٹر۔

7. فیصلہ میٹرکس: کیسے انتخاب کریں؟

اپنے مائیکرو سرویس پلیٹ فارم کے لیے کوریوگرافی اور آرکیسٹریشن کے درمیان فیصلہ کرتے وقت، اس فیصلے کے اصول میٹرکس کا استعمال کریں:

                              [Start: System Architecture Assessment]
                                                |
                              Is the workflow complex with >4 steps 
                              or strict business auditing rules?
                                           /         \
                                     (YES)             (NO)
                                     /                   \
               [Choose: Saga Orchestration]    Does the system require 
               (e.g., Temporal / Camunda)      ultra-high event streaming velocity?
                                                   /              \
                                             (YES)                  (NO)
                                             /                        \
                            [Choose: Event Choreography]      [Choose: Simple Choreography]
                            (e.g., Apache Kafka / NATS)       (e.g., RabbitMQ Pub/Sub)

کوریوگرافی کا انتخاب کریں اگر:

  1. آپ کا ورک فلو 2-4 سادہ، لکیری مراحل پر مشتمل ہے۔
  2. ہائی ایونٹ اسٹریمنگ تھرو پٹ اور سب ملی سیکنڈ ڈیلیوری میں تاخیر اولین ترجیحات ہیں۔
  3. آپ کی انجینئرنگ ٹیم کو خود مختار ڈومین اسکواڈز میں منظم کیا گیا ہے جو آزادانہ طور پر خدمات کی تعمیر اور تعیناتی کرتے ہیں۔
  4. آپ کے پاس پہلے سے ہی مضبوط تقسیم شدہ ٹریسنگ اور اے پی ایم ٹولنگ (اوپن ٹیلی میٹری، ڈیٹا ڈوگ) ہے۔

آرکیسٹریشن کا انتخاب کریں اگر:

  1. آپ کے کاروباری عمل میں پیچیدہ حالت کی منتقلی، کثیر شاخوں کی مشروط منطق، یا وقتی تاخیر شامل ہوتی ہے (مثال کے طور پر، “گاہک کی منظوری کے لیے 3 دن انتظار کریں”)۔
  2. آپ کی تعمیل اور آڈیٹنگ کے تقاضے ہر لین دین کی درست حالت کے مرکزی لاگ کا مطالبہ کرتے ہیں۔
  3. آپ کو حسب ضرورت ایونٹ چیننگ منطق لکھے بغیر ناکام اقدامات کے لیے مضبوط، خودکار معاوضہ رول بیکس کی ضرورت ہے۔
  4. آپ انٹرپرائز مالیاتی لین دین کا انتظام کر رہے ہیں (مثلاً، بینکنگ، انشورنس کلیم پروسیسنگ)۔

نتیجہ

نہ ہی کوریوگرافی اور نہ ہی آرکیسٹریشن عالمی سطح پر برتر ہے۔ کوریوگرافی مضمر ورک فلو کی مرئیت اور پیچیدہ تقسیم شدہ ٹریسنگ کی قیمت پر ڈھیلے جوڑے، ایونٹ تھرو پٹ، اور سروس کی خودمختاری کو زیادہ سے زیادہ کرتی ہے۔ آرکیسٹریشن سخت API کپلنگ اور آرکیسٹریٹر انفراسٹرکچر مینجمنٹ کی قیمت پر واضح اسٹیٹ مینجمنٹ، سنٹرلائزڈ آڈٹ ایبلٹی، اور ڈیٹرمنسٹک ناکامی ریکوری فراہم کرتا ہے۔

دونوں نمونوں کی خوبیوں کو سمجھ کر — اور مائیکرو آرکیسٹریشن کے ساتھ ہائبرڈ میکرو کوریوگرافی کا فائدہ اٹھاتے ہوئے جہاں مناسب ہو — آپ لچکدار، توسیع پذیر مائیکرو سروس آرکیٹیکچرز بنا سکتے ہیں جو کلاؤڈ ماحول میں تقسیم شدہ لین دین کو احسن طریقے سے سنبھالتے ہیں۔

Ghaznix Ecosystem Products

Empower Your Digital Presence & Workflows

Explore top-tier tools built by Ghaznix to streamline your links, surveys, and brand growth.