فرض کن یک رستوران کوچک باز کردهای. یک آشپزخانه، یک تیم. سفارش میآید، همانجا پخته میشود، همانجا شسته میشود، همانجا پیک میرود. همه همدیگر را میبینند؛ اگر سس تمام شد، همان لحظه داد میزنی. ساده است. اسم این ساختمان یکتکه را Monolith میگذارند.
وقتی رستوران معروف شد، سه تیم جدا میخواهند مستقل کار کنند: یکی منو را عوض کند بدون اینکه صندوق بخوابد، یکی آشپزخانه را بزرگ کند بدون دست زدن به حسابداری. اگر هنوز همه در یک آشپزخانه باشند، هر تغییر کوچک کل سالن را معطل میکند. اینجا وسوسه میشوی دیوار بکشی. اسم آن تکههای مستقل را Microservices میگذارند. برخلاف مُد، جواب پیشفرض هنوز همان آشپزخانه یکتکهٔ خوشساخت است.

دو مدل، دو شغل
هر دو غذا میدهند. فرقشان در این است که تغییر، مقیاس و خرابی چقدر به هم سرایت میکند. اگر قاطیشان کنی، یا برای یک تیم ششنفره هزینهٔ یک فرودگاه میسازی، یا یک ساختمان را آنقدر بزرگ میکنی که کسی جرئت Deploy ندارد.
| Monolith | Microservices | |
|---|---|---|
| استقرار | یک واحد؛ یک Deploy کل رستوران را عوض میکند | هر ایستگاه جدا بالا میآید؛ نیازمند اتوماسیون جدی |
| تراکنش | یک دفتر، یک تراکنش — راحت | چند دفتر جدا — سخت؛ باید Saga بنویسی |
| مقیاس | کل ساختمان با هم بزرگ میشود | همان ایستگاهی را بزرگ میکنی که صف بسته |
| تیمها | با رشد تیم، همه روی یک میز کد میزنند | هر تیم مالک ایستگاه خودش است و جدا Deploy میکند |
| دیباگ | یک stack trace، یک جا | ردپا بین چند ایستگاه؛ بدون Tracing گم میشوی |
یک پله وسط، قبل از قیچی
لازم نیست روز اول دیوار بکشی. میتوانی داخل همان ساختمان، ایستگاهها را با خطکشی مشخص کنی — بدون اینکه سفارش از روی شبکه برود و بدون اینکه برای هر غذا یک پیک بین اتاقها بفرستی.
کی دیوار میکشی؟
دیوار را وقتی درد واقعی دیدی، نه وقتی مقاله خواندی. سه سیگنال کافی است؛ بقیه معمولاً بهانه است.
- سیگنال واقعی: یک تغییر کوچک، Deploy کل شرکت را معطل میکند؛ تیمها روی سر هم کد میزنند؛ یک بخش مقیاس یا تکنولوژی کاملاً متفاوت میخواهد — مثلاً جستجو.
- راه درست: Strangler Fig. سرویس را یکییکی از کنار Monolith بیرون میکشی و ترافیک را آرام منتقل میکنی. درخت انجیر سرخپوستی تنهٔ میزبان را خفه میکند؛ تو هم همان کار را با کد قدیمی میکنی — نه بازنویسی بزرگ.
- اشتباه مرگبار: Distributed Monolith. روی کاغذ چند سرویس داری، ولی همدیگر را sync صدا میزنند و باید با هم Deploy شوند. همه دردهای هر دو دنیا، هیچ مزیتی.
به زبان ساده
Monolith یعنی یک واحد استقرار؛ Microservices استقلال مقیاس و تیم میدهد — به قیمت شبکه و تراکنش توزیعشده. پیشفرض Modular Monolith است.
مثال واقعی
رستوران کوچک یک آشپزخانه دارد. وقتی سه تیم بخواهند مستقل کار کنند دیوار میکشی؛ ولی روز اول دیوار نکش. اول خطکشی داخل همان آشپزخانه.