CodeShot

Database per Service در مقابل Shared Database

در الگوی Database per Service هر میکروسرویس دیتابیس اختصاصی خودش را دارد و هیچ سرویس دیگری مستقیماً به آن دسترسی ندارد که استقلال کامل می‌دهد، در حالی که در Shared Database چند سرویس از یک دیتابیس مشترک استفاده می‌کنند که ساده‌تر است اما استقلال و مرزبندی واقعی بین سرویس‌ها را از بین می‌برد.

ویژگیDatabase per ServiceShared Database
استقلال سرویس‌هاکاملضعیف
سادگی اولیه پیاده‌سازیپیچیده‌ترساده‌تر
ریسک اثر تغییر اسکیمامحدود به یک سرویسکل سیستم

کِی از Database per Service استفاده کنیم؟

همیشه به‌عنوان اصل پایه معماری میکروسرویس توصیه می‌شود؛ هر سرویس باید بتواند مستقل از بقیه توسعه، دیپلوی و مقیاس‌دهی شود.

کِی از Shared Database استفاده کنیم؟

فقط در مرحله انتقال تدریجی از یک Monolith به میکروسرویس (Strangler Pattern) و به‌صورت موقت قابل قبول است.

مثال Database per Service

OrderService  -> OrderDb (اختصاصی)
InventoryService -> InventoryDb (اختصاصی)
# ارتباط فقط از طریق API یا Event

مثال Shared Database

OrderService     ->InventoryService -> SharedDb (یک دیتابیس)
PaymentService   ->/
# تغییر اسکیمای یک سرویس بقیه را می‌شکند

اشتباه رایج

اشتباه رایج نگه‌داشتن Shared Database «موقت» برای مدت طولانی بدون برنامه مهاجرت است؛ این کار عملاً همان مشکلات Monolith (تغییر اسکیما همه‌جا اثر می‌گذارد) را در ظاهر یک معماری میکروسرویس بازتولید می‌کند.

جمع‌بندی

برای معماری میکروسرویس واقعی و مستقل همیشه Database per Service را هدف بگیرید؛ Shared Database فقط به‌عنوان یک راه‌حل موقت و گذرا قابل قبول است.