12-Factor App

12-factor-app (büyük resim için tıklayın)

12-Factor App Nedir?

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.

12-Factor Metodolojisinin Faktörleri

1. Kod Tabanı (Codebase)

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.

2. Bağımlılıklar (Dependencies)

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.

3. Yapılandırma (Config)

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.

4. Destekleyici Servisler (Backing Services)

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.

5. Build, Release, Run

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.

6. Süreçler (Processes)

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.

7. Bağlantı Noktaları (Port Binding)

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.

8. Paralel Çalışabilirlik (Concurrency)

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.

9. Çıkış Bağlantıları (Disposability)

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.

10. Geliştirme ve Üretim Ortamı Eşitliği

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.

11. Günlükler (Logs)

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.

12. Yönetici Süreçleri (Admin Processes)

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.

12-Factor App Metodolojisinin Avantajları

Ö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.

Hangi Projelerde Kullanılır?

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.

omurs

Ö S, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Etiketler

Beğeni


Yıllara Göre Gönderiler








LombokLoglamaB2C (Business-to-Consumer)B2B (Business-to-Business)İçerik Yönetim Sistemi - CMS (Content Management System)Pagination (Sayfalama)Sanal Özel Ağ - VPN (Virtual Private Network)Cronjob (Zamanlanmış Görevler)Printer-YazıcıJava'daki İlkel Veri Tipleri ve Alabilecekleri DeğerlerBit & Byte ve Hafıza Boyutlarındaki Ölçüm BirimleriSanallaştırma (Virtualization)DNS KayıtlarıE-Fatura ve E-ArşivYazılım Lisans TürleriAudit (Denetim) Açık Kaynak (Open Source)Monitoring (İzleme)Sitemap & Robots.txtKilometretaşı (Milestone)BSMV (Banka ve Sigorta Muameleleri Vergisi)KKDF (Kaynak Kullanımı Destekleme Fonu)Siber Pazartesi (Cyber Monday)Black Friday (Kara Cuma)Hotlink.htaccessCryptoLockerMalwareTrojanWormDependency (Yazılım Geliştirme Sürecinde Paket Bağımlılığı)Configuration (Yazılım Geliştirme Sürecinde Yapılandırma)Yahoo ve Yahoo'nun Başarısızlık NedenleriArchiving (Yazılım Geliştirme Sürecinde Arşivleme)Görsel Dosya Türleri (Image Types)ReleaseVersioning & Tagging (Versiyonlama ve Etiketleme)BuildJob (Yazılım Geliştirme Sürecinde Görevler)SonarQubeCDATA (Character Data)Alan Adı Uzantıları (Domain Name Extensions)Regresyon Kara Kutu (Black-Box) TestBeyaz Kutu (White-box) TestGri Kutu (Grey-box) TestYazılım Geliştirme Sürecindeki Temel Test TürleriKod gözden geçirme (Code Review)Birim Testi (Unit Testing)Yazılım Sürecinde EntegrasyonJAR & WAREager & Lazy Fetch TypeMaskelemeKPI (Key Performance Indicator)KII (Key Impact Indicator)Projenin JAR Dosyasını Oluştur - JAR PathSunucu için Linux dağıtım SeçimiKonyteynerler (container technologies)Runtime & Compile Time (Çalışma ve Derleme Zamanı)@Anotasyonlar (@Annotations)