IV. خدمات پشتیبان
سرویسهای پشتیبان را به عنوان منابع پیوست تلقی کنید
سرویس پشتیبان هر سرویسی است که برنامه از طریق شبکه به عنوان بخشی از عملکرد عادی خود استفاده میکند، از این بین میتوان پایگاهدادهها (مانند MySQL یا CouchDB)، سیستمهای پیامرسانی/صف (مانند RabbitMQ یا Beanstalkd)، سرویسهای SMTP برای ایمیلهای خروجی (مانند Postfix)، و سیستمهای کش (مانند Memcached) را نام برد.
سرویسهای پشتیبان مانند پایگاهداده به طور سنتی توسط همان مدیران سیستمی مدیریت میشوند که در زمان اجرا، برنامهی کاربردی را مستقر میکنند. علاوه بر این، سرویسهای مدیریت شدهی محلی برنامه، ممکن است خدماتی نیز داشته باشد که توسط اشخاص ثالث ارائه و مدیریت میشوند. به عنوان مثال، خدمات SMTP (مانند Postmark)، خدمات پایشگر سنجههای برنامه (مانند New Relic یا Loggly، خدمات ذخیرهسازی دادههای حجیم (مانند Amazon S3)، و حتی خدمات سایر API های قابل دسترس برای مشتریها (مانند توئیتر، Google Maps، یا Last.fm) از دست هستند.
کد یک برنامهی دوازده-سازه، هیچ تمایزی بین خدمات ارائهشده توسط سامانههای داخلی و سرویسدهندههای بیرونی ایجاد نمی کند. از دید برنامهی کاربردی، هر دو نوع این سرویسها، منابع پیوستشدهی سامانه هستند که از طریق یک URL یا از طریق نشانی/اطلاعات محرمانه در config برنامه قابل دسترسی هستند. یک deploy از برنامه دوازده-سازه باید بتواند یک پایگاه دادهی داخلی MySQL را با پایگاهدادهای که توسط شخص ثالث مدیریت میشود (مانند Amazon RDS) تعویض کند، بدون اینکه هیچ تغییری در کد برنامه اعمال شود. به همین ترتیب، یک سرور SMTP داخلی را می توان با یک سرویس SMTP شخص ثالث (مانند Postmark) بدون تغییر کد جا به جا کرد. در هر دو مورد، تنها موردی که باید دچار تغییر شود، نشانی دسترسی به منبع پیوستشده است.
هر سرویس پشتیبان مجزا، یک منبع است. به عنوان مثال، پایگاه دادهی MySQL یک منبع است. دو پایگاه داده MySQL (که برای اشتراک گذاری در لایهی برنامه استفاده می شود) به عنوان دو منبع مجزا واجد شرایط هستند. برنامه دوازده-سازه این پایگاههای داده را بهعنوان منابع پیوستشده در نظر میگیرد، که نشاندهنده اتصال ضعیف آنها به استقراری است که در آن اجرا شدهاند.
منابع را میتوان به دلخواه به محیطهای استقرار متصل کرد و از آنها جدا کرد. به عنوان نمونه اگر پایگاهدادهی برنامه به دلیل مشکل سخت افزاری به درستی پاسخ درخواستها را ندهد، مدیر برنامه ممکن است سرور پایگاهدادهی جدیدی را که از یک نسخه پشتیبان اخیر بازیابی شده است، جایگزین کند. پایگاهدادهی عملیاتی کنونی را می توان جدا کرد، و پایگاهدادهی جدید را بدون هیچ تغییری در کد به برنامه پیوست کرد.