The Twelve-Factor App

IV. Destek servisi

Destek servislerine ekli kaynak olarak davranma

Bir destek servisi uygulamanın kendi normal işleminin bir parçası olarak ağ üzerinden tüketim yapan bir servistir. Örnekler veri deposu(MySQL veya CouchDB gibi), mesajlama/kuyruklama sistemleri( RabbitMQ veya Beanstalkd), giden email için SMTP servisi(Postfix gibi) ve önbellekleme sistemleri(Memcached gibi) içerir.

Destek servisleri, veri tabanı gibi, uygulamaların çalışma zamanlı dağıtımlarında olduğu gibi benzer sistem yöneticileri tarafından geleneksel olarak yönetilirler. Bu yerel yönetilen servislere ilave olarak, uygulama üçüncü parti uygulamalar tarafından onaylanmış ve yönetilmiş servislere sahip olabilirler. Örnekler SMTP servisleri(Postmark gibi), Metrik toplama servisleri( New Relic veya Loggly gibi), binary servisler(Amazon S3 gibi) ve API-erişilebilir tüketici servisleri bile Twitter, Google Maps, ve Last.fm gibi) içerir.

On iki faktör uygulaması için bu kod, yerel ve üçüncü parti servisler arasında ayrım yapmaz. Uygulamada, her ikiside ek kaynaktır, yapılandırmada saklanmış yer belirleyici/kimlik bilgileri ve URL aracılığıyla erişilir. On iki faktör uygulamasının bir dağıtımı, uygulama kodunda hiçbir değişiklik olmadan üçüncü parti(Amazon RDS gibi) tarafından yönetilenle yerel MySQL veritabanı silebilmelidir. Aynı şekilde bir yerel SMTP servisi(Postmark gibi), kod değişikliksiz bir üçüncü parti SMTP servisiyle değiş tokuş yapılabilir. Her iki durumda da, kaynak sadece değişmesi gereken yapılandırmada ele alınır.

Her bir belirgin destek servisi bir kaynaktır. Örneğin, bir MySQL veritabanı(Uygulama katmanında parçalanma için kullanılmış) bir kaynaktır; iki MySQL veritabanı iki belirgin kaynak olarak nitelendirilir. On iki faktör uygulaması veritabanlarına, bağlı oldukları dağıtımlara gevşek bağlaşımlarını belirten ek kaynak olarak davranır.

A production deploy attached to four backing services.

Kaynaklar dağıtımlara istenilen zamanda eklenilip çıkartılabilir. Örneğin, eğer uygulamanın veritabanı donanım sorununa göre yanlış davranıyorsa, uygulamanın yöneticisi son yedeklemeden geri yüklenmiş yeni bir veri tabanı sunucusunu döndürebilir. Şuanki veritabanı ekten çıkarılmış olabilir ve yeni veri tabanı eklenmiş olabilir, hiç bir kod değişikliği olmadan.