Bugün Amazon Route 53, dünyanın en büyük işletmelerinin ve en popüler web sitelerinin çoğunu barındırıyor ancak başlangıçta çok daha sıradandı.

DNS barındırmayı alma

AWS hizmet vermeye başladıktan kısa bir süre sonra, AWS müşterileri, Amazon Simple Storage Service (S3), Amazon CloudFront ve Elastic Load Balancing hizmetlerimizi etki alanlarının “kökünde” yani sadece “www.amazon.com” gibi isimler için değil “amazon.com” gibi isimler için de kullanmak istediklerini açıkça belirttiler.
 
Bu çok basit görünebilir. Ancak, 1980'lerde yapılan DNS protokolündeki tasarım kararı nedeniyle bu, göründüğünden daha zordur. DNS, bir etki alanı sahibinin etki alanının bir kısmını barındırması için başka bir sağlayıcıya boşaltmasını sağlayan CNAME adlı bir özelliğe sahiptir. Ancak bir etki alanının kök veya üst düzeyinde çalışmaz. Müşterilerimizin ihtiyaçlarını karşılamak için aslında müşterilerimizin etki alanlarını barındırmak zorundayız. Bir müşterinin etki alanını barındırdığımız zaman, Amazon S3, Amazon CloudFront veya Elastic Load Balancing için mevcut IP adresleri kümesi ne olursa olsun geri döndürebiliriz. Bu hizmetler sürekli olarak genişliyor ve IP adresleri ekliyor. Bu nedenle bu, müşterilerin etki alanı yapılandırmalarında da kolaylıkla doğrudan kodlayabilecekleri bir şey değil.
 
DNS barındırmak kolay bir iş değildir. DNS'de sorun varsa tüm bir işletme çevrimdışı olabilir. Ancak, ihtiyacı belirledikten sonra sorunu Amazon'da olduğu gibi çözmek için acil olarak yola koyulduk. Küçük bir mühendis ekibi oluşturduk ve çalışmaya başladık.

DDoS saldırıları ile başa çıkma

Herhangi bir DNS sağlayıcısına en büyük zorluklarının ne olduğunu sorarsanız onlar size bunun dağıtılmış hizmet reddi (DDoS) saldırıları ile başa çıkmak olduğunu söyleyeceklerdir. DNS, UDP protokolünün üzerine kuruludur, bu da DNS isteklerinin internetin kanunsuz ortamlarının çoğunluğunda taklit edilebilir olduğu anlamına gelir. DNS aynı zamanda kritik bir altyapı olduğu için bu kombinasyon, işleri bozmaya çalışan ahlaksız aktörler, çeşitli nedenlerle kesintileri tetiklemeyi amaçlayan “vurucular” ve somut kişisel sonuçlar doğurabilecek ciddi bir suçu işlediklerinin farkında olmayan arada bir yanlış yönlendirilen huzursuzluk çıkaranlar için kendisini ideal bir hedef haline getiriyor. Sebep ne olursa olsun, her gün etki alanlarına karşı işlenen binlerce DDoS saldırısı vardır.

Bu saldırıları azaltmak için bir yaklaşım, büyük miktarda sunucu kapasitesi kullanmaktır. Her ne kadar iyi bir kapasite temeline sahip olması önemli olsa da bu yaklaşım gerçekten ölçeklendirmez. Sağlayıcının eklediği her sunucu binlerce dolara mal olur. Ancak saldırganlar güvenliği ihlal edilmiş botnet kullanıyorlarsa para kazanmak için daha fazla sahte müşteri ekleyebilirler. Sağlayıcılar için büyük miktarda sunucu kapasitesi eklemek, kaybettiren bir stratejidir.

Amazon Route 53'ü kurduğumuzda, DNS savunması için son teknoloji, trafiği çok yüksek oranda "temizlemek" için çeşitli hileler kullanabilen özel ağ araçlarıydı. Mevcut ev içi DNS hizmetlerimiz için bu gereçlerin birçoğuna Amazon'da sahibiz ve başka ne temin edilebileceği konusunda donanım satıcılarıyla görüştük. Her bir Route 53 etki alanını tamamen kapsayacak kadar gereç satın almanın on milyonlarca dolara mal olacağını ve teslim edilmelerinin, kurulmalarının ve operasyonlarının gerçekleştirilmesinin programımıza aylar ekleyeceğini gördük. Bu, planlarımızın aciliyetine veya tutumlu olma çabalarımıza uymuyordu. Bu yüzden, bunları hiçbir zaman ciddi olarak göz önünde bulundurmadık. Gerçekten bir saldırı yaşayan etki alanlarını savunan kaynakları harcamak için bir yol bulmamız gerekiyordu. “İhtiyaçlar icatların anasıdır” şeklindeki eski prensibe geri döndük. İhtiyacımız olan şey, az miktarda kaynak kullanarak hızlı bir şekilde dünya standartlarında, yüzde 100 çalışma süresiyle DNS hizmeti oluşturmaktı. Buluşumuz karışık parçalama idi.

Karışık parçalama nedir?

Karışık parçalama basit ancak güçlüdür. Hatta, ilk fark ettiğimizden daha güçlüdür. Onu defalarca kullandık ve AWS'nin her müşteriye tek kiracılı bir deneyim sunan düşük maliyetli çok kiracılı hizmetleri sunmasını sağlayan temel bir model haline geldi.

Karışık parçalamanın nasıl çalıştığını görmek için önce sıradan parçalama ile bir sistemin nasıl daha ölçeklenebilir ve esnek hale getirilebileceğini düşünün. Sekiz çalışandan oluşan yatay bir biçimde ölçeklenebilir bir sistem veya hizmet düşünün. Aşağıdaki resim çalışanları ve onların isteklerini göstermektedir. Çalışanlar; sisteminizi oluşturan “şey” her şey -sunucular, kuyruklar veya veri tabanları olabilir.

Herhangi bir parçalama olmadan çalışan filosu bütün işleri yönetir. Her çalışan herhangi bir isteği yerine getirebilmelidir. Bu, verimlilik ve yedeklilik için mükemmeldir. Bir çalışan başarısız olursa diğer yedisi işin kontrolünü eline alabilir. Yani, sistem nispeten az miktarda boş kapasite gerektirir. Ancak, hataların belirli bir istek veya bir DDoS saldırısı gibi bir istek seliyle tetiklenebilmesi durumunda büyük bir sorun ortaya çıkar. Aşağıdaki iki resim böyle bir saldırının ilerleyişini göstermektedir.

Sorun, etkilenen ilk çalışanı çıkaracak, ancak daha sonra diğer çalışanlar devraldıkça onların arasında kademeli olarak ilerlemeye devam edecektir. Sorun, çalışanların tümünü ve tüm hizmeti çok hızlı bir şekilde çıkarabilir.

Bu tür bir hatanın etkisinin kapsamı “her şey ve herkes” olur. Tüm hizmet kapanır. Her müşteri etkilenir. Erişilebilirlik mühendisliğinde dediğimiz gibi: Bu uygun değildir.

Düzenli parçalama ile daha iyisini yapabiliriz. Filoyu 4 çalışan grubuna bölersek etki kapsamı için verimlilik değişimi yapabiliriz. Aşağıdaki iki resim, parçalamanın bir DDoS saldırısının etkisini nasıl sınırlayabileceğini göstermektedir.

Bu örnekte, her bir parçanın iki çalışanı vardır. Müşteri etki alanları gibi kaynakları parçalara ayırırız. Hâlâ yedekliliğimiz var, ancak parça başına sadece iki çalışan bulunduğundan herhangi bir hatayı giderebilmek için sistemde daha boş bir kapasite bulundurmamız gerekiyor. Buna karşılık, etkinin kapsamı önemli ölçüde azalır.

Bu parçalama dünyasında etkinin kapsamı parçaların sayısıyla birlikte azalır. İşte burada dört parça ile, eğer bir müşteri bir sorunla karşılaşırsa o zaman onları barındıran parça ve bu parçadaki diğer tüm müşteriler etkilenebilir. Ancak, bu parça genel hizmetin sadece dörtte birini temsil etmektedir. Yüzde 25 etki, yüzde 100 etkiden çok daha iyidir. Karışık parçalama ile tekrar katlanarak daha iyisini yapabiliriz.

Karışık parçalama ile her biri iki çalışandan oluşan sanal parçalar yaratıyoruz ve müşterilerimizi veya kaynaklarımızı veya yalıtmak istediklerimizi o sanal parçalardan birine atıyoruz.

Aşağıdaki resim her biri iki çalışana atanan sekiz çalışan ve sekiz müşteriden oluşan bir örnek paylaşma düzenini göstermektedir. Normalde çalışanlardan çok daha fazla müşterimiz olur, ancak işleri daha küçük tutarsak takip etmesi daha kolay olacaktır. İki müşteriye odaklanacağız: gökkuşağı müşterisi ve gül müşterisi.

Örneğimizde gökkuşağı müşterisini birinci ve dördüncü çalışana atıyoruz. Bu iki çalışanın kombinasyonu o müşterinin karışık parçasını oluşturuyor. Diğer müşteriler kendi iki çalışan karışımı ile farklı sanal parçalara gidecekler. Örneğin gül müşterisi aynı zamanda birinci çalışana atanır, ancak diğer çalışanı sekizinci çalışandır.

Çalışan bir ve çalışan dörde atanan gökkuşağı müşterisinin bir sorunu olursa (kötü niyetli bir istek ya da bir istek seli gibi), bu sorun o sanal parçayı etkileyecek, ancak diğer karışık parçalama alanlarını tamamen etkilemeyecektir. Aslında, başka bir karışık parçanın çalışanlarından en fazla biri etkilenecektir. İstek sahipleri hataya toleranslıysa ve hatadan sakınarak işini yapabiliyorsa (örneğin, yeniden denemelerle), aşağıdaki resimdeki gibi müşteriler veya kalan parçalardaki kaynaklar için kesintisiz hizmet devam edebilir.

Başka bir deyişle, gökkuşağına hizmet veren çalışanların tümü bir sorun ya da saldırı yaşarken, diğer çalışanlar hiç etkilenmez. Müşteriler için bu, gül müşterisi ile ayçiçeği müşterisinin her birinin gökkuşağı ile bir çalışanı paylaşmasına rağmen etkilenmeyeceği anlamına gelir. Gül müşterisi, çalışan sekizden hizmet alabilir ve ayçiçeği, aşağıdaki resimde görüldüğü gibi, çalışan altıdan hizmet alabilir.

Bir sorun olduğunda tüm hizmetin dörtte birini kaybedebiliriz, ancak müşterilerin veya kaynakların atanma şekli, karışık parçalama ile ilgili etki alanının çok daha iyi olduğu anlamına gelir. Sekiz çalışanla, iki çalışanın 28 farklı kombinasyonu var; bu da olası 28 karışık parça olduğu anlamına gelmektedir. Yüzlerce ya da daha fazla müşterimiz varsa ve her müşteriyi karışık bir parçaya tahsis edersek bir sorundan kaynaklanan etkinin kapsamı sadece 1/28’incidir. Bu, normal parçalamadan 7 kat daha iyidir.

Rakamların katlanarak arttığını ve çalışanlarınızın ve müşterileriniz arttığını görmek çok heyecan vericidir. Ölçeklendirme zorluklarının çoğu bu boyutlarda zorlaşır, ancak karışık parçalama bu durumda daha etkili hale gelir. Aslında, yeterli sayıda çalışanla birlikte müşterilerin olduğundan daha fazla karışık parça olabilir ve her müşteri yalıtılabilir.

Amazon Route 53 ve karışık parçalama

Bunların hepsi Amazon Route 53'e nasıl yardımcı olur? Route 53 ile kapasitemizi toplamda 2048 sanal isim sunucusuna yerleştirmeye karar verdik. Bu sunucular sanaldır, çünkü Route 53'ü barındıran fiziksel sunuculara karşılık gelmezler. Kapasiteyi yönetmeye yardımcı olmak için onları dolaştırabiliriz. Daha sonra her müşteri etki alanını dört sanal isim sunucusundan oluşan bir karışık parçaya atarız. Bu rakamlarla, tam tamına 730 milyar olası karışık parça vardır. O kadar çok olası karışık parçamız var ki her etki alanı için tek bir karışık parça atayabiliriz. Aslına bakılırsa daha ileri gidebilir ve hiçbir müşteri etki alanının ikiden fazla sanal ad sunucusunu başka herhangi bir müşteri etki alanıyla paylaşmamasını sağlayabiliriz.

Sonuçlar muhteşem. Bir müşteri etki alanı bir DDoS saldırısı için hedeflenirse o etki alanına atanan dört sanal ad sunucusu trafikte artış yaşar ancak başka bir müşterinin etki alanı bunu fark etmez. Kötü bir gün geçiren hedeflenen müşteriyi kabullenmeyiz. Karışık parçalama, hedeflenen müşteriyi özel saldırı kapasitesine göre tanımlayabileceğimiz ve yalıtabileceğimiz anlamına gelir. Bununla birlikte, kendi tescilli AWS Shield trafik temizleyiciler katmanımızı geliştirdik. Ayrıca, karışık parçalama, bu olaylar yaşanırken bile genel olarak Route 53 müşteri deneyiminin sorunsuz olmasını sağlamada büyük bir fark yaratır.

Sonuç

Diğer sistemlerimizin çoğuna karışık parçalama özelliğini yerleştirmeye devam ettik. Ek olarak, birden fazla katmanda ögeleri parçaladığımız ve böylece bir müşterinin müşterisini yalıttığımız yinelemeli karışık parçalama gibi iyileştirmelerle karşılaştık. Karışık parçalama son derece uyarlanabilir özelliğe sahiptir. Bu, mevcut kaynakları düzenlemek için akıllıca bir yoldur. O aynı zamanda genellikle ek bir ücret ödenmesini gerektirmez. Bu nedenle tutumluluk ve ekonominin sürdürebileceği büyük bir gelişmedir.

Karışık parçalamayı kendiniz kullanmayla ilgileniyorsanız açık kaynaklı Route 53 Infima kütüphanemize bakın. Bu kitaplık, kaynakları atamak ya da düzenlemek için kullanılabilecek çeşitli karışık parçalama uygulamaları içermektedir.

Uygulamalı laboratuvar

Burada öğrendiğiniz prensiplerin bazılarını uygulamalı laboratuvar ile deneyin.


Yazar hakkında

Colm MacCárthaigh, Amazon Web Services'ta bir Kıdemli Baş Mühendistir. Colm; EC2, kriptografi ve ağ iletişimi üzerine çalışmadan önce Amazon Cloudfront ve Amazon Route 53’ün oluşturulmasına yardımcı olmuştur. Colm aynı zamanda bir Açık Kaynak katılımcısıdır ve Apache httpd web sunucusunun ve SSL / TLS protokollerinin AWS uygulaması Amazon s2n'nin yazarlarından biridir. Teknik şeyler üzerinde çalışmadığı zamanlarda Colm bir müzisyen ve şarkıcıdır ve sıklıkla uluslararası ölçekte İrlanda müziği çalar, turlara katılır ve kaydeder.

Zaman aşımları, yeniden denemeler ve sapmalı geri çekilme