فاکتور دهم: Dev/Prod Parity
فاکتور دهم در 12-Factor App بر حفظ شباهت بین محیطهای توسعه، staging و production تمرکز دارد. هدف کاهش فاصلهها و اختلافات است تا امکان Continuous Deployment فراهم شود.

انواع فاصلهها
- Time Gap: فاصله زمانی بین نوشتن کد توسط توسعهدهنده و deploy آن در محیط production. در اپلیکیشنهای سنتی ممکن است این فاصله هفتهها یا ماهها باشد، در اپلیکیشن 12-Factor تنها چند ساعت یا دقیقه است.
- Personnel Gap: تفاوت افراد مسئول نوشتن کد و deploy آن. در اپلیکیشنهای 12-Factor همان افراد کد را deploy و رفتار آن را در production مشاهده میکنند.
- Tools Gap: تفاوت ابزارها و محیطها بین توسعه و production. اپلیکیشن 12-Factor تلاش میکند این فاصله را به حداقل برساند.
مقایسه اپلیکیشن سنتی و 12-Factor
| ویژگی | اپلیکیشن سنتی | اپلیکیشن 12-Factor |
|---|---|---|
| فاصله زمانی بین deployها | هفتهها | ساعتها یا دقیقهها |
| افراد مسئول کد و deploy | افراد متفاوت | همان افراد |
| شباهت محیط توسعه و production | متفاوت | حداکثر شباهت |
Dev/Prod Parity و Backing Services
یکی از مهمترین بخشها برای حفظ شباهت محیطها، Backing Services است، مانند پایگاه داده، صفها، و سیستم کش. استفاده از خدمات متفاوت در توسعه و production میتواند باعث بروز ناسازگاریهای کوچک و خطاهای غیرمنتظره شود.
| نوع سرویس | زبان | کتابخانه | Adapters |
|---|---|---|---|
| Database | Ruby/Rails | ActiveRecord | MySQL, PostgreSQL, SQLite |
| Queue | Python/Django | Celery | RabbitMQ, Beanstalkd, Redis |
| Cache | Ruby/Rails | ActiveSupport::Cache | Memory, filesystem, Memcached |
راهکار عملی برای حفظ شباهت محیطها
- استفاده از همان نوع و نسخه Backing Services در تمام deployها (محیط توسعه، staging و production).
- نصب سرویسهای مدرن مانند PostgreSQL، Memcached و RabbitMQ در محیط توسعه با ابزارهای بستهبندی مانند Homebrew و apt-get یا با محیطهای مجازی سبک مانند Docker و Vagrant.
- استفاده از ابزارهای Declarative Provisioning مانند Chef و Puppet برای اطمینان از شباهت محیطها.
- استفاده از adapters برای مهاجرت آسان به Backing Services جدید، اما اطمینان از اینکه تمام deployها یکسان هستند.
حفظ Dev/Prod Parity باعث کاهش خطاهای ناشی از ناسازگاری محیطها، افزایش قابلیت اعتماد و تسهیل Continuous Deployment میشود.