فاکتور چهارم: Backing Services
فاکتور چهارم در 12-Factor App مربوط به Backing Services است. Backing Service به هر سرویسی گفته میشود که اپلیکیشن برای اجرای عملکردهای خود از طریق شبکه استفاده میکند. این سرویسها میتوانند داخلی یا ارائهشده توسط شخص ثالث باشند.
مثالهایی از Backing Services:
- پایگاه دادهها مانند MySQL یا CouchDB
- سیستمهای پیامرسانی یا صف مانند RabbitMQ یا Beanstalkd
- سرویسهای SMTP برای ارسال ایمیل مانند Postfix یا Postmark
- سیستمهای کش مانند Memcached
- سرویسهای ذخیرهسازی ابری مانند Amazon S3
- APIهای خارجی مانند Twitter، Google Maps یا Last.fm
تعریف و رفتار در 12-Factor App
اپلیکیشنهای 12-Factor بین سرویسهای داخلی و خارجی تفاوتی قائل نمیشوند. همه Backing Services به عنوان attached resources در نظر گرفته میشوند و اتصال به آنها از طریق URL یا اطلاعات ورود ذخیرهشده در config انجام میشود. به این ترتیب، یک deploy میتواند به راحتی پایگاه داده محلی MySQL را با یک پایگاه داده ارائهشده توسط شخص ثالث مانند Amazon RDS جایگزین کند، بدون اینکه کد اپلیکیشن تغییر کند.

هر سرویس متمایز یک resource محسوب میشود. برای مثال:
- یک پایگاه داده MySQL یک resource است.
- دو پایگاه داده MySQL که برای شاردینگ استفاده میشوند، دو resource متمایز هستند.
منابع به راحتی میتوانند به deployها اضافه یا از آنها حذف شوند. برای مثال، اگر پایگاه داده موجود به دلیل مشکل سختافزاری دچار اختلال شود، مدیر سیستم میتواند یک سرور جدید راهاندازی کرده و دادهها را از بکاپ بازیابی کند، سپس پایگاه داده فعلی را جدا کرده و سرور جدید را متصل کند، همه این کارها بدون هیچ تغییر در کد اپلیکیشن.
مثال عملی
تصور کنید اپلیکیشن شما به یک پایگاه داده و یک سرویس SMTP متصل است. در محیط production ممکن است پایگاه داده MySQL محلی استفاده شود و ایمیلها از Postfix ارسال شوند. اگر تصمیم بگیرید پایگاه داده را به Amazon RDS منتقل کنید یا سرویس ایمیل را به Postmark تغییر دهید، تنها کافی است handle آنها در config تغییر کند و هیچ کدی در اپلیکیشن نیاز به تغییر ندارد.
این روش باعث میشود اپلیکیشن با Backing Services به صورت loosely coupled عمل کند و مدیریت، جایگزینی و مقیاسپذیری سرویسها بدون دردسر و خطا انجام شود.