Doğrudan Prod Ortamına Dağıtım Yapmalısınız

@colemurray
İNGILIZCE06 Ağu 2026
137K
760
38
34
1.3K

TL;DR

Eski Amazon mühendisi Cole Murray, sürekli dağıtımın (continuous deployment) planlı sürümlerden daha güvenli olduğunu savunuyor. Kaçınılmaz kesintilerin etkisini en aza indirmek için CI/CD, gözlemlenebilirlik ve özellik bayraklarını (feature flags) içeren bir yol haritası sunuyor.

cole murray - inline image

Her değişiklikte prod'a dağıtım yapmak korkutucu gelebilir, ama doğrudan prod'a dağıtım yapmamak daha korkutucudur.

Amazon'da yüz milyonlarca müşteriye dağıtım yapan bir ekibe liderlik ederken kullandığım süreç budur. Danışmanlık çalışmalarım sayesinde, mühendislik ekiplerini iki haftada bir planlı sürümlerle dağıtım yapmaktan, her merge'te canlıya çıkmaya geçirdim.

Bariz olanla başlayalım:

Bir kesintiye neden olacaksınız. Bu bir "eğer" meselesi değil, "ne zaman" meselesidir.

Ne kadar birim testi, entegrasyon testi, dogfooding, uçtan uca test ya da dağıtım tanrılarına kurban adarsanız adayın, her hatayı yakalayamazsınız.

Bir hafta önce özelliğiniz üzerinde yapılan testler, takım arkadaşınızın en son değişiklikleriyle test edilmedi.

Testleriniz, takım arkadaşınızın hizmetinin pre-prod sürümü üzerinde yapıldı; o sürüm ise artık değişti ve geriye dönük uyumsuz bir değişiklik içeriyor.

Ne kadar uzun beklerseniz, bir sürümde o kadar çok değişiklik birikir. Rollback yapmanız gerekirse, 1-2 saatlik değişiklikleri değil, iki haftalık değişiklikleri geri almanız gerekir.

Bir kesintinin kaçınılmaz olduğu öncülünü kabul edersek, bir sürümü QA'lamak için büyük kaynaklar harcamak çok daha az anlamlı hale gelir; bunun yerine kaynaklarımızı bir sürümü izlemeye ve gözlemlemeye ve bir kesinti olduğunda müdahale etmeye hazır olmaya odaklamalıyız.

Şimdi, oraya nasıl ulaşacağımıza geçelim:

Ön Koşullar:

CI/CD

Testler düşündüğünüzden çok daha az önemlidir. Testler, değişikliğinizin üretimde güvenli olduğunu kanıtlayamaz. Hiçbir şey kanıtlayamaz. Testlerin yaptığı şey, başarısızlığı ucuz hale getirmektir. CI'da yakalanan bir hata dakikalara mal olur. Üretimde yakalanan bir hata, akşamınızı rollback yaparak geçirmenize mal olur.

Bu yüzden her merge'te ya da en azından pipeline'ın bir parçası olarak tüm test paketini çalıştırın: birim, entegrasyon, uçtan uca testler. Hata pipeline'da ne kadar ilerlerse, çözmenin maliyeti o kadar artar.

İzleme / Gözlemlenebilirlik

Bu işin özü, bir regresyonu mümkün olan en kısa sürede yakalayabilmektir. Bunu başarmak için mükemmel bir izleme altyapınızın olması gerekir. Bu şu şekillerde karşımıza çıkar:

  • metrikler: hatalar, gecikme, kullanılabilirlik
  • korelasyon kimlikleri içeren loglar
  • yukarıdaki ikisine bağlı sev-3 ve sev-2 (paging) alarmları

Alarm eşiklerinizi ayarlamak bir sanat ve bilim işidir. Hassasiyet ile gerçek bir olayda ne kadar hızlı tepki vereceğiniz arasında bir denge kurmanız gerekir. Hedef sev-2 uyarı süreniz 5-10 dakika olmalıdır.

Başlangıçta muhtemelen yanılacaksınız ve muhtemelen çok hassas olacaksınız. Ne yazık ki bu çoğunlukla deneme yanılma yoluyla öğreniliyor, bu yüzden başlangıçta birkaç kez gece 2'de uyanırsınız.

Özellik Bayrakları

Risk içeren herhangi bir değişikliği bir özellik bayrağı (feature flag) / uzak yapılandırma (remote config) arkasında yayınlamalısınız. Bir özellik bayrağı, tüm dağıtımı geri almak yerine herhangi bir değişikliği birkaç dakika içinde geri almanıza ve kapatmanıza olanak tanır. Ayrıca, özellik bayrağı hizmetiniz izin veriyorsa (ki vermelidir), özelliği kademeli olarak yüzdelik ya da kohort bazında kullanıma açabilir, böylece kötü bir değişikliğin etkisini daha da azaltabilirsiniz.

Bu, kodun dağıtımı ile kodun etkinleştirilmesini birbirinden ayırmamızı sağlar. İnce bir detay gibi görünür, ancak riski azaltmada oyunun kurallarını değiştiren bir şeydir.

Not: Bu bayrakları temizlemek için bir sürece ihtiyacınız olacak. İdeal olarak, oluşturulan her bayrak için bir kaldırma görevi (ticket) açmalısınız. Aksi takdirde, özellik bayrağı hizmetiniz çöktüğünde (çökecektir), ciddi bir regresyon yaşarsınız. Bunu nasıl bildiğimi sormayın.

Otomatik Geri Alma (Dağıtım Zamanı Devre Kesici)

Dağıtım zamanı devre kesici, dağıtımı sunucu filosu genelinde yayarken belirli bir sayıda veya oranda hata görürseniz dağıtımı geri almanıza olanak tanıyan bir işlevdir. Çoğu bulut sağlayıcısında bu artık basit bir onay kutusuyla mevcuttur.

Geriye Dönük Uyumlu Değişiklikler

Bunu zaten yapıyor olmalısınız, ancak her commit'te dağıtım yapmak bu pratiği zorunlu kılar. Kademeli dağıtım sırasında, eski sürüm ve yeni sürüm aynı anda çalışıyor olacak. Her değişikliğin önceki sürümle birlikte çalışması gerekir. Bunu önlemek için gece yarısı dağıtım yapma taktiğiniz artık işe yaramaz.

Dağıtım Stratejileri

Şimdi, bunlar yerindeyken, değişikliklerinizi yayınlarken riski azaltmaya yardımcı olabilecek birkaç farklı dağıtım stratejisini inceleyelim.

Tek Makine (Canary)

Tek makine dağıtımı, değişikliklerinizi daha büyük filodaki tek bir makineye dağıtır. Bu, kötü değişikliklerin etkisini yalnızca tek bir makineye indirmenizi sağlar.

Dağıtımı yaparsınız ve bu makinenin bir süre beklemesine izin verirsiniz; genel trafiğin küçük bir kısmını alır. İzleme ve uyarı sistemlerinizi bu makineye yapılandırmış olursunuz; bir şey bozulursa uyarı verir.

Kademeli Dağıtımlar

Kademeli dağıtım, zaman içinde yüzdelik bazda yayınlamanıza olanak tanır; böylece felaket niteliğinde bir hata olursa, tüm makineleri etkilemeden önce onu yakalayabilir ve ardından onları geri almaya başlayabilirsiniz.

Bölgesel Dağıtım

Şirketiniz büyüdükçe, çok bölgeli dağıtımlara sahip olacaksınız. Tüm bölgelere aynı anda dağıtım yapmak yerine, önce belirli bir bölgeye dağıtım yapabilirsiniz (genellikle en düşük trafiğe sahip bölgeye).

Bunun Geçerli Olmadığı Durumlar

Uygulama mağazası

Bir mobil uygulama yayınlamak bu rehberle tamamen uyumlu değildir. Uygulama mağazası inceleme kuyruğu, dağıtım ritminizi kısıtlar ve farklı bir strateji gerektirir.

Sertifikalı Ortamlar

Tıbbi cihazlar, havacılık elektroniği, endüstriyel kontrol vb. Yapıyı (build) bir düzenleyici kurumun sertifikalandırması gerekiyorsa sürekli dağıtım yapamazsınız.

On-prem / Self-hosted

Yükseltmeyi siz kontrol edemezsiniz. İşlettiğiniz her şeye sürekli dağıtım yapabilirsiniz, ancak yine de her değişikliğe bir sürüm numarası vermeniz gerekir ve müşteriniz, o değişikliğin ne zaman devreye alınacağına karar verir.

Nereden Başlamalı

Hepsini birden yapmayın. Sıralama önemlidir:

  1. CI'yı yeşil ve hızlı hale getirin. İdeal olarak 15 dakikanın altında.
  2. Hata oranı, gecikme ve kullanılabilirlik üzerinde metrikler ve alarmlar oluşturun. Bu, işin en önemli kısmı.
  3. Riskli herhangi bir değişikliği bir bayrak (flag) arkasına alın.
  4. Tek makine + otomatik geri alma ekleyin.
  5. Sürüm takvimini silin.
  6. Artık sürüm planlamadığınıza göre, kazandığınız tüm ekstra zaman için yeni bir kullanım alanı bulun.

Birlikte çalıştığım çoğu ekip bunu tamamlamak için yaklaşık bir çeyrek (üç ay) harcıyor. Araçlar kolay kısım. Organizasyon süreci ve planlı sürümlerin güvenli olduğu yanılsamasını yıkmak ise zor kısım.

Eğer takımınız bir sürüm takvimindeyse ve bundan çıkmak istiyorsa, yaptığım iş tam olarak bu. Bana DM atın.

Tek tıkla kaydet

YouMind ile viral makaleleri AI derin okumayla incele

Kaynağı kaydedin, odaklı sorular sorun, argümanı özetleyin ve viral bir makaleyi tek bir AI çalışma alanında yeniden kullanılabilir notlara dönüştürün.

YouMind'ı keşfet
Üreticiler için

Markdown'ınızı temiz bir 𝕏 makalesine dönüştürün

Kendi uzun yazılarınızı yayımlarken görselleri, tabloları ve kod bloklarını 𝕏 için biçimlendirmek zahmetlidir. YouMind, eksiksiz bir Markdown taslağını temiz ve hemen paylaşılabilir bir 𝕏 makalesine dönüştürür.

Markdown'dan 𝕏'e deneyin

Çözülecek daha fazla kalıp

Son viral makaleler

Daha fazla viral makale keşfet