بازگشت به عقب در Microservices – انجمن DEV

خوشحال می شوم که بازگرداندن اپلیکیشن میکروسرویس را برای تجارت الکترونیک، با ترکیب بهترین شیوه ها و رسیدگی به چالش های بالقوه توضیح دهم:
درک الزامات بازگشت مجدد در تجارت الکترونیک
سازگاری تراکنش: هنگامی که در طول یک به روز رسانی شامل چندین ریزسرویس (مثلاً قرار دادن سفارش شامل موجودی محصول، حساب کاربری و پرداخت) یک شکست رخ می دهد، بازگشت مداوم در تمام سرویس های آسیب دیده بسیار مهم است.
سناریوهای موفقیت جزئی: اگر برخی از ریزسرویس ها موفق شوند اما برخی دیگر شکست بخورند (مثلاً پرداخت انجام شود اما به روز رسانی موجودی ناموفق باشد)، مکانیزمی برای لغو عملیات تکمیل شده و رسیدگی به عقب نشینی های جزئی ضروری است.
یکپارچگی داده ها: استراتژی های بازگشت باید یکپارچگی داده ها را با جلوگیری از ناهماهنگی داده ها یا از دست دادن داده ها حفظ کنند.
تکنیکهای بازگشت به عقب برای خدمات خرد تجارت الکترونیک
معاملات جبرانی:
هر میکروسرویس تراکنش جبرانی را پیاده سازی می کند که در صورت شکست کل تراکنش، اقدامات خود را معکوس می کند.
مثال (ثبت سفارش):
خدمات سفارش: ثبت سفارش ایجاد کنید (جبران: حذف سفارش).
خدمات موجودی: کاهش موجودی (جبران: افزایش موجودی).
خدمات پرداخت: دریافت پرداخت (جبران: پرداخت بازپرداخت).
مزایا: توسعه خدمات انعطاف پذیر و مستقل.
معایب: نیاز به طراحی و اجرای دقیق برای همه میکروسرویس ها دارد.
منبع یابی رویداد و CQRS (تفکیک مسئولیت پرس و جوی فرمان):
رویدادها نشان دهنده تغییرات حالت در سیستم هستند.
CQRS عملیات خواندن (پرس و جو) و نوشتن (فرمان) را از هم جدا می کند.
بازگشت مجدد شامل پخش مجدد رویدادها از یک فروشگاه دائمی (به عنوان مثال، پایگاه داده رویداد) تا نقطه شکست، به طور بالقوه با اقدامات جبرانی است.
مزایا: سازگاری قوی، مسیرهای حسابرسی، مقیاس پذیری برای خواندن.
معایب: افزایش پیچیدگی، سربار عملکرد بالقوه.
پیام رسانی با بی قدرتی:
از صف های پیام رسانی ناهمزمان برای ارتباط بین میکروسرویس ها استفاده کنید.
پیامها را بهگونهای طراحی کنید که فاقد قدرت باشند (حتی اگر چندین بار پردازش شوند، همان اثر را ایجاد میکنند).
در صورت خرابی، پیام ها را دوباره پخش کنید تا عملیات را دوباره امتحان کنید.
مزایا: اتصال شل، تحمل خطا، پتانسیل برای حذف مجدد پیام.
معایب: به زیرساخت های اضافی و ملاحظات طراحی پیام نیاز دارد.
قطع کننده های مدار و تایم اوت ها:
کلیدهای مدار را برای توقف خودکار ارسال درخواست به یک میکروسرویس معیوب اجرا کنید.
برای جلوگیری از توقف درخواستها، زمانبندی برای تماسهای میکروسرویس تنظیم کنید.
هنگامی که یک شکست رخ می دهد، مشتری بازگشت به عقب را آغاز می کند یا در صورت لزوم دوباره تلاش می کند.
مزایا: جداسازی خطا، جلوگیری از خرابی های آبشاری.
معایب: برای رفتار موثر نیاز به پیکربندی و تنظیم دارد.
انتخاب تکنیک مناسب
تکنیک بهینه به نیازها و پیچیدگی برنامه تجارت الکترونیک خاص شما بستگی دارد. در نظر گرفتن:
الگوهای معاملات
نیاز به سازگاری داده ها
پیچیدگی توسعه میکروسرویس
ملزومات اجرا
ملاحظات اضافی
هماهنگی بازگشت: یک هماهنگ کننده مرکزی (مثلاً الگوی حماسه) یا مکانیزم اجماع توزیع شده را برای هماهنگ کردن عقبگرد بین خدمات در صورت لزوم تعیین کنید.
تست بازگشت: سناریوهای برگشتی را به طور کامل آزمایش کنید تا از ثبات داده ها و بازیابی مناسب اطمینان حاصل کنید.
نظارت و هشدار: بر سلامت برنامه و زیرساخت نظارت کنید تا خرابیها را شناسایی کرده و به طور پیشگیرانه بازگردانی را آغاز کنید.
کد مثال (تصویری – جایگزین کد مخصوص زبان)
تراکنش جبرانی (سرویس سفارش):
پایتون
def create_order(self, order_data):
تلاش كردن:
# ثبت سفارش ایجاد کنید
#…
بازگشت order_id
به جز استثنا به عنوان e:
self.compensate_order(order_id)
raise e # Re-raise برای انتشار خطا
def compensate_order(self, order_id):
# حذف رکورد سفارش
#…
منبع یابی رویداد (مثال ثبت سفارش):
پایتون
def place_order (self, order_data):
# رویداد سفارش ایجاد کنید
رویداد = OrderPlacedEvent (data_order)
# رویداد فروشگاه در فروشگاه دائمی
self.event_store.save(رویداد)
به یاد داشته باشید که کد را با زبان برنامه نویسی و چارچوب خاص خود تنظیم کنید.
با اجرای مؤثر استراتژیهای بازگشت، میتوانید از انعطافپذیری و قابلیت اطمینان معماری میکروسرویسهای تجارت الکترونیک خود، حتی در مواجهه با شکست، اطمینان حاصل کنید.