Strangler Fig deseni

Eski bir sistemi, belirli işlevleri yeni uygulama ve hizmetlerle aşamalı olarak değiştirerek kademeli olarak taşıyın. Eski sistemdeki özellikleri değiştirdiğinizde, yeni sistem sonunda eski sistemin tüm özelliklerini oluşturur. Bu yaklaşım, eski sistemi durdurur, böylece devre dışı bırakabilmeniz için.

Bağlam ve sorun

Sistem yaşı ilerledikçe, geliştirme araçları, barındırma teknolojisi ve üzerine inşa edildikleri sistem mimarileri kullanımdan kalkabilir. Yeni özellikler ve işlevler eklendikçe, bu uygulamalar daha karmaşık hale gelir ve bu da bakımlarını veya kapsamını genişletmeyi zorlaştırabilir.

Karmaşık bir sistemin tamamını değiştirmek zordur. Bunun yerine, yeni bir sisteme aşamalı olarak geçiş yapabilir ve eski sistemi kaydedilmemiş özellikler için kullanabilirsiniz. Ancak, bir uygulamanın paralel sürümlerini çalıştırırsanız, istemcilerin her özelliği hangi sürümü içerdiğini izlemesi gerekir. Bir özelliği veya hizmeti geçirirken istemcileri yeni konuma yönlendirmeniz gerekir. Bu zorlukları gidermek için artımlı geçişi destekleyen ve istemcilerdeki kesintileri en aza indiren bir yaklaşım benimseyin.

Çözüm

Yeni hizmet sınırlarını belirledikten sonra, belirli işlev parçalarını yeni uygulamalar ve hizmetlerle değiştirmek için artımlı bir işlem kullanın. Müşteriler aynı arabirimi kullanmaya devam ediyor ve geçiş işleminin devam ettiğinin farkında değil.

Strangler Fig desenini gösteren diyagramlar.

Bu mimariye ait bir Visio dosyasını indirin.

Strangler Fig deseni, modernleşmeye kontrollü ve aşamalı bir yaklaşım sağlar. Mevcut uygulamanın modernleştirme çalışması sırasında çalışmaya devam etmesini sağlar. Bir arayüz (proxy), arka uçtaki eski sisteme giden istekleri durdurur. Arayüz, bu istekleri ya eski uygulamaya ya da yeni hizmetlere yönlendirir.

Bu düzen, ekiplerinizin projenin karmaşıklık düzeyine uygun bir hızda ilerlemesini sağlayarak geçiş risklerini azaltır. İşlevselliği yeni sisteme geçirirken, eski sistem kullanımdan kalkar ve siz de eski sistemi devre dışı bırakırsınız.

  1. Strangler Fig mimari deseni, istemci uygulaması, eski sistem ve yeni sistem arasında bir arayüz (proxy) tanıtarak başlar. Cephe bir aracı olarak işlev görür. İstemci uygulamasının eski sistemle ve yeni sistemle etkileşim kurmasına olanak tanır. İlk olarak, fasad çoğu isteği eski sisteme yönlendirir.

  2. Geçiş ilerledikçe, sistem isteklerini kademeli olarak eski sistemden yeni sisteme aktarıyor. Her yinelemede, yeni sistemde daha fazla işlev parçası uygularsınız.

    Bu artımlı yaklaşım, eski sistemin sorumluluklarını kademeli olarak azaltır ve yeni sistemin kapsamını genişletir. Süreç yinelemeli. Ekibin yönetilebilir aşamalardaki karmaşıklıkları ve bağımlılıkları ele alıyabilmesini sağlar. Bu aşamalar sistemin kararlı ve işlevsel kalmasına yardımcı olur.

  3. Tüm işlevleri geçirdikten ve eski sistemde bağımlılık kalmadıktan sonra eski sistemi yetkisizleştirebilirsiniz. Cephe, tüm istekleri yalnızca yeni sisteme yönlendirir.

  4. Cepheyi kaldırır ve istemci uygulamasını yeni sistemle doğrudan iletişim kuracak şekilde yeniden yapılandırabilirsiniz. Bu adım, geçişin tamamlanmasını işaretler.

Sorunlar ve dikkat edilmesi gerekenler

Bu düzenin nasıl uygulaneceğine karar velarken aşağıdaki noktaları göz önünde bulundurun:

  • Hem yeni sistemin hem de eski sistemin kullanabileceği hizmetleri ve veri depolarını işlemeyi göz önünde bulundurun. Her iki sistemlerin de bu kaynaklara aynı anda erişebildiğinden emin olun.

  • Gelecekteki boğazlayıcı incir geçişlerinde kolayca araya girip değiştirebilmeniz için yeni uygulamalar ve hizmetler oluşturun. Örneğin, her bir bölümü ayrı ayrı taşıyabilmeniz için çözümünüzün bölümleri arasında net sınırlar oluşturmaya çalışabilirsiniz.

  • Göç tamamlandıktan sonra genellikle strangler fig tasarımını kaldırırsınız. Alternatif olarak, daha yeni istemciler için çekirdek sistemi güncellerken, eski istemcilerin kullanması için fasadı bir bağdaştırıcı olarak tutabilirsiniz.

    Bunu geçiş mimarisi olarak kavramsallaştırıp bu mimarinin risk azaltma avantajlarını geçici altyapı maliyetleriyle dengeleyin.

  • Dış cephenin değişime uygun olduğundan emin olun.

  • Cephenin tek bir hata noktası veya performans sorununa dönüşmediğinden emin olun.

  • Sistemler arası bağımlılıkları planlama. Geçiş sırasında her iki sistem de birlikte var olması ve iletişim kurması gerekir. Örneğin, yeni sistemin eski sistemden kaydedilmemiş işlevselliği çağırması gerekebilir ve geçişsiz eski bileşenlerin yeni sistemden geçirilen işlevselliği çağırması gerekebilir. Bu çağrıları yönetmek için Bozulma Önleyici Katman desenini kullanın. Bozulma önleme katmanı, iki sistem arasındaki istekleri çeviren bir bağdaştırıcı işlevi görür. Bu katman, eski sistemin önemli kod değişiklikleri olmadan yeni hizmetlere ulaşabilmesi için yeni sistemin tasarımını eski semantiklerden korur. Bu bağdaştırıcı olmadan, sistemler arası bağımlılıklar bileşenleri bozabilir veya yeni sistemi eski kuralları benimsemeye zorlayabilir.

Bu desen ne zaman kullanılır?

Bu düzeni aşağıdaki durumlarda kullanın:

  • Özellikle büyük sistemlerin, temel bileşenlerin veya karmaşık özelliklerin değiştirilmesi risk oluştururken arka uç uygulamasını aşamalı olarak yeni bir mimariye geçirirsiniz.

  • Özgün sistem, geçiş eforu sırasında uzun bir süre varolmaya devam edebilir.

Bu düzen aşağıdaki durumlarda uygun olmayabilir:

  • Arka uç sistemine yönelik istekler engellenemez.

  • Eski sistemin kaynak koduna erişemezsiniz. Geçirilen özellikleri devre dışı bırakmak ve iç çağrıları yeniden yönlendirmek için eski sistemin kaynak kodunu değiştirebilmeniz gerekir.

  • Küçük bir sistemi geçirirsiniz ve sistemin tamamını değiştirmek basittir.

  • Orijinal çözümü hızla devre dışı bırakmanız gerekir.

İş yükü tasarımı

Azure Well-Architected Framework yapı taşlarının hedeflerini ve ilkelerini ele almak için bir iş yükünün tasarımında Strangler Fig deseninin nasıl kullanılacağını değerlendirin. Aşağıdaki tabloda, bu desenin her bir sütunun hedeflerini nasıl desteklediği hakkında rehberlik sağlanmaktadır.

Sütun Bu desen sütun hedeflerini nasıl destekler?
Güvenilirlik tasarımı kararları, iş yükünüzün arızaya karşı dayanıklı olmasına ve bir hata oluştuktan sonra tamamen çalışır duruma gelmesini sağlamaya yardımcı olur. Bu düzenin artımlı yaklaşımı, bir bileşen geçişi sırasında büyük sistemik değişikliklerin tümünü aynı anda yapmaya kıyasla risklerin azaltılmasına yardımcı olabilir.

- RE:08 Test
Maliyet İyileştirme, iş yükünüzün yatırım getirisini (ROI)sürdürmeye ve geliştirmeye odaklanır. Bu yaklaşımın amacı, artımlı olarak modernleştirilirken şu anda çalışan sistemde mevcut yatırımların kullanımını en üst düzeye çıkarmaktır. Düşük ROI değişimlerinden önce yüksek ROI değişimleri gerçekleştirmenizi sağlar.

- CO:07 Bileşen maliyetleri
- CO:08 Ortam maliyetleri
Operasyonel Mükemmellik, standartlaştırılmış süreçler ve ekip uyumu aracılığıyla iş yükü kalitesinin sunulmasına yardımcı olur. Bu desen sürekli bir iyileştirme yaklaşımı sağlar. Zaman içinde küçük değişiklikler yapacak kademeli değiştirmeler, uygulanması daha riskli olan büyük sistemik değişikliklere tercih edilir.

- OE:06 İş yükü geliştirme için tedarik zinciri
- OE:11 Güvenli dağıtım uygulamaları

Bu düzenin ortaya çıkarabileceği diğer sütunların hedeflerine karşı ödünleri göz önünde bulundurun.

Örnek

Eski sistemler genellikle birden çok etki alanına hizmet veren merkezi bir monolitik veritabanına bağlıdır. Zaman içinde, bu paylaşılan veritabanının etki alanları arası bağımlılıkları nedeniyle yönetilmesi ve geliştirilmesi zorlaşır. Bu zorluğun üstesinden gelmek için Strangler Fig deseni, monolitik veritabanındaki etki alanına özgü tabloları, saklı yordamları ve ilgili verileri aşamalı olarak çıkarıp yalıtılmış etki alanı veritabanlarına taşır. Her veritabanı yalnızca bir etki alanı içerir. Monolitik veritabanı tamamen ayrıştırılana kadar ayıklama işlemini tekrarlayın.

Veritabanına uygulanan Strangler Fig desenini gösteren diyagramlar.

Veritabanına uygulanan Strangler Fig desenini gösteren üç diyagram. İlk diyagramda yeni bir sistem tümleştirmesi gösterilmektedir. İstemci uygulaması istekleri yeni sisteme gönderir, ancak eski sisteme göndermez. Yeni sistem, eski sistem API'leri aracılığıyla veya doğrudan erişim yoluyla eski veritabanını okur ve yazar. Eski veritabanı monolitiktir ve birden çok veri etki alanı içerir. İkinci diyagramda veri kopyasıyla yeni veritabanı tümleştirmesi gösterilir. İstemci uygulaması istekleri yeni sisteme gönderir, ancak eski sisteme göndermez. Yeni sistem, eski veritabanından okur ve ona yazar; ayrıca yeni etki alanı veritabanına da yazar. Eski veritabanı, ayıklama, dönüştürme ve yükleme (ETL) işlemi kullanarak yeni etki alanı veritabanına ilk yüklemeyi gerçekleştirir. Eski veritabanı, değişiklik veri yakalama (CDC) işlemi kullanarak yeni etki alanı veritabanıyla eşitlenir. Yeni etki alanı veritabanı ayıklanan, etki alanına özgü tabloları, yordamları ve işlevleri (sınırlanmış bağlam başına) içerir. Üçüncü diyagram etki alanı veritabanı geçişini gösterir. İstemci uygulaması istekleri yeni sisteme gönderir, ancak eski sisteme göndermez. Yeni sistem yeni etki alanı veritabanını okur ve yazar ancak eski veritabanına yazmaz. Eski veritabanının etki alanı verileri ve nesneleri kaldırılır. Diyagramın yanında üç not, yönlendirme sorumluluğunun eski sistemden yeni sisteme kaydığını, veri doğrulama ve tutarlılık denetimlerinin tamamlandığını ve eski veritabanı tamamen kullanımdan kaldırılana kadar geri alma işleminin mümkün olduğunu açıklar.

  1. Etki alanı isteklerini yönetmeye başlayan yeni bir sistem hizmeti tanıtın. Yeni sistem hizmeti, etki alanı tabloları için monolitik veritabanından okumaya ve yazmaya devam eder. Eski sistem diğer tüm etki alanlarına hizmet etmeye devam eder.

  2. Yeni sistem için yalıtılmış bir etki alanı veritabanı tanıtın. Ayıklama, dönüştürme ve yükleme (ETL) işlemi kullanarak ilgili etki alanı tablolarını ve geçmiş verilerini yeni veritabanına geçirin. Değişiklik veri yakalama (CDC) işlemi, etki alanı verilerini monolitik veritabanından yeni etki alanı veritabanına eşitler. Bu aşamada, eski sistem monolitik veritabanından okumaya ve yazmaya devam eder ve yeni sistem yeni etki alanı veritabanına yazar. Tam geçiş öncesinde her iki veritabanı arasındaki tutarlılığı doğrulayın.

  3. Doğrulamadan sonra, yeni etki alanı veritabanı bu etki alanının kayıt sistemidir. Yeni sistem, etki alanı veritabanında tüm okuma ve yazma işlemlerini gerçekleştirir. Tek parçalı veritabanından ilgili etki alanı tablolarını, saklı yordamları ve bağımlılıkları kaldırın. Monolitik veritabanı tamamen ayrıştırılana kadar her etki alanı için bu işlemi yineleyin.

    2. aşama sırasında ve 3. aşamanın başında, etki alanı tabloları ve eşitleme işlemleri monolitik veritabanında hala mevcut olduğunda monolitik veritabanına geri dönebilirsiniz. Monolitik veritabanından etki alanı tablolarını, saklı yordamları ve eşitleme işlemlerini kaldırdıktan sonra monolitik veritabanına geri dönmek için bu nesneleri geri yüklemeniz ve veri değişikliklerini yeniden yürütmeniz gerekir. Ancak bu süreç çabayı ve riski önemli ölçüde artırır. Eski nesnelerin kaldırılmasını her etki alanı için kasıtlı son adım olarak değerlendirin. Eski nesneleri yalnızca yeni sistem doğrulandıktan sonra kaldırın.

Contributors

Microsoft bu makaleyi korur. Bu makaleyi aşağıdaki katkıda bulunanlar yazdı.

Asıl yazarlar:

Herkese açık olmayan LinkedIn profillerini görmek için LinkedIn'e oturum açın.

Sonraki adım