کانتینر و ارکستراسیون

دو چیز که معمولاً با هم گفته میشوند و تصمیمهای کاملاً متفاوتی هستند:
کانتینر — بستهبندی برنامه با همهٔ وابستگیهایش.
ارکستراسیون — سامانهای که دهها کانتینر را روی چند ماشین اداره میکند.
اولی برای تقریباً همه ارزش دارد. دومی برای اقلیت.
خلط این دو، شایعترین اشتباه زیرساختی تیمهای کوچک است.
کانتینر: مسئلهای که حل میکند
جملهٔ کلاسیک: «روی سیستم من کار میکند.»
سرور تولید نسخهٔ متفاوتی از زبان دارد، کتابخانهای کم است، تنظیمی فرق میکند. ساعتها صرف پیدا کردن تفاوتی میشود که هیچجا نوشته نشده.
کانتینر این را حل میکند: محیط اجرا همراه برنامه بستهبندی میشود.
چهار سود مشخص:
محیط یکسان در توسعه، آزمایش و تولید.
استقرار قابل بازتولید. همان تصویر، همان رفتار — هر زمان و روی هر ماشین. این همان بازگشتپذیری ساخت است که در CI/CD گفتیم شرط اصلی خط لولهٔ سالم است.
راهاندازی عضو جدید در دقایق، نه روزها. تنها همین، برای تیم چندنفره ارزشش را دارد.
بازگشت آسان. تصویر نسخهٔ قبلی هنوز هست.
توصیه: اگر امروز کانتینر ندارید، این را جدی بگیرید. پیچیدگیاش کم است و بازدهش فوری.
ارکستراسیون: مسئلهٔ متفاوتی
وقتی دهها سرویس روی چند ماشین دارید، مسائل جدیدی پیدا میشوند: کدام سرویس روی کدام ماشین؟ اگر ماشینی بیفتد؟ چطور مقیاس بگیریم؟ چطور بدون قطعی بهروزرسانی کنیم؟
ارکستراسیون اینها را حل میکند — و پیچیدگی قابل توجهی میآورد: مفاهیم جدید، شبکهٔ لایهای، ذخیرهسازی پایدار، پایش، و کسی که همهٔ اینها را بلد باشد.
کِی ارکستراسیون لازم است
نشانههای واقعی:
- بیش از ده تا پانزده سرویس مستقل دارید.
- روی چند ماشین اجرا میکنید.
- بار بهطور جدی نوسان دارد و مقیاس خودکار لازم است.
- چند تیم روی سرویسهای مختلف کار میکنند.
- در دسترس بودن، الزام قراردادی است.
نشانههای اینکه زودهنگام است:
- کمتر از پنج سرویس.
- یک یا دو سرور.
- بار قابل پیشبینی.
- تیم کمتر از ده نفر.
- هیچکس در تیم تجربهٔ عملیاتش را ندارد.
بند آخر تعیینکنندهترین است. خوشهای که کسی بلد نیست اشکالزداییاش کند، در اولین بحران بدتر از سرور ساده است — چون لایههای بیشتری برای گشتن دارد.
گزینههای میانی
بین «کانتینر روی یک سرور» و «خوشهٔ کامل»، چند گزینه هست که معمولاً نادیده گرفته میشوند:
چند کانتینر روی یک سرور با فایل تعریف ساده. برای اکثر پروژههای متوسط، کاملاً کافی است. راهاندازیاش یک بعدازظهر است.
سرویس مدیریتشدهٔ کانتینر، که پیچیدگی خوشه را پنهان میکند.
چند سرور با استقرار ساده، بهجای ارکستراسیون کامل.
قاعده: پیچیدگی زیرساخت باید متناسب با پیچیدگی سامانه باشد، نه بیشتر.
نکاتی برای زیرساخت در بازار ما
بندهایی که در راهنماهای خارجی نیست:
مخزن تصویر داخلی. کشیدن تصاویر پایه از مخازن عمومی در هر ساخت، خط لوله را به کیفیت شبکه گره میزند. یک مخزن داخلی راه بیندازید — همان اصلی که در CI/CD دربارهٔ آینهٔ وابستگیها گفتیم.
تصاویر پایه را خودتان بسازید و نگه دارید.
نسخهها را قفل کنید. تصویری که با برچسب متغیر کشیده میشود، فردا ممکن است چیز دیگری باشد.
و برنامهٔ اجرا بدون اینترنت آزاد داشته باشید. اگر استقرار شما به دسترسی خارجی نیاز دارد، روزی که آن دسترسی نباشد، نمیتوانید مستقر کنید — حتی برای رفع یک باگ فوری.
داده، سختترین بخش
کانتینرها موقتاند؛ داده نیست.
پایگاه داده را در ابتدا کانتینری نکنید. برای اکثر سازمانها، پایگاه دادهٔ روی ماشین اختصاصی یا سرویس مدیریتشده، سادهتر و قابل اتکاتر است.
اگر کردید:
حجم پایدار، و مطمئن شوید که با حذف کانتینر پاک نمیشود.
پشتیبانگیری آزموده. نه فقط تنظیمشده — آزموده، به دلیلی که در تداوم کسبوکار گفتیم.
مهاجرت اسکیما، که باید با نسخهٔ قبلی کد هم سازگار باشد — همان قاعدهای که در مدیریت انتشار گفتیم بازگشت را ممکن نگه میدارد.
امنیت
تصویر رسمی و کوچک بهعنوان پایه. تصویر کوچکتر، سطح حملهٔ کمتری دارد.
کاربر غیر روت در کانتینر.
رمز و کلید از بیرون تزریق شود، نه در تصویر. تصویری که رمز داخلش باشد، هر کسی که به مخزن دسترسی دارد رمز را دارد.
پویش آسیبپذیری تصاویر در خط لوله.
بهروزرسانی منظم تصویر پایه. تصویری که سالها بهروز نشده، آسیبپذیری شناختهشده دارد.
آنچه پیش از ارکستراسیون باید داشته باشید
اگر تصمیم دارید بروید، اینها پیشنیازند — نه بعدش:
- خط لولهٔ ساخت خودکار.
- پایش و لاگ متمرکز. بدون آن، اشکالزدایی در خوشه تقریباً غیرممکن است. پایش و لاگ.
- بررسی سلامت برای هر سرویس.
- پیکربندی از بیرون، نه در کد.
- سرویسهای بدون حالت، یا حالتی که جای مشخصی دارد.
اگر این پنج را ندارید، ارکستراسیون مشکلاتتان را حل نمیکند — پنهانشان میکند و بعد بزرگتر برمیگرداند.
و یک توصیهٔ ترتیبی
۱. کانتینری کنید. برای همه ارزش دارد. ۲. خط لولهٔ ساخت و استقرار خودکار. ۳. پایش و لاگ. ۴. چند کانتینر روی یک سرور، تا وقتی جواب میدهد. ۵. و فقط وقتی به سقف خوردید، سراغ ارکستراسیون.
بیشتر سازمانها هیچوقت به مرحلهٔ ۵ نمیرسند — و این نشانهٔ عقبماندگی نیست. نشانهٔ این است که پیچیدگی سامانهشان با ابزارهای سادهتر اداره میشود، که هدف درستی است.