محمد قلع گر
محمد قلع گر
خواندن ۲ دقیقه·۲ سال پیش

Eventual Consistency در میکروسرویس

Eventual Consistency
Eventual Consistency

Eventual Consistency چیه ؟

Eventual Consistency یعنی دیتا در دو یا چند سرویس به صورت قطعی یکسان نیست و احتمالا یکسان است و ممکن است با تاخیر سینک شوند .


چرا Eventual Consistency به وجود میاد ؟

در میکروسرویس ها با هدف مستقل بودن هر سرویس ، از ارتباط های همزمان بین دو سرویس دوری می شود و سعی در ارتباط از طریق Message (Events,Commands) می باشد و از آنجایی که ضمانتی روی دریافت پیام ها وجود ندارد ممکن است دیتا در سایر سرویس ها با تاخیر بروزرسانی شود .

به عنوان مثال یک فروشگاه اینترنتی را در نظر بگیرید که سرویس انبارداری از سرویس سفارشات جداست ، بعد از اینکه یک سفارش ثبت می شود سرویس سفارشات یک پیام برای سرویس انبارداری می کند که موجودی محصول را کاهش دهد ، حالا اگر این پیام به سرعت پردازش نشود ممکن است کاربر دیگری این محصول را سفارش دهد در صورتی که موجودی به پایان رسیده باشد .


با Eventual Consistency چه کنیم ؟

  • بپذیرید !

معمولا افرادی که تجربه کار با معماری Monolithic را دارند هنگام شروع کار با معماری Microservice یکی از چالش های جدی شون همین مبحث Eventual Consistency هست . درسته که با راه هایی می تونیم این مشکل رو بهبود بدیم ولی باید بپذیریم که این مساله در ذات این معماری هست و اگر نمی تونیم باهاش کنار بیایم بهتره سراغ معماری میکروسرویس نریم !


  • در تفکیک سرویس ها به این موضوع فکر کنید

یکی از اولین گام های طراحی معماری میکروسرویس ، تفکیک سرویس های مختلف می باشد ، برای اینکه از عواقب Eventual Consistency در امان باشید در هنگام تفکیک سرویس ها باید این نکته رو در نظر بگیرید که هر سرویس دارای دیتابیس جداگانه می باشد و دیتایی که از سایر سرویس ها دارد ممکن است با تاخیر به روز شود بنابراین دیتاهایی که وابستگی شدید به هم دارد رو در یک سرویس قرار بدید .


  • در طراحی محصول به این موضوع فکر کنید

یکی از راه های کاهش مشکلات ناشی از Eventual Consistency تطبیق طراحی محصول براساس تفکیک سرویس ها می باشد . به عنوان مثال در بخش نمایش لیست محصولات اگر این امکان را داشته باشید که دکمه افزودن به سبد خرید را غیرهمزمان با دریافت اطلاعات محصول نشان دهید ، بعد از دریافت لیست محصولات از سرویس انبارداری ، موجودی هر محصول را استعلام می کنید و در صورت موجود بودن ، دکمه اضافه به سبد خرید را نمایش می دهید .


  • از راهکارهای اطمینان بخش استفاده کنید

برای افزایش سرعت بروزرسانی اطلاعات در سرویس های مختلف می توانیم علاوه بر پیام هایی که از طریق Message Broker ها ارسال می شوند تسک های زمان بندی شده برای بروزرسانی اطلاعات داشته باشیم به عنوان مثال اگر اطلاعات در یک سرویس 1 با ایونت های سرویس 2 بروز می شود سرویس 1 می تواند هر چند ساعت سرویس 2 را فراخوانی کند و تغییرات را دریافت نماید .


شما از چه راهکاری برای این مساله استفاده می کنید ؟



eventual consistencymicroserviceeventdrivenُسبد خریدطراحی محصول
شاید از این پست‌ها خوشتان بیاید