دوازده فرمان برنامه‌سازی (بخش اول)

نوشته اصلی از Adam Wigginsمقدمهدر عصر مدرن، به طور کلی هر نرم‌افزار به صورت یک خدمت - تحت عنوان برنامه‌ی وب (web app) یا نرم‌افزار اجاره‌ای (نرم‌افزار به عنوان یک خدمت یا software-as-a-service) - ایجاد و عرضه می‌گردد. برنامه‌ی دوازده عاملی (twelve-factor app) روشی است برای ساخت برنامه‌هایی برای اجاره که:برای به حداقل رساندن زمان و هزینه‌ی پیوستن برنامه‌نویس‌های جدید به پروژه، از قالب‌هایی اعلانی (declarative) در خودکار ساختن راه‌اندازی و تنظیمات برنامه استفاده می‌کنند.برای به حداکثر رساندن امکان انتقال (portability) بین محیط‌های اجرا، قراردادی روشن و شفاف با سیستم عامل میزبان دارند.با استقرار (deployment) روی بستر‌های ابری (cloud platform) امروزی سازگاری و تناسب دارند، در نتیجه نیاز به مدیریت سرور و سیستم‌ها را مرتفع می‌سازند.تفاوت و واگرایی بین محیط‌های توسعه (development) و محصول نهایی (production) را به حداقل می‌رسانند، در نتیجه امکان استقرار مداوم (continuous deployment) برای دستیابی به حداکثر چابکی (agility) را فراهم می‌کنند.می‌توانند بدون تغییر چندانی در تجهیزات، معماری، یا شیوه‌های توسعه گسترش یابند و در مقیاسی بزرگتر فعالیت کنند (scale out).اصول دوازده عاملی را می‌توان برای هر برنامه‌ای، فارغ از اینکه با چه زبانی نوشته شده یا از چه ترکیبی از خدمات زیرساختی و حمایتی (backing service) - از قبیل پایگاه داده، صف، کش حافظه و غیره - استفاده می‌کند، به کار برد.پیش‌زمینهدست‌اندرکاران این سند مستقیما در توسعه و استقرار صدها برنامه نقش داشته‌اند، و از طریق کارهای نویسنده در بستر Heroku شاهد توسعه، عملکرد، و رشد صدها هزار برنامه بوده‌اند.این سند همه‌ی تجربیات و مشاهدات ما در گستره‌ی عظیمی از برنامه‌های اجاره‌ای موجود را در هم می‌آمیزد. حاصل آن ادغام روش‌های ایده‌آل توسعه‌ی برنامه، با توجه ویژه به پویایی رشد طبیعی برنامه به مرور زمان، پویایی همکاری میان توسعه‌دهندگان برنامه، و جلوگیری از فرسودگی نرم‌افزار و هزینه‌های آن، می‌باشد.هدف و انگیزه‌ی ما این است که نسبت به برخی مشکلات سیستمی که در توسعه‌ی برنامه‌های مدرن مشاهده کرده‌ایم هشدار و آگاهی دهیم، واژه‌نامه‌ای مشترک برای بحث در مورد این مشکلات ارائه‌ کنیم، و مجموعه‌ای گسترده از راهکارهای مفهومی برای حل آن‌ها را به همراه واژگان مرتبط پیشنهاد کنیم. قالب این اصول از کتاب‌های مارتین فاولر (Martin Fowler) - الگوهای معماری برنامه‌های سازمانی (Patterns of Enterprise Application Architecture) و بازآرایی (Refactoring) - الهام گرفته شده است.مخاطب این سند چه کسانی هستند؟هر برنامه‌نویسی که برنامه‌هایی می‌سازد که به عنوان یک خدمت اجرا می‌شوند. مهندسان عملیاتی که چنین برنامه‌هایی را مستقر یا مدیریت می‌کنند.دوازده عامل1. پایگاه کد - Codebaseبرای همه‌ی استقرارهای مختلف از یک منبع کد با سیستم کنترل نسخه و پیگیری تغییرات استفاده کنید. 2. وابستگی‌ها - Dependenciesوابستگی‌ها را صریحا اعلان و از هم تفکیک کنید.3. پیکره‌بندی - Configتنظیمات و پیکره‌بندی را در محیط استقرار ذخیره کنید.4. خدمات زیرساختی - Backing Servicesخدمات زیرساختی و پشتیبان را به عنوان منابع پیوسته در نظر بگیرید.5. ساخت، عرضه، اجرا - Build, Release, Runگام‌های ساخت و اجرا را کاملا از هم جدا کنید.6. فرآیندها - Processesبرنامه را به صورت یک یا چند فرآیند بدون حالت (stateless) اجرا کنید.7. اتصال به درگاه - Port Bindingخدمات را به درگاه‌ها متصل و عرضه کنید.8. همروندی - Concurrencyافزایش منابع (scale up) را از طریق مدل فرآیند اعمال کنید.9. دسترسی پذیری - Disposabilityبا شروع سریع به کار و به شکلی مطلوب از کار ایستادن، توانمندی را به حداکثر برسانید.10. توازن توسعه/محصول - Dev/Prod Parityمحیط‌های توسعه (development)، نمایش (staging) و محصول نهایی (production) تا جای ممکن مشابه نگه دارید.11. سوابق - Logsسوابق را به صورت جریانی از رویدادها در نظر بگیرید.12. فرآیندهای مدیر - Admin Processesوظایف مدیریتی را به صورت فرآیندهایی یک‌باره اجرا کنید.