IV. Сторонні служби
Вважайте сторонні служби (backing services) підключеними ресурсами¶
Стороння служба — це будь-яка служба потрібна для нормальної роботи застосунку, до якої застосунок отримує доступ за допомогою мережевого зʼєднання, наприклад: бази даних (MySQL або CouchDB), системи черг повідомлень (такі як, RabbitMQ або Beanstalkd), служби SMTP для надсилання пошти (наприклад, Postfix), системи кешування (наприклад, Memcached) тощо.
Допоміжні служби, такі як бази даних, традиційно управляються тими ж системними адміністраторами, які розгортають застосунок. Окрім локальних служб, застосунок може також використовувати служби, що надаються і керуються сторонніми постачальниками: SMTP-сервіси (наприклад, Postmark), сервіси збору метрик (наприклад, New Relic або Loggly), сховища бінарних даних (наприклад, Amazon S3), а також різні сервіси, що надають доступ через API (наприклад, Twitter, Google Maps, або Last.fm).
Код 12-факторного застосунку не робить різниці між локальними та сторонніми сервісами. Для застосунку кожен з них є підʼєднаним ресурсом, доступним за URL-адресою або іншими даними, що зберігаються в конфігурації. Розгортання 12-факторного застосунку повинно мати можливість, наприклад, замінити локальну базу даних MySQL на будь-яку іншу, що надається стороннім постачальником (наприклад, Amazon RDS), без жодних змін в коді застосунку. Крім того, локальний сервер SMTP може бути замінений на сторонній SMTP-сервіс (наприклад, Postmark) без змін в коді. В обох випадках необхідно змінити лише налаштування відповідного ресурсу в конфігурації застосунку.
Кожна окрема стороння служба є ресурсом. Наприклад, база даних MySQL є ресурсом; дві бази даних MySQL (що використовуються для шардінгу на рівні застосунку) вважаються двома різними ресурсами. 12-факторний застосунок сприймає ці бази даних як підключені ресурси, що вказує на їхню слабку привʼязку до розгортання, до якого вони підключені.
Ресурси за необхідності можуть бути додані та прибрані з розгортання застосунку. Наприклад, якщо база даних застосунку функціонує некоректно у звʼязку з апаратними проблемами, адміністратор може підняти новий сервер бази даних, скориставшись останньою резервною копією. Поточна база даних може бути відʼєднанна, а нова база даних підʼєднана — все це без будь-яких змін коду застосунку.