Sürekli modernize edin, tek hamlede değil.
Yol haritanızla birlikte ilerleyen strangler desenli modernizasyon — özellik geliştirme sürerken risk sistemden adım adım çıkar.
- Değerlendirme
- Karakterizasyon
- Çıkarma & gölgeleme
- Kapatma & tekrar
Amaç hızlı ilerlemek değil.
Tek hamlelik bir yeniden yazım yol haritanızı dondurur, herkesin öngördüğünden uzun sürer ve tüm riskini tek bir canlıya geçiş tarihine yükler. Ekip, altından sürekli değişen bir sistemin kopyasını yeniden inşa etmekle uzun bir süre geçirir. İş birimleri özellik istemeyi bırakır, çünkü cevap her zaman “geçişten sonra” olur. Sonra tek bir hafta sonu programın başarılı olup olmadığına karar verir. Biz tersinden modernize ederiz: eski sistemin çevresinde yeni servisler büyütür, trafiği kademeli olarak onlara yönlendirir ve monoliti zaten hiçbir iş yapmaz hâle geldikten sonra kapatırız.
Bu yaklaşımın bir adı — strangler fig — ve altında bir disiplini var. Karakterizasyon testleri sistemin bugün ne yaptığını sabitler. Dikişler teknik kolaylığa göre değil, iş sınırlarına göre açılır. Yeni servis, çıktıları üzerinde anlaşılan eşiği tutturana kadar canlı trafiğe karşı gölgede çalışır, okumalar her seferinde belirli bir yüzde kadar taşınır ve yazmalar ancak okumalar üzerinde anlaşılan bir süre boyunca sorunsuz kaldıktan sonra gelir. Sistem gerçekten bilinmiyorsa önce Legacy Yeniden Mühendislik ile başlarız; hedef farklı bir tasarımın yanı sıra farklı bir platform da ise Bulut Geçişi aynı program içinde yürür.
Amaç, felakete tek bir devreye almalık mesafede olmadan sürekli ilerlemek. Sürerken bir iş özelliğini canlıya alamayan bir modernizasyon programı, mimari diyagram ne derse desin, çoktan başarısız olmuştur.
Esnetmediğimiz dört kural.
Modernizasyon öngörülebilir biçimlerde yanlış gider. Bunlar her programda bağlı kaldığımız kısıtlar ve sözleşme imzalanmadan önce tartışacağımız konulardır.
Önce karakterizasyon
Bir şey bozulduğu anda haberiniz olsun diye, hiçbir şeyi değiştirmeden önce mevcut davranışı testlerle sabitleyin. Canlı ortam trafiğinden gerçek girdi ve çıktıları toplar, bunları hem eski hem yeni uygulamaya karşı tekrar oynatırız. Bu ağ kurulana kadar her yeniden düzenleme, yanına bir devreye alma iliştirilmiş bir tahmindir.
Dikiş bulma
Teknik kolaylığa göre değil, gerçek iş sınırlarına göre ayırın. Bir dikiş; kendi verisine sahipse, sayılabilir sayıda çağıranı varsa ve tek bir iş nedeniyle değişiyorsa — fiyatlama, faturalama, bildirimler, belge üretimi — çıkarılmaya değerdir. Çıkarılan her servis kendi sürüm treninde değer üreterek bağımsızlığını hak eder; sınırın doğru olduğunu da böyle anlarız.
Gölge & çift yazma
Herhangi bir okuma devredilmeden önce yeni ve eski paralel çalışır, çıktılar canlı trafik üzerinde karşılaştırılır. Farklar müşteri şikâyeti olarak değil, bir panoda fark akışı olarak gelir ve geçişin kabul eşiği önceden yazılı olarak mutabık kalınan bir eşleşme oranıdır. Veri de aynı kurala uyar: mutabakatlı çift yazma, genellikle Kafka ve değişiklik yakalama üzerinden, tek bir geçiş hafta sonuyla değil.
Geri alınabilir geçişler
Her adımın prova edilmiş bir geri alması vardır — bir wiki sayfasında anlatılan değil, gerçek veri hacmiyle gerçek bir ortamda prova edilen. Trafik, nöbetteki bir mühendisin geri çevirebileceği bir bayrağın arkasında taşınır ve yenisi tam bir iş döngüsünden sağ çıkana kadar eski yol sıcak tutulur. Canlıya geçiş günlerinde sürpriz olmaz; asıl mesele budur.
İş günlük olarak nasıl yürür?
Dikişler diyagramda değil, trafikte bulunur.
Her monolitin bir mimari dokümanı vardır ve her mimari doküman, birinin 2014’te ne amaçladığının anlatımıdır. Biz bunun yerine kanıtla çalışırız: statik analizden çağrı grafikleri, enstrümante edilmiş bir çalışma ortamından istek izleri, veritabanından tablo erişim desenleri ve depodan değişiklik geçmişi. Bu çalışmadan çıkan dikişler nadiren diyagramın gösterdiği modüllerdir. Bunlar veriyi paylaşan ve birlikte değişen davranış kümeleridir; riske göre düzeltilmiş geri dönüşe göre sıralanırlar — her birinin ne kadar olay yükünü, sürüm sürtünmesini ve altyapı maliyetini ortadan kaldırdığı, çıkarılmasının ne kadar zor olduğuna karşı.
- Dokümantasyon üzerinde değil, çalışan sistem üzerinde bağımlılık ve çağrı grafiği analizi
- İş birimlerinin okuyabileceği bir modernizasyon sırası: monoliti önce ne terk eder ve karşılığında ne gelir
- Her dikiş küçük bir çıktı olarak boyutlandırılır, böylece ilerleme görünür kalır
- 01Değerlendir
- 02Karakterize et
- 03Çıkar
- 04Gölgele
- 05Canlıya geç
- 06Kapat
Her dikiş için bir kez çalışan döngü
Gölge çalıştırma, görüşü bir farka dönüştürür.
Yeni servisin doğru olup olmadığı tartışması, servis canlı trafiği görmeye başladığı gün biter. İstekler çıkarılan servise aynalanır; yanıtları monolitinkilerle karşılaştırılıp kaydedilir, ama çağırana asla döndürülmez. Uyuşmazlıklar biçimlerine göre gruplanır, bu yüzden çok sayıda fark genellikle birkaç hataya iner — bir yuvarlama kuralı, farklı ele alınan bir null, kimsenin yazıya dökmediği ama iş birimlerinin hâlâ bağımlı olduğu bir legacy davranış. Bir okumanın taşınması, yalnızca eşleşme oranı ay sonu dahil tam bir döngü boyunca üzerinde anlaşılan eşiğin üstünde kaldığında gerçekleşir. Yazmalar çift yazılır ve mutabakat raporu üzerinde anlaşılan bir süre boyunca ilgi çekmez hâle gelene kadar planlı olarak mutabakata tabi tutulur.
- Yanıt karşılaştırmalı aynalanmış trafik; istek bazında değil, fark biçimine göre gruplanır
- Yazılı geçiş kriterleri: eşleşme oranı, kapsanan dönem ve onayı kimin verdiği
- Planlı mutabakatla çift yazma, böylece veri sorusu trafik sorusundan önce yanıtlanır
Kapatma bir yeniden adlandırma değil, bir silmedir.
Çoğu modernizasyon programı aynı yerde takılır: yeni servis canlıdadır, eski kod hâlâ oradadır ve artık iki uygulamanın tek bir ekip tarafından sürdürülmesi gerekir. Biz kapatmayı sonradan yapılacak bir toparlama olarak değil, dikişin bir parçası olarak ele alırız. Trafik tümüyle yeni yola geçtikten ve geri alma penceresi kapandıktan sonra eski rotalar, işler, tablolar ve yetkiler silinir; devre dışı bırakma kaydı da neyin, ne zaman gittiğini ve yerine ne geldiğini not eder. Modernizasyonu ek bir sistem değil bir maliyet düşüşü hâline getiren şey bu kayıttır.
- Açık bırakılmayıp geçişte mutabık kalınan, tanımlı bitiş tarihli bir geri alma penceresi
- Ölü kod, zamanlanmış işler, veritabanı nesneleri ve kimlik bilgileri birlikte kaldırılır
- Dikiş başına devre dışı bırakma kaydı, böylece program ilerlerken sistem haritası doğru kalır
Masanın her tarafına ne düşer.
Bir cephe, bir olay omurgası ve daha küçük bir etki alanı.
İlk inşa ettiğimiz şey monolitin önündeki yönlendirme katmanıdır, çünkü sonrasındaki her şeyi geri alınabilir kılan odur. Yeni servisler onun arkasında durur, alan olayları yayımlar ve kendi verilerini okur. Mühendisleriniz programın yanında değil, içinde çalışır — ilk dikişte eşli, ikincisinde sahip olarak.
- En baştan yönlendirme cephesi, özellik bayrakları ve trafik bölme
- Legacy veritabanından değişiklik yakalamayla birlikte Kafka üzerinden alan olayları
- Cephe, monolit ve çıkarılan her servis arasında sözleşme testleri
Sistem ortamı değişirken yol haritası ilerlemeye devam eder.
Özellik geliştirmenin sürmesi sizin tarafınızda bir vaat değil, bizim tarafımızda bir tasarım kısıtıdır. İstenen bir değişiklik çıkardığımız bir dikişe dokunuyorsa, monolit sürümü yerine kendi sürüm treniyle yeni servise iner — böylece teslimat faydası program bittikten sonra değil, sürerken gelir.
- Dikiş zaten varsa yeni özellikler yeni servislere iner
- Servis başına sürüm temposu, böylece riskli bir değişiklik güvenli olanları artık engellemez
- Görünür bir dikiş sırası, böylece ürün yol haritası gerektirdiğinde bir sınırı öne çekebilir
Risk, denetleyebileceğiniz bir takvimle sistemden çıkar.
Her dikiş, belirtilmiş bir geri dönüşü olan, maliyeti çıkarılmış küçük bir iş parçasıdır: daha az olay, daha kısa bir sürüm döngüsü ya da nihayet küçültülebilen altyapı. Hiçbir şey tek bir tarihe bağlı değildir, bu yüzden programın baştan sona maliyet olup değer üretmediği bir yıl yaşanmaz. Her geçiş prova edilmiş bir geri alma taşır ve her kapatma kayda geçer.
- Harcama, çok yıllık bir yeniden yazım bütçesine değil, teslim edilen dikişlere bağlıdır
- Her geçişte prova edilmiş geri alma; iddia edilen değil, kanıtlanan
- Sistem ortamından gerçekte neyin çıktığına dair denetim izi olarak devre dışı bırakma kaydı
Her programın içerdikleri ve sistem ortamınıza bağlı olanlar.
Dikiş başına tekrarlanan dört aşama.
Değerlendirme
Sistem arkeolojisi: bağımlılıklar, veri akışları, risk haritası ve en hızlı geri dönen modernizasyon sırası. Kodu okur, trafiği izler ve cesetlerin nereye gömüldüğünü bilen kişilerle görüşürüz; ardından dikişleri iş birimlerinin tartışabileceği bir sıraya koyarız. Çıktı, hedef mimariye dair bir slayt değil, ilk dikişin maliyeti çıkarılmış bir yol haritasıdır.
Karakterizasyon
İş birimlerinin gerçekten bağımlı olduğu davranışların çevresine golden-master ve sözleşme testleri. Gerçek canlı ortam girdi ve çıktıları toplanıp tekrar oynatılır, dokümantasyonun hiç bahsetmediği uç durumlar test olarak kaydedilir ve test takımı o noktadan itibaren CI’da çalışır. Sonraki her değişikliği güvenli kılan aşama budur; çoğu yeniden yazımın atladığı aşama da budur.
Çıkarma & gölgeleme
En yüksek değerli dikişler önce çıkarılır ve çıktılar üzerinde anlaşılan eşiği tutturana kadar canlı trafiğe karşı gölgede çalışır; sonra okumalar bir bayrağın arkasında kademeli olarak devredilir ve yazmalar mutabakatla birlikte gelir. Özellik geliştirme bu süre boyunca sürer — dikişin olduğu yerde yeni serviste, olmadığı yerde monolitte.
Kapatma & tekrar
Eski yollar yalnızca terk edilmez, silinir: rotalar, işler, tablolar, kimlik bilgileri ve panolar birlikte gider ve devre dışı bırakma kaydı değişikliği not eder. Sonra döngü bir sonraki dikişte yeniden başlar; bir öncekinin kanıtı her seferinde tahmini daha iyi hâle getirir.
Her dikişin sonunda elinizde olanlar.
- Riske göre düzeltilmiş geri dönüşe göre sıralanmış modernizasyon yol haritası
- Legacy davranışı kapsayan karakterizasyon test takımı
- Paralel çalıştırma kanıtıyla birlikte çıkarılmış servisler
- Her geçiş için prova edilmiş geri alma prosedürleri
- Devre dışı bırakma kaydı — neyin, ne zaman kapatıldığı ve yerine ne geldiği
Bunun doğru tercih olduğu durumlar.
Sistem hâlâ para kazandırıyorsa, yol haritası bir yıl duramıyorsa ve tek bir canlıya geçiş tarihinin riski iş birimleri için kabul edilemezse kademeli modernizasyonu seçin — regülasyonlu sistem ortamları, sipariş ve faturalama sistemleri, kötü bir hafta sonunun düzenleyiciyle konuşmaya dönüştüğü her yer. Sistem ortamı kimsenin kafasında tutamayacağı kadar büyük olduğunda da doğru tercih budur: dikişler, her şeyi önce anlamak zorunda kalmadan ilerlemenizi sağlar. Ayrıca sonucu sahiplenmeye niyetli kurumlara uyar, çünkü onların mühendisleri ilk dikişten itibaren programın içinde çalışır.
Eskisi çalışmaya devam ederken tek bir ekibin birkaç haftada yeniden yazabileceği küçük bir uygulama için yanlış tercihtir — kurulan düzenek sorunun kendisinden pahalıya gelir. İş mantığı gerçekten geçerliliğini yitirmişse ve dürüst cevap taşınmış bir ürün değil yeni bir ürünse yine yanlıştır; bu Ürün Keşfi konusudur. Ve legacy davranışa dair soruları yanıtlamak üzere kimsenin görevlendirilmeyeceği yerde işe yaramaz: gölge çalıştırma farkları bulur, ama hangilerinin hata hangilerinin iş kuralı olduğunu yalnızca sizin ekibiniz söyleyebilir.
Sık sorulan sorular
Bu hizmet genelde nerede konumlanır.
Ne inşa ettiğinizi bize anlatın.
Bugün elinizde ne olduğunu ve neye ihtiyacınız olduğunu anlatın. Bir mühendis okur; nasıl yaklaşacağımızı ve size uyan modeli yazılı olarak iletir.