Blue/Green Deployments, A/B Testing ve Canary Releases arasındaki fark nedir?

Amazon gibi şirketler de 10 yıldır Blue/Green Deployment tekniğini uygulanmaktır. Facebook A/B Testing tekniğini kullanmaktadır. Netflix ise Canary Releases tekniğini kullanmaktadır.

Birazdan bu üçünün farklarını netleştireceğiz.

Blue/Green Deployments

Daha detaylı bilgi için Martin Fowler’in makalesini okumanızı tavsiye ederim.

Temel olarak bir versiyon ilgili herhangi bir downtime’ı azaltmak amacıyla uygulamanızı öngörülebilir bir şekilde deploy etme tekniğidir. Versiyonları kullanıma hazır hale getirmenin hızlı bir yoludur ve aynı zamanda bir problemle karşılaşıldığında hızlıca diğer versiyona geri döndürülür.

Basitçe, mevcut altyapınızla ( green deployments ) özdeş bir ortama sahipsiniz ( blue deployments ) ve production’da uygulamalarınızın ilk versiyonları bulunmakta.

Green Deployments ( App1, App2, App3 v1 )

Örneğin, şimdi uygulamalarda değişiklik yapmaya ve versiyonunu yükseltmeye hazır olduğunuzda bunu blue deployments ortamında yaparsınız.

Yükseltmeyi yaptığınızda bu ortamda Smoke testleri ve diğer testlerinizi koşarsınız ( işletim sistemi, önbellek, CPU vb.).

Her şey iyi göründüğünde ise load balancer/reverse proxy’nin yönünü blue deployments’daki versiyona yönlendirirsiniz.

Blue Deployments ( App1, App2, App3 v2)

Ardından yeni sürümle ilgili arıza ve exceptionları izlersiniz. Her şey yolunda görünüyor ise green deployments ortamını kapatıp yeni sürümler oluşturmak için kullanabilirsiniz. Aksi halde load balancer’i tekrar geriye doğru yönlendirerek hızlıca rollback edersiniz.

Bu teknik teoride iyi geliyor ama dikkat edilmesi gereken şeyler var.

  • Green Deployments ortamında uzun süren transactionlar olabilir. Blue Deployments’a geçtiğinizde bu transactionların yanı sıra yenilerini de ele almanız gerekir. Eğer Database kısmı bu gibi durumları handle edemezse ciddi sıkıntılar oluşabilir.
  • Hem mikroservis mimarisine hem de geleneksel mimarideki uygulamalarınızın çalıştığı bir altyapıya sahip olabilirsiniz. Bu ikisi arasında eşgüdüm sağlamak downtimelara sebep olabilir.
  • Database geçişleri gerçekten zorlaşabilir ve uygulama sürümleri ile birlikte geri taşınması / geri alınması gerekir. Bunu yapmak için iyi araç ve teknikler var, ancak geleneksel RDBMS, NoSQL ve dosya sistemi destekli DB’lerin olduğu bir ortamda bunların gerçekten iyi düşünülmesi gerekir. Blue/Green Deployments yaptığınızı kör bir şekilde söylemek hiçbir şeye yardımcı olmadığı gibi gerçekten can yakabilir.
  • Bunu yapabilecek altyapıya sahip olmanız gerekir.

Söylediğim gibi, bu zorlukların üstesinden gelmek ve bu deployment tekniğini continuous deployment pipelinenina bağlamak da dahil olmak üzere çok iyi bir şekilde çalışmasını sağlayan teknikler var fakat önemsizce atlamayın.

A/B Testing

A/B Testing tekniği bir Blue/Green Deployments tekniği değildir. Bu doğru bilinen yanlışlardandır.

A/B Testing uygulamalarınızdaki özellikleri kullanılabilirlik, popülerlik, fark edilebilirlik vb. çeşitli nedenlerle ve bu faktörlerin sonuçları nasıl etkilediğini test etmenin bir yoludur. Aslında bir deneydir. Genellikle uygulamanın UI bölümleriyle ilişkilendirilir. Ancak elbette backend kısmının da bunu yapabilmesi için erişilebilir olması gerekmektedir.

Bunu uygulama seviyesindeki anahtarlarla, statik anahtarlarla ve Canary Releases ile birlikte kullanabilirsiniz. Yapılan değerlendirme sonucunda da verilere bakılarak hangi varyasyonun daha iyi çalıştığına karar verilir.

A/B Testing

Yukarıdaki senaryoda kullanıcıların %50'si A varyasyonuna diğer %50 ‘si ise B varyasyonuna yönlendirilmiştir.Test sonucunda kullanıcıların A varyasyonunda daha fazla geri dönüş sağlanıldığı tespit edilmiştir. Böylelikle B varyasonuna olan yönlendirme tamamen kapatılır ve tüm kullanıcılar A varyasyonuna yönlendirilir.

Blue/Green Deployments ve A/B Testing farkına gelecek olursak, Blue/Green Deployments uygulamanın yeni bir versiyonunu güncelleyip tüm fonksiyonlarını değiştirebilir ancak A/B Testing uygulama içerisindeki sadece bir işlevselliği test etmek için kullanılır. ( bkz: Facebook A/B Testing for Ads) İki teknikde bir arada kullanılabilir.

Canary Releases

Son olarak, Canary Releases uygulamanızın nasıl bir performans ( entegrasyonlar, CPU, bellek, disk kullanımı vb. ) göstereceğini görmenin bir yoludur. Yani versiyonu tamamen değiştirip test etmektense mevcut versiyonlara ek olarak küçük bir yeni versiyon ile testler gerçekleştirilir.

Canary Releaes

Yukarıdaki resimde kullanıcılardan gelen isteklerin %80'nin mevcut versiyona yönlendirildiğini kalan %20'nin ise yeni versiyona yönlendirildiğini varsayalım. Burada ne kadar hızlı bir feedback alırsanız uygulama ya o kadar hızlı fail eder ya da başarılı bir şekilde yeni versiyonda çalışmaya devam eder.

Buradaki riskli durumlar Blue/Green Deployments’daki kurallar ile aynı şekilde geçerlidir. Database işlemleri gerçekten can yakabilir.

Peki Canary Releases’in Blue/Green Deployments yerine tercih edildiği senaryolar var mıdır?

Blue/Green Deployments basit ve hızlıdır.

Eğer yeni versiyonu test ortamında test ettiyseniz ve versiyonun production ortamında doğru çalışacağından eminseniz bu durumda Blue/Green Deployments tekniğini tercih edebilirsiniz. Yeni versiyonun sorunsuz çalışabilme güvenini arttırabilmek için feature toggles tekniğini kullanabilirsiniz.

Yeni versiyonun production ortamında doğru çalışacağından emin değilseniz Canary Releases tekniğini kullanmak daha doğru olacaktır.

Sonuç olarak kendinize güvenmenize izin veren uygulamalara kararlıysanız Blue/Green Deployments tekniğini kullanabilirsiniz. Aksi takdirde kanaryayı salın gitsin.

Kaynakça

Difference Between Green/Blue Deployments, A/B Testing and Canary Releases — Amir Ghahrai