Giriş

Modern çağda yazılımlar çoğunlukla “web uygulaması” ya da “yazılım hizmeti” olarak isimlendirilen servisler olarak sunulurlar. On iki faktörlü uygulama, servis olarak çalışan yazılımlar (İng. software as a service veya SaaS) geliştirmek için bir yöntembilimdir. Bu yöntembilimin kuralları ve faydaları şunlardır:

On iki faktör uygulaması herhangi bir programlama dili ile yazılmış ve yardımcı (veritabanları, kuyruk işleyiciler, önbellek, vb. gibi) servislerin herhangi bir kombinasyonuna sahip tüm uygulamalara uygulanabilir.

Arkaplan

Bu belgeye katkıda bulunan kişiler, yüzlerce uygulamanın geliştirilmesi ve yayınlanmasında doğrudan yer almış, ve dolaylı olarak Heroku platformundaki üzerinde çalıştığımız yüz binlerce uygulamanın geliştirilmesi, çalıştırılması ve ölçeklendirilmesine tanık olmuştur.

Bu belge birçok yazılım servisinde edindiğimiz deneyim ve gözlemlerimizin bir sentezidir. Uygulama geliştirme aşamasındaki ideal pratiklerin, uygulamaların zaman içindeki organik büyüyüşlerine gösterilen özel ilginin, bir uygulamanın kodları üzerinde çalışan geliştiriciler arasındaki işbirliği dinamiklerinin, ve yazılım erozyonunun getirdiği masraftan kaçınmanın toplamı niteliğindedir.

Motivasyonumuz modern uygulama geliştirmelerinde gördüğümüz bazı sistemik problemlere olan farkındalığı arttırmak, bahsi geçen problemler için ortak bir terminoloji belirlemek, ve bu problemlere karşı bir dizi çözüm konsepti sunmaktır. Bu konsept oluşturulurken, Martin Fowler’ın kitapları olan Patterns of Enterprise Application Architecture ve Refactoring‘den ilham alınmıştır.

Bu belgeyi kim okumalı?

Servis yazılımı geliştiren tüm geliştiriciler. Bu tür uygulamaları yayınlayan ve yöneten operasyon mühendisleri.

On İki Faktör

I. Kod tabanı

Sürüm kontrol sistemi üzerinde tek bir kod tabanı, birden fazla dağıtım

II. Bağımlılıklar

Bağımlılıkların açıkça tanımlanması ve izole edilmesi

III. Yapılandırma

Yapılandırma ayarlarını ortam değişkeni olarak saklama

IV. Yardımcı servisler

Yardımcı servisleri iliştirilmiş kaynaklar olarak ele almak

V. Derleme, yayınlama, çalıştırma

Derleme ve çalıştırma aşamalarını tam olarak ayırma

VI. Süreçler

Uygulamayı bir veya daha fazla bağımsız süreç olarak çalıştırma

VII. Port bağlama

Servisin portlar üzerinden sunulması

VIII. Eş zamanlılık

Süreç modeli ile ölçeklendirme

IX. İmha edilebilirlik

Hızlı başlangıç ve zararsız sonlanma ile maksimum servis sağlığı

X.Geliştirme/Üretim Eşitliği

Geliştirme, test etme ve canlı yayın ortamının birbirine olabildiğince benzer olması

XI. Günlükler

Günlükleri olay akışı olarak ele almak

XII. Yönetici Süreci

Yönetici/yönetim görevlerini tek seferlik süreçler olarak çalıştırma