12-Factor App, modern yazılım geliştirme süreçlerinde mikro hizmetler veya bulut tabanlı uygulamalar gibi ölçeklenebilir ve sürdürülebilir uygulamalar oluşturmak için kullanılan bir metodolojidir. Bu metodoloji, Heroku platformunun kurucuları tarafından geliştirilmiştir ve iyi uygulama prensiplerini tanımlar.
Amaç, yazılım projelerinin daha taşınabilir, daha kolay ölçeklenebilir ve daha az karmaşık olmasını sağlamaktır. Özellikle bulut tabanlı ortamlarda çalışan uygulamalar için tasarlanmıştır.
Bir kod deposu, bir uygulamadır.
Uygulamanın tüm kodları tek bir sürüm kontrol sisteminde (örneğin Git) tutulmalıdır.
Birden fazla kod tabanı yerine, tek bir kod tabanı farklı ortamlar (development, staging, production) için kullanılmalıdır.
Bağımlılıkları açıkça belirleyin ve yönetin.
Uygulamanın bağımlılıklarını (örneğin, kütüphaneler, araçlar) manuel kurulum yerine bir paket yöneticisi ile tanımlayın.
Bağımlılıklar izole edilmelidir; uygulama dışarıdaki sistem araçlarına bağımlı olmamalıdır.
Yapılandırmayı koddan ayırın.
Ortama özgü yapılandırmalar (örneğin, API anahtarları, veritabanı bağlantıları) kodun bir parçası olmamalıdır.
Çevresel değişkenler (environment variables) kullanarak yapılandırma bilgilerini tanımlayın.
Harici hizmetleri kaynak olarak yönetin.
Veritabanları, mesaj kuyruğu, e-posta hizmetleri gibi destek hizmetleri bağımsız kaynaklar olarak ele alınmalıdır.
Uygulama, bu hizmetlerin URL’lerini veya bağlantı dizgilerini dinamik olarak almalıdır.
Uygulamayı üç ayrı aşamaya bölün:
Build: Kodu derleyin veya gerekli dosyaları oluşturun.
Release: Build aşamasını yapılandırmalarla birleştirerek çalıştırılabilir bir sürüm oluşturun.
Run: Uygulamayı başlatın.
Durumsuz işlemler tasarlayın.
Uygulamanın işlemleri durumsuz olmalıdır.
Durum bilgileri (örneğin, oturumlar) harici veri kaynaklarında (örneğin, Redis) saklanmalıdır.
Hizmetleri bağlantı noktaları aracılığıyla sunun.
Uygulama, bağımsız bir hizmet olarak çalışmalı ve HTTP sunucusunu kendisi sağlamalıdır.
Örneğin, Node.js uygulaması express veya koa gibi bir çerçeve kullanarak port üzerinden hizmet sunar.
Uygulama ölçeklenebilir olmalıdır.
İş yükünü yönetmek için farklı işlem türlerini (web, işçi işlemleri) ayrı ayrı ölçeklendirin.
Her bir işlem, belirli bir göreve odaklanmalıdır.
Hızlı başlatma ve güvenli kapanma.
Uygulama işlemleri hızla başlatılabilir ve kapanma sırasında düzgün bir şekilde kaynakları temizlemelidir.
Örneğin, bir uygulama kapanırken açık veritabanı bağlantılarını temizler.
Geliştirme, test ve üretim ortamları birbirine benzer olmalıdır.
Farklı ortamların mümkün olduğunca tutarlı olmasını sağlayarak “üretimde çalışmıyor” sorunlarını önleyin.
Günlükleri olay akışı olarak ele alın.
Uygulama günlükleri dosyalara değil, stdout/stderr (standart çıkış) aracılığıyla aktarılmalıdır.
Harici bir günlükleme servisi (örneğin, ELK, Splunk) günlükleri toplar ve işler.
Yönetim görevlerini tek seferlik komutlar olarak yürütün.
Veritabanı migrasyonu, hata ayıklama veya analiz için gereken işlemler komut satırında çalıştırılabilir olmalıdır.
Yönetim görevleri, aynı kod tabanını ve yapılandırmayı kullanmalıdır.
Ölçeklenebilirlik:
Uygulama, artan kullanıcı taleplerine kolayca yanıt verebilir.
Taşınabilirlik:
Uygulamalar farklı platformlarda (örneğin, AWS, Google Cloud, Heroku) kolayca çalıştırılabilir.
Basitlik:
Geliştirme, test ve bakım süreçlerini daha yönetilebilir hale getirir.
Güvenilirlik:
Hatalara karşı daha dayanıklı ve çevik bir yapı sağlar.
Çevik Geliştirme:
Hızlı sürüm güncellemeleri ve yaygınlaştırma süreçlerini destekler.
Mikro hizmet mimarisi projelerinde.
Bulut tabanlı uygulamalarda.
SaaS (Software as a Service) ürünlerinde.
Sık güncellemeye ihtiyaç duyan uygulamalarda.
Dağıtık sistemlerde.
12-Factor App metodolojisi, modern yazılım geliştirme süreçlerinde uygulamaların esnek, taşınabilir ve sürdürülebilir bir şekilde tasarlanmasına rehberlik eder. Uygulamanızın bulut uyumlu ve geleceğe hazır olmasını sağlamak için bu prensipleri benimsemek büyük avantaj sağlar.
*Gönderi ve görsel chatgpt ile oluşturulmuştur.