تابستون تو راهه. قبل از تغییر قیمت‌ها یادگیری رو شروع کن ...
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ محمد شکری
how handle [Distributed Transactions] in microservice architecture
محسن موحد حل شده توسط محسن موحد

سلام وقت بخیر 
یه رویه مناسب واسه هندل کردن Distributed Transaction‌ها می‌فرمایید .
با توجه به این نکته که ممکنه تا n لول ما دیپ بشیم در تراکنش ها

به عنوان مثال دوتا مایکرو داریم تو اولی به ازای یه منطقی میره داخل یه usecase مایکرو دیگه که حالا اونم ممکنه بر اساس منطقی که داره بره داخل یه یوزکیس از یه مایکرو دیگه که در نهایت در یوزکیس مبدا commit بشه. اگه هر کدوم از این موارد rollback شد در هر لولی چطوری مابقی رو هندل کنیم.
دیتا بیس‌ها و اصلا زبان‌ها و استک‌های متفاوت
با تشکر

مقالات مختلفی برای پیاده سازی چنین چیزی الگوی Saga رو پیشنهاد دادن.

تراکنش رو به چند مرحله تقسیم میکنه و هر مرحله با انتشار یک رویداد میره مرحله بعد. تراکنش اصلی تبدیل میشه بع دنباله ای از تراکنش‌‌های کوچیکتر(local) و هر تراکنش کوچک به‌ طور مستقل درون یک سرویس انجام میشه.

اگر هر مرحله به مشکل خورد، مراحل قبلی می‌توانند با استفاده از compensation به حالت قبلی برگردند.

در این الگو، سرویس‌‌ها مستقیما از طریق ارسال رویدادها با یکدیگر ارتباط برقرار می‌ کنند.

یک سرویس مرکزی (Orchestrator) تصمیمات اصلی رو میگیره و وظایفو بین سرویس‌‌ها توزیع می‌ کند.

1. ضمنا از الگوهای طراحی مانند CQRS برای جداسازی وظایف خواندن و نوشتن داده‌ها استفاده کنید.

2. همچنین از پایگاه‌های داده ای که از تراکنش‌های توزیع شده پشتیبانی می‌کنند استفاده کنید.

3. و از ابزارهای مدیریت تراکنش مانند Apache Kafka یا RabbitMQ برای مدیریت پیام‌ها بین میکروسرویس‌ها استفاده کنید.

 

این مقالات رو میتونید مطالعه کنید:

لینک 1

لینک 2

لینک 3

لینک 4

لینک 5

بهترین پاسخ
محسن موحد ۲۳ اردیبهشت ۱۴۰۳، ۰۵:۳۲

درود بر جناب موحد عزیز

عالی بود ممنون

محمد شکری ۲۴ اردیبهشت ۱۴۰۳، ۰۲:۵۷