دوازده فرمان برنامهسازی (بخش اول)
نوشته اصلی از 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
وظایف مدیریتی را به صورت فرآیندهایی یکباره اجرا کنید.
مطلبی دیگر از این انتشارات
بانک های برتر اینستاگرام در 4ماهه اول سال 1400
مطلبی دیگر از این انتشارات
برای ثانيههای زندگیام ارزش قائلم (صفحه اینستا را رِفرِش میكند!)
مطلبی دیگر از این انتشارات
12 روش پولسازی در خانه با کمترین / ایده کسب درآمد در خانه بدون سرمایه