یارپلاس را با میکروسرویس ساختم. میخواستم پرداخت، احراز هویت و محتوا جدا باشند. بخشی از انتخابم هم برای یاد گرفتن بود. امروز احتمالاً با یک مونولیت ماژولار شروع میکردم.
دلیل جداسازی
بخش محتوا بیشتر تغییر میکرد، اما پرداخت به تغییرهای محدودتر و تاریخچه قابل پیگیری نیاز داشت. جدا کردن این بخشها کمک میکرد مسئولیت هرکدام روشن بماند. میخواستم اختلال در بخش کشف محتوا هم تا جای ممکن روی پرداخت اثر نگذارد.
این نیازها به جداسازی منطق مربوط بودند؛ برای همه آنها الزاماً به سرویس جدا نیاز نداشتم.
هزینه نگهداری
- برای هر سرویس باید استقرار، تنظیمات و پایش جداگانه نگه میداشتم.
- ردیابی درخواست میان چند سرویس به لاگ منظم و شناسه مشترک نیاز داشت.
- هماهنگ کردن دادهها سختتر شد؛ بعضی عملیات دیگر در یک تراکنش پایگاه داده جا نمیگرفتند.
- بعضی مرزها را زود تعیین کرده بودم. جابهجایی مسئولیت میان سرویسها از تغییر یک ماژول داخل پروژه زمان بیشتری میگرفت.
اگر دوباره شروع میکردم
یک برنامه قابل استقرار میساختم، با ماژولهای جدا برای پرداخت، حساب کاربر و محتوا. هر ماژول رابط مشخصی داشت و بقیه بخشها مستقیم به دادههای داخلی آن دسترسی نداشتند.
سرویس را وقتی جدا میکردم که دلیل مشخصی پیدا شود: مثلاً نیاز به استقرار مستقل یا بار پردازشی متفاوت. برای مرحله اول محصول، کمتر بودن کارهای نگهداری برایم مهمتر بود.