Özellik Bayrakları — Deploy Ettim Ama Kimse Görmedi
Önce şunu oku: Yayın Stratejileri — Hatalı Sürüm Kaç Kişiye Dokunur?
30 saniyede özet
Özellik bayrağı, kodu yayına almak ile özelliği açmayı birbirinden ayırır. Kod bayrağın arkasında kapalı bekler; önce çalışanlara, sonra küçük bir dilime açılır. Hata çıkarsa kapatmak bir deploy değil, saniyelik bir dokunuştur.
Bir elektrikçi salona yeni bir lamba takıyor. Lamba bir anahtara bağlıysa takıldığı an sönük durur; ne zaman yanacağına sen karar verirsin. Anahtar yoksa takıldığı an yanar, söndürmek için ustanın geri gelmesi gerekir.
-
Bayt: Anında havale özelliği bitti! Deploy edince herkes görecek.
-
Sen: Hatalı çıkarsa nasıl kapatacağız?
-
Bayt: Geri deploy... o da on dakika sürüyor. On dakika boyunca herkes etkilenir.
-
Bayt: Kodu yayına almak ile özelliği açmak aynı an olmak zorunda değil. Bir anahtar takalım.
Deploy ayrı, yayın ayrı
Bir feature flagKodun içinde, çalışırken değiştirilebilen bir ayara bakan 'açık mı?' kontrolü. Deploy'u release'ten ayırır; kapatmak bir deploy değil, bir ayardır.Sözlükte gör →, kodun içindeki bir “açık mı?” sorusudur. Cevap koddan değil, çalışırken değiştirilebilen bir ayardan gelir.
Kodu bayrak kapalıyken yayına almaya dark launchKodu bayrak kapalıyken yayına almak: kod sunucudadır ama hiçbir kullanıcı o yola girmez. Açmak ayrı bir karar olarak bekler.Sözlükte gör → denir. Deploy olur ama kimse özelliği görmez; açmak ayrı bir karar olarak bekler.
Kafam karıştı, daha basit anlat
Bayrak, özelliği açıp kapatan bir anahtardır. Kod yayında olabilir, anahtar kapalıyken kimse görmez.
Deploy ile release arasındaki fark nedir?
Dark launch ne demektir?
Adım adım açmak
Yeni özellik bayrakla müşterilerin yüzde 10'una açıldı. Bayrak her istekte yeniden zar atıyor. Dilimdeki bir müşteri beş kez sayfayı yeniledi. Ne görür? Cevabı göster
Özelliği bir görür, bir göremez. Karar her istekte yeniden verildiği için aynı müşteri bazen dilimin içinde, bazen dışında kalır. Düğme gelip gider.
Adım adım oku
- Anahtarsız lamba takıldığı an yanar.
- Söndürmek için ustanın geri gelmesi gerekir: dakikalar.
- Anahtarlı lamba takılır ama sönük durur.
- Yakmak da söndürmek de bir dokunuş: saniyeler.
Güvenli sıra: önce çalışanlar, sonra küçük bir müşteri dilimi, sonra herkes. Her adımda metriklere bakılır; tıpkı canary releaseYeni sürümü önce trafiğin küçük bir dilimine açıp hata oranını eski sürümle karşılaştırmak. Hatalı sürüm yalnızca o dilime dokunur.Sözlükte gör → gibi, ama sunucu yerine kullanıcı üzerinden.
Yüzde dilimi müşteri numarasının hash’ine bağlanır. Böylece bir müşteri dilimin içindeyse hep içinde kalır.
Kafam karıştı, daha basit anlat
Önce çalışanlar, sonra birkaç müşteri, sonra herkes. Yüzde kararını müşteriye yapıştır ki düğme gelip gitmesin.
Hatalı özellik bayrakla müşterilerin yüzde 10'una açık. En hızlı müdahale hangisi?
Yüzde 10'luk bayrak her istekte Math.random() ile karar veriyor. Sonuç?
Kendin gör
Anında havale yayına çıkıyor
Tohum 213282Müşteri 42'nin beş isteği:
- …
- …
- …
- …
- …
Oynat ya da adımla.
Şu an ne oldu?
Deploy ile doğrudan açık
Kodu yayına almak (deploy) ile özelliği müşteriye açmak (release) aynı şey olmak zorunda değil.
Görevler0/3
Hatalı özelliği bütün müşterilere açaçık
İpucu
Varsayılan ayarlar yeter.
Kodu yayına al ama hiçbir müşteri görmesinaçık
İpucu
Deploy ile yayını ayır.
Aynı müşteriye düğmeyi bir gösterip bir saklaaçık
İpucu
Yüzde dilimine bak.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Hatalı özellik deploy ile herkese açıldı; kapatmak geri deploy.
- “Bayrak arkasında, kapalı” seç. Kod yayında, kimse görmüyor.
- “Yalnızca çalışanlar” seç. Hatayı çalışanlar buldu, bayrak saniyeler içinde kapandı.
- Yüzde 10’a geç ve yapışıklığı kapat. Müşteri 42’nin düğmesi bir geliyor bir gidiyor.
Bir özelliği açmak için en güvenli sıra hangisi?
Bayrak arkasındaki özellik hatalı ve bayrak kapalı. Kaç müşteri etkilenir?
Tuzaklar
Unutulan bayraklar. Herkese açılmış ve aylarca dokunulmamış bayraklar kodu iki yola böler ve testleri ikiye katlar. Her bayrağın bir sahibi ve bir silinme tarihi olsun.
Bayrağın çözmediği şey. Veritabanı şeması bayrakla açılıp kapanmaz. Yeni bir kolon, bayrak kapalıyken de eski kodla uyumlu olmalı.
Bayrak servisine bağımlılık. Bayrak ayarı okunamazsa ne olacağı baştan belli olmalı. Güvenli varsayılan çoğu zaman “kapalı”dır.
Kafam karıştı, daha basit anlat
Bayrağı işi bitince sil, şemayı ayrıca düşün, ayar okunamazsa kapalı say.
Yeni özellik bir kolon ekliyor. Bayrak kapalıyken eski kod da çalışıyor. Şema için doğru yaklaşım hangisi?
Aşağıdaki örnek bir bankanın anında havale özelliğinden: bayrak müşteri numarasıyla yapışık, ayar okunamazsa kapalı, kod iki yolu temiz ayırıyor.
Derinleş · Anında havale: bayrak arkasında, müşteriye yapışık 4 dosya · ~61 satır · ilk okumada atlayabilirsin
Kendini sına
Bayrak arkasındaki bir özelliğin kodu yayında olabilir ama hiçbir kullanıcı onu görmeyebilir.
Bayrak servisi çöktü ve ayar okunamıyor. Yeni özellik için güvenli varsayılan nedir?
Aklında kalacak üç şey
- 1 Deploy kodu sunucuya koyar, release özelliği kullanıcıya açar. Bayrak bu ikisini ayırır: kod yayında olur ama kapalı bekler.
- 2 Bayrakla açılan bir özellik, hata çıkınca saniyeler içinde kapatılır. Bayrağı olmayan bir özelliği kapatmak yeni bir deploy ister.
- 3 Yüzde dilimi müşteri numarasının hash'ine bağlanır. Her istekte yeniden karar veren bir bayrak, aynı kişiye özelliği bir gösterir bir saklar.
4 kart sonraki derste seni bekliyor