Cloud native uygulama tasarımı ve 12-Factor ilkeleri
Beceri rehberi

Cloud native uygulama tasarımı ve 12-Factor ilkeleri

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Cloud native uygulama tasarımı: 12-Factor ilkeleri, durum yönetimi, dayanıklılık desenleri, kademeli dönüşüm adımları ve sık yapılan hatalar.

Bulut doğal uygulama nedir?

Bulut doğal (cloud native) uygulama, bulutun esnek ve değişken doğasına uyacak biçimde tasarlanmış uygulamadır. Sunucunun kalıcı olmadığını, kaynakların istendiğinde açılıp kapandığını ve parçaların beklenmedik biçimde düşebileceğini baştan kabul eder. Eski sunucuyu olduğu gibi buluta taşımak (lift and shift) uygulamayı bulut doğal yapmaz; uygulama hâlâ tek makinenin yerel diskine, sabit adreslere ve elle yapılan kuruluma bağımlı olabilir.

Bulut doğal tasarım genellikle şu özellikleri taşır: konteyner gibi hafif paketleme, küçük ve bağımsız dağıtılabilen servisler, yapılandırmanın koddan ayrılması, durumsuz süreçler, otomatik ölçekleme ve sağlam gözlemlenebilirlik. Hedef modaya uymak değil; sık, güvenli ve düşük riskli dağıtım yapabilmek ile hata anında kendini toparlayabilmektir.

12 faktör (12-Factor) ilkeleri nelerdir?

12-Factor, modern hizmet olarak yazılım uygulamalarının nasıl yazılacağını tarif eden, yaygın biçimde kabul gören bir ilkeler setidir. 12 faktör resmî sitede şöyle adlandırılır ve her biri kısaca şu anlama gelir:

  • Codebase: Bir uygulamanın tek bir kod deposu vardır; farklı ortamlar aynı koddan türer.
  • Dependencies: Bağımlılıklar açıkça bildirilir ve izole edilir; sistemde ne olduğuna güvenilmez.
  • Config: Ortama göre değişen ayarlar koddan ayrı, ortam değişkenlerinde tutulur.
  • Backing services: Veritabanı, kuyruk, önbellek gibi servisler değiştirilebilir bağlı kaynaklar olarak ele alınır.
  • Build, release, run: Derleme, yayın ve çalıştırma aşamaları kesin biçimde ayrılır.
  • Processes: Uygulama durumsuz süreçler olarak çalışır; kalıcı veri bir destek servisinde tutulur.
  • Port binding: Uygulama kendi hizmetini bir port üzerinden sunar.
  • Concurrency: Ölçekleme, süreç sayısını artırarak yapılır.
  • Disposability: Süreçler hızlı açılır, düzgün kapanır ve ani sonlanmaya dayanır.
  • Dev/prod parity: Geliştirme, test ve üretim ortamları mümkün olduğunca birbirine benzer tutulur.
  • Logs: Günlükler olay akışı olarak standart çıktıya yazılır; saklama ve analiz platformun işidir.
  • Admin processes: Yönetim görevleri tek seferlik süreçler olarak çalıştırılır.

Adım adım: mevcut bir uygulamayı bulut doğala yaklaştırmak

Bir uygulamanın tamamını sıfırdan yazmak çoğu zaman gerçekçi değildir; yaklaşım kademelidir.

İlk adım yapılandırmayı koddan ayırmaktır. Parolalar, bağlantı adresleri ve ortama özgü ayarlar kod deposundan çıkarılıp ortam değişkenlerine ya da bir sır yönetimi hizmetine taşınır. Bu tek değişiklik, aynı paketin her ortamda çalışmasını mümkün kılar. İkinci adım durumu dışarı almaktır: oturum bilgisi ve yüklenen dosyalar sunucunun yerel diskinden çıkarılıp bir önbellek, veritabanı ya da nesne depolamaya yazılır; böylece sunucu istendiğinde silinip yeniden kurulabilir.

Üçüncü adım paketlemedir: uygulama ve bağımlılıkları konteyner imajına alınır, imaj bir derleme hattında üretilir ve aynı imaj her ortama dağıtılır. Dördüncü adım sağlık ve günlüğe odaklanır: uygulama sağlığını bildiren bir uç nokta sunar, günlüklerini standart çıktıya yazar. Beşinci adım dayanıklılıktır: dış servis çağrılarına zaman aşımı, yeniden deneme ve devre kesici gibi desenler eklenir. Ancak bu temel oturduktan sonra servislere bölmek gibi daha ağır kararlar gündeme gelir.

Durum yönetimi ve dayanıklılık desenleri

Bulut doğal tasarımın en kritik konusu durumdur. Uygulama süreçleri durumsuz olduğunda yatay ölçekleme kolaylaşır, bir süreç düştüğünde başka bir süreç aynı isteği işler. Durum ise şu yerlerde tutulabilir: veritabanı, önbellek ve nesne depolama. Hangi verinin nerede tutulacağı, tutarlılık ve gecikme ihtiyacına göre seçilir.

Dayanıklılık desenleri hataların yayılmasını önler. Zaman aşımı, bir çağrının sonsuza kadar beklemesini engeller. Yeniden deneme, geçici hataları tolere eder ama yoğun yük altında sorunu büyütmemesi için bekleme süresi artan aralıklarla yapılmalıdır. Devre kesici, sürekli başarısız olan bir servise gereksiz istek göndermeyi durdurur. Bölmeler (bulkhead), bir bileşenin kaynak tüketiminin diğerlerini boğmasını engeller. Bu desenlerin amacı hatayı yok etmek değil, hatanın etkisini sınırlamaktır.

Örnek senaryo: sipariş uygulaması

Örneğin bir sipariş uygulaması başlangıçta tek sunucuda çalışıyor, oturum bilgisini bellekte, fatura PDF'lerini yerel diskte tutuyor ve ayar dosyası sunucuda elle düzenleniyor. Bulut doğala yaklaşım şöyle ilerler: ayarlar ortam değişkenine taşınır, oturumlar bir önbellek servisine yazılır, PDF'ler nesne depolamaya yüklenir, uygulama konteyner imajı haline getirilir ve derleme hattı her değişiklikte aynı imajı üretir. Sonuç olarak sunucu sayısı yüke göre değişir, bir sunucu düşünce kullanıcı oturumu kaybolmaz, yeni sürüm kullanıcıyı kesintiye uğratmadan dağıtılır.

Bu örnekte uygulama mikroservislere bölünmemiştir; yine de bulut doğal ilkelerin çoğunu karşılar. Bulut doğal olmak, servis sayısıyla değil, bağımlılıkları ve durumu nasıl yönettiğinizle ilgilidir.

Sık yapılan hatalar

  • Bulut doğalı mikroservisle eş tutmak: gereksiz bölme operasyon yükünü artırır, faydası olmaz.
  • Konteynere koyup durumu yerel diskte bırakmak; konteyner silindiğinde veri kaybolur.
  • Parolaları imaja gömmek ve imajı herkese açık bir depoya koymak.
  • Üretim ve test ortamlarının birbirinden çok farklı olması; sorunlar yalnızca üretimde çıkar.
  • Günlükleri sunucuda dosyaya yazıp toplamamak; sunucu kaybolunca günlükler de kaybolur.
  • Gözlemlenebilirliği atlamak; dağıtık sistemde neyin nerede bozulduğu görünmez olur.
  • Her ilkeyi mutlak kural saymak; ilkeler yönlendirir, bağlama göre ödünler gerekebilir.

Nasıl öğrenilir ve Mindset programlarında nerede çalışılır?

Önce 12-Factor ilkelerini resmî siteden okuyun ve kendi uygulamalarınızdan birine her ilkeyi sorarak değerlendirin; hangisini karşılamadığını yazmak öğrenmenin en somut yoludur. Ardından konteyner ve derleme hattı kurmayı deneyin, sonra dayanıklılık desenleri ve gözlemlenebilirlik konularına geçin.

Mindset kataloğundaki Cloud-Native Uygulama Tasarımı ve 12-Factor İlkeleri programının modülleri kod tabanı, bağımlılık ve yapılandırma, destek servisleri ve süreç tasarımı, yapı, yayın ve çalıştırma, eşzamanlılık ve günlükleme, yönetim görevleri başlıklarını içeriyor. Bulut Doğal (Cloud-Native) Uygulama Tasarım Prensipleri programı ise durum yönetimi, dayanıklılık ve hata toleransı desenleri, sağlık ve gözlemlenebilirlik ile dönüşüm yol haritasına odaklanıyor.

İlgili Mindset programı

Cloud-Native Uygulama Tasarımı ve 12-Factor İlkeleri

Sık sorulanlar

Sık sorulan sorular

Bulut doğal ile mikroservis aynı şey midir?

Hayır. Mikroservis, uygulamanın küçük bağımsız servislere bölünmesi biçimidir; bulut doğal ise daha geniş bir tasarım yaklaşımıdır. Tek parça bir uygulama da yapılandırmasını dışarıda tutarak, durumsuz çalışarak ve konteynerle paketlenerek bulut doğal ilkelerin birçoğunu karşılayabilir.

12-Factor yalnızca yeni yazılan uygulamalar için mi geçerli?

Hayır. Mevcut uygulamalar da kademeli olarak ilkelere yaklaştırılabilir. Yapılandırmayı koddan ayırmak ve durumu sunucudan çıkarmak gibi küçük adımlar bile dağıtımı ve ölçeklemeyi belirgin biçimde kolaylaştırır. Tam uyum şart değildir, her ilke bağlama göre değerlendirilir.

Konteyner kullanmadan bulut doğal olunabilir mi?

Teknik olarak mümkündür. Sunucusuz işlevler ya da yönetilen uygulama platformları da bulut doğal ilkeleri karşılayabilir. Konteyner bu yaklaşımın yaygın araçlarından biridir ama tanımın kendisi değildir. Önemli olan uygulamanın değiştirilebilir, tekrarlanabilir ve hataya dayanıklı çalışmasıdır.

Bulut doğal tasarımın temel faydası nedir?

Dağıtımı sık ve düşük riskli yapar, yükü yatay ölçeklemeyi kolaylaştırır ve bileşen arızalarında sistemin toparlanmasını sağlar. Bedeli ise tasarım disiplini, otomasyon ve gözlemlenebilirlik gereksinimidir. Bu yatırım yapılmadan yalnızca teknoloji değiştirmek beklenen faydayı getirmez.