Erkan Ceran

12 Factor Application Nedir, Adımları Nelerdir?

2012 de yazılmış, yazılımcıların modern uygulamalarını kurarken benimseyeceği bir manifestodan (“12 Factor Application”) kısa kısa özetler paylaşmak istiyorum.

1) Codebase

Kodların bir depoda bulunması ve farklı branch (dal) ler açılarak kodlama yapılması. Her programcının kendine ait bir branch i olması öneriliyor. GIT, SVN bunlara örnek olabilir.

Örneğin bir depoda dallar (branches) şu şekilde olabilir. Production, Staging, Developer 1, Developer 2. ..

Direkt olarak production branch olarak bilinen “master” branch e push, merge yapılamamalıdır. Önce test, staging ardından en son her şey tamamsa master a push olmalı.

2) Dependencies

Her uygulamanın ihtiyacı olan paketler kendi içerisinde olmalı. Sisteme bağlı paketler kullanılmamalı. Paket yöneticileri bu bağlılıkları güncellemeyebilmelidir. Ör: pip, composer, npm vs.

3) Config

Kod un içerisinde önemli key, şifre gibi şeyler tutmayın kod ayrı, ayar ayrı olmalıdır der. Bu dosya olarak ayrılabilir.

4) Backing Services

Local de çalışan bir servis ile cloud üzerinde çalışan servisin farkı olmamalıdır der. Her şey network üzerinden çalışır. Uygulama farklı bir yere taşındığın bir kaç ayar dosyası değişikliği ile çalışmaya devam etmelidir.

5) Build, Release, Run

Kodunuzu upload etmek ile yayına almak farklı şeylerdir. Versiyonlama bu noktada doğru bir yaklaşımdır. Her deploy birbirinden farklı bir ID numarasına sahip olabilir böylece geçişler yapılabilir.

6) Processes

Her uygulama bir veya birden fazla bağımsız olarak çalışmalıdır der. Farklı replicalar çalışmaya devam edip, çatlayan patlayan bir server yerine diğeri gelebilir olmalı. Dosya sistemine yani diske bir şey yazılmamalı ki , bir diğeri yerini alabilsin. Veritabanı uzakta olmalı.

7) Port Binding

Her uygulama bir porta sahip olur. Zaten ihtiyacı olan her şeyi kendi içinde barındırır ve bunu bir port numarasından dışarı servis eder. Ör: Localhost:8080 gibi.

8) Concurrency

Eş zamanlı çalışabilmekten bahseder. Uygulamayı dışardan parametre ile başlatabilmeli, bir servis olarak sunucuda yer almamalıdır. (daemon) Böylece aynı servis docker tarafından defalarca kez çağrılıp başlatılabilir.

9) Disposability

Uygulama bir anda ortadan kaybolabilir, sunucuda problem olabilir. Yenisi hızlı bir şekilde ayağa kalkabilmelidir. Aynı şekilde alacağı bir sinyal ile sağlıklı kapanabilmelidir. (SIGTERM)

10) Dev/Prod Parity

Canlı ve yazılım geliştirme ortamı birbirine yakın olmalıdır. Böylece bu ortamlar arasındaki geçişler, çok küçük işlemler ile bu sağlanmalıdır. Bazı uygulamaları yazan ve deploy eden kişi farklı olabilir.

11) Logs

Logları bir olay olarak algılayın der. Bir uygulama stdout olarak log u vermeli bir dosyaya vs. yazmamalıdır.Bunu kullanan sistem, buradan kendi alıp işlemelidir.

12) Admin Processes

Bazı yönetim süreçlerini birer yönetimsel araçlara dönüştürün. Tek scriptle mesela bunları halledebilir hale gelin diyor. Ör: manage.py merge -all

Exit mobile version