Saeid Noormohammadi
Saeid Noormohammadi
خواندن ۲ دقیقه·۱ ماه پیش

انواع Coupling در میکروسرویس ها

در معماری میکروسرویس ها یکی از مهم ترین چالش ها حفظ تعادل بین Coupling و Cohesion سرویس ها می باشد. کوپلینگ بین سرویس ها انواع مختلفی دارد که هرکدام از آنها اثرات متفاوتی بر طراحی دارند. در اینجا برخی از مهم ترین انواع آن مانند Domain Coupling, Temporal Coupling, Pass-Through Coupling و Common Coupling را باهم بررسی میکنیم.


Domain Coupling

در این نوع کوپلینگ سرویس هایی که داریم برای انجام یک عملیات خاص به یکدیگر وابسته هستند. برای مثال اگر OrderService برای انجام رزرو به InventoryService و پرداخت به PaymentService نیاز داشته باشد, یک Domain Coupling بین این سرویس ها داریم. خب منطقا نمیتوانیم این کوپلینگ را به صورت کلی حذف کنیم, ولی میتوانیم تا حدودی آن را کاهش دهیم تا این وابستگی بیش از حد نباشد. اگر دیدیم که یک سرویس با تعداد زیادی سرویس دیگه ارتباط داره, احتمالا این سرویس کار زیادی بر عهده داره که بهتر هستش اون رو بازطراحی کنیم.

Temporal Coupling

این کوپلینگ زمانی به وجود می آید که یک سرویس برای انجام کار خود به همزمانی عملیات یک سرویس دیگر نیاز دارد. برای مثال اگر OrderService هنگام ارسال درخواست به InventoryService منتظر پاسخ باشه و بدون اون نتونه پروسه رو ادامه بده, وابستگی زمانی ایجاد شده. برای کاهش این کوپلینگ میتوانیم از روش هایی مانند Message Broker ها استفاده کنیم تا سرویس ها بدون نیاز به همزمانی باهم تبادل داشته باشند.

Pass-Through Coupling

این نوع کوپلینگ نیز زمانی رخ می دهد که سرویس یک داده ای را فقط به خاطر نیاز یک سرویس پایین دستی دیگه ارسال میکنبدون اینکه خودش به اون داده نیاز داشته باشه. برای مثال OrderService یک داده ای رو به PaymentService ارسال میکنه و این سرویس هم بدون پردازش داده اون رو به DeliveryService ارسال میکنه. این باعث میشه که سرویس اول به نحوه کارکرد سرویس پایین دستی آگاهی داشته باشه که موجب وابستگی پیاده سازی میشه. برای کاهش این نوع کوپلینگ میتوانیم از روش هایی مانند "ارتباط مستقیم با سرویس پایین دستی", "پنهان سازی جزئیات" و یا "نگهداری بدون پردازش" استفاده کنیم.

Common Coupling

این نوع کوپلینگ زمانی رخ می دهد که چندین سرویس از یک مجموعه داده های مشترک مثل دیتابیس های مشترک استفاده می کنند. این باعث میشه که تغییر در داده های مشترک سرویس های دیگه رو ایمپکت کنه و مدیریت داده ها رو هم پیچیده تر کنه. برای کاهش این کوپلینگ نیز میتوانیم از دیتابیس های جدا, استفاده از API ها و دیگر روش ها استفاده کنیم.


در پایان, باید توجه داشته باشیم که در طراحی میکروسرویس ها تعادل مناسبی بین استقلال سرویس ها و ارتباطات آن ها برقرار کنیم. باید همیشه از خود سوال کنیم که آیا این وابستگی ضروری است یا راهی برای ساده تر و انعطاف پذیرتر کردن آن وجود دارد؟

microservice
شاید از این پست‌ها خوشتان بیاید