İletişim

Deployment (Yayına Alma) Nedir?

Kısa tanım

Deployment (yayına alma), bir yazılımın yeni sürümünün test edilmiş build çıktısının canlı ortama kurulup çalışır hâle getirilmesi sürecidir. Dosyaların veya container imajlarının sunuculara aktarılmasını, veritabanı değişikliklerinin uygulanmasını, yeni sürümün başlatılıp sağlık kontrolünden geçirilmesini ve trafiğin ona yönlendirilmesini kapsar. Deployment teknik kurulumu anlatır; özelliğin kullanıcılara açılması olan release'ten ayrı düşünülebilir.

Diğer adları: Yayına Alma, Canlıya Alma, Dağıtım, Deploy, Software Deployment

Yeni sürümün sunucuya yüklenip başlatıldığı, sağlık kontrolünden sonra trafiğin yönlendirildiği ve kullanıcılara ulaştığı yayına alma akışı

Deployment ve release aynı şey değil

Günlük dilde “canlıya aldık” cümlesi iki farklı olayı anlatabilir. Deployment, yeni kodun canlı altyapıya kurulup çalışmaya başlamasıdır. Release ise bir özelliğin kullanıcılara açılmasıdır. İkisi çoğu projede aynı anda olur, ama ayrılabilir: yeni bir ödeme ekranı, bir özellik bayrağının (feature flag) arkasında kapalı olarak canlıya deploy edilir, önce şirket içinde denenir, ardından kullanıcıların bir kısmına ve sonra herkese açılır.

Bu ayrım riski azaltır. Kodun kurulması ile davranışın değişmesi farklı anlara bölündüğünde, sorunlu bir özelliği kapatmak için yeni bir deployment gerekmez; bayrağı kapatmak yeter.

Bir deployment'ın adımları

  1. Artifact seçimi: Build sürecinden çıkan ve testlerden geçen paket ya da container imajı, sürüm etiketiyle belirlenir.
  2. Veritabanı değişiklikleri: Gerekli migration'lar uygulanır.
  3. Yeni sürümün başlatılması: Yeni örnekler ayağa kalkar ve sağlık kontrolünden geçer.
  4. Trafiğin aktarılması: Yük dengeleyici veya reverse proxy istekleri yeni sürüme yönlendirir.
  5. Gözlem: Hata oranı, yanıt süreleri ve iş metrikleri bir süre yakından izlenir.
  6. Temizlik: Eski sürüm, geri dönüş ihtiyacı kalmayınca kapatılır.

Bu adımların elle yapılması hem yavaştır hem de her seferinde farklı sonuç doğurabilir. CI/CD hatları, deployment'ı her seferinde aynı biçimde çalışan bir komuta indirger.

Deployment stratejileri

StratejiNasıl çalışır?Kesinti ve risk
RecreateEski sürüm durdurulur, yenisi başlatılırKısa bir kesinti olur; basit ama kaba
RollingÖrnekler birer birer yeni sürümle değiştirilirKesinti yok; geçiş sırasında iki sürüm birlikte çalışır
Blue-greenYeni sürüm ayrı bir ortamda hazırlanır, trafik tek hamlede çevrilirGeri dönüş anlıktır; kaynak ihtiyacı iki katına çıkar
CanaryYeni sürüm önce trafiğin küçük bir kısmına verilir, sorun yoksa artırılırHatanın etkisi sınırlı kalır; iyi izleme gerektirir

Ayrıntılar için blue-green deployment ve canary deployment maddelerine bakabilirsiniz. Hangi strateji seçilirse seçilsin, sorun çıktığında önceki sürüme dönüş yolu deployment başlamadan bellidir.

En zor kısım: veritabanı

Kod geri alınabilir; silinmiş bir sütun ise kolayca geri gelmez. Rolling ve canary stratejilerinde eski ve yeni sürüm bir süre aynı veritabanını birlikte kullanır, bu yüzden şema değişiklikleri iki sürümle de uyumlu olmalıdır. Yaygın yöntem “genişlet ve daralt” (expand and contract) yaklaşımıdır: önce yeni sütun eklenir ve iki sürüm de çalışmaya devam eder; kod yeni sütuna geçtikten ve veri taşındıktan sonra, ayrı bir deployment'ta eski sütun kaldırılır.

Başarılı bir deployment nasıl anlaşılır?

Komutun hatasız bitmesi yeterli değildir. Deployment sonrasında kritik sayfaların ve uç noktaların yanıt verdiğini doğrulayan kısa duman testleri (smoke test) çalıştırılmalı, hata oranı ve yanıt süreleri önceki sürümle karşılaştırılmalıdır. Hangi eşik aşıldığında geri dönüleceği önceden yazılı olursa, kriz anında tartışma yerine karar uygulanır. Kullanıcıların bakım sırasında görebileceği sayfalar için de doğru durum kodunun döndürülmesi, arama motorlarının geçici kesintiyi kalıcı bir sorun gibi algılamasını önler.

İlgili terimler

← Sözlüğe dön