Performansın Avantajları

Giriş: DNS gecikmesinin nedenleri ve çözümleri

Web sayfaları daha karmaşık hale geldikçe ve çok sayıda alandan gelen kaynaklara referans verilebilir. Bu nedenle, DNS aramaları göz atma deneyiminde önemli bir dar boğaz haline gelebilir. Bir istemcinin ağ üzerinden bir DNS çözümleyiciyi sorgulaması gerektiğinde, ortaya çıkan gecikme, çözümleyicinin sorgulaması gereken ad sunucularının yakınlığına ve sayısına bağlı olarak önemli olabilir (2'den fazla sunucu bulunur ancak nadiren de olsa bazen yaşanabilir). Örnek olarak, aşağıdaki ekran görüntüsünde Page Speed web performansı ölçüm aracı tarafından bildirilen zamanlamalar gösterilmektedir. Her çubuk, sayfadan referans verilen bir kaynağı temsil eder; siyah segmentler, DNS aramalarını gösterir. Bu sayfada, sayfanın yüklendiği ilk 11 saniyede 13 arama yapılır. Aramalardan birkaçı paralel olarak yapılsa da ekran görüntüsünde, toplam 11 saniyelik sayfa yükleme süresinin birkaç saniyesine karşılık gelen 5 seri arama süresinin gerekli olduğu görülüyor.

DNS gecikmesinin iki bileşeni vardır:

  • İstemci (kullanıcı) ve DNS çözümleme sunucusu arasındaki gecikme. Çoğu durumda bu, ağa bağlı sistemlerdeki olağan gidiş dönüş süresi (RTT) kısıtlamalarından kaynaklanır: istemci ile sunucu makineleri arasındaki coğrafi mesafe; ağ tıkanıklığı, paket kaybı ve uzun aktarım gecikmeleri (ortalama bir saniye); aşırı yüklenen sunucular, hizmet reddi saldırıları vb.
  • Sunucular ile diğer alan adı sunucuları arasındaki gecikme. Bu gecikmenin nedeni esas olarak aşağıdaki faktörlerdir:
    • Önbellekte yok. Bir yanıt çözümleyicinin önbelleğinden sunulamasa da diğer ad sunucularının tekrar tekrar sorgulanmasını gerektiriyorsa eklenen ağ gecikmesi, özellikle yetkili sunucular coğrafi olarak uzaktan olduğunda önemli ölçüde olur.
    • Temel hazırlık yapılıyor. DNS çözümleyicileri aşırı yüklüyse DNS çözümleme isteklerini ve yanıtlarını sıraya eklemeleri gerekir. Ayrıca bu çözümleyiciler, paketleri bırakıp iletmeye başlayabilir.
    • Kötü amaçlı trafik. Bir DNS hizmeti gereğinden fazla temel hazırlığı yapılmış olsa bile, DoS trafiği sunuculara gereğinden fazla yük bindirebilir. Benzer şekilde, Kaminsky tarzı saldırılar, önbelleği atlaması garanti edilen ve çözüm için giden istekler gerektiren sorgulara sahip su baskını çözümleyicileri içerebilir.

Önbellek kaçırma faktörünün, DNS gecikmesinin en yaygın nedeni olduğuna inanıyoruz. Bu konuyu aşağıda daha ayrıntılı olarak ele alıyoruz.

Önbellekte yok

Çözümleyicinin bol miktarda yerel kaynağı olsa bile uzak alan adı sunucularıyla konuşmayla ilgili temel gecikmelerden kaçınmak zordur. Diğer bir deyişle, çözümleyicinin, önbellek isabetlerinin sunucu tarafında sıfır zaman alması için yeterince iyi bir şekilde sağlandığı varsayıldığında, önbellekte kayıplar gecikme açısından çok pahalı olmaya devam eder. Bir çözümleyicinin eksikleri halletmek için en az bir, ancak genellikle iki veya daha fazla harici alan adı sunucusuyla konuşması gerekir. Googlebot web tarayıcısını kullanırken, yanıt veren alan adı sunucuları için ortalama 130 ms çözüm süresinin uzandığını gözlemledik. Ancak UDP paket kaybı ve sunuculara erişilememesi nedeniyle isteklerin %4 ila %6'sı zaman aşımına uğrar. Paket kaybı, ölü alan adı sunucuları, DNS yapılandırma hataları gibi hataları hesaba kattığımızda, gerçek ortalama uçtan uca çözüm süresi 300-400 ms'dir. Bununla birlikte, büyük farklar ve uzun bir kuyruk vardır.

Önbellek kaçırma oranı DNS sunucuları arasında farklılık gösterse de önbellekte kaybolma durumlarından kaçınmak temel olarak aşağıdaki nedenlerle zordur:

  • İnternetin boyutu ve büyümesi. Basitçe ifade etmek gerekirse, hem yeni kullanıcıların eklenmesi hem de yeni sitelerin eklenmesiyle İnternet büyüdükçe içeriğin büyük bir kısmı ilgi görüyor. Birkaç site (ve dolayısıyla DNS adları) çok popüler olsa da çoğu site yalnızca birkaç kullanıcının ilgisini çeker ve nadiren erişilir. Bu nedenle isteklerin çoğu önbellekte eksikliklere yol açar.
  • Düşük geçerlilik süresi (TTL) değerleri. Daha düşük DNS TTL değerlerine doğru eğilim, çözümlerin daha sık arama yapılması gerektiği anlamına gelir.
  • Önbellek izolasyonu. DNS sunucuları genellikle sorguları farklı makinelere rastgele atayan yük dengeleyicilerin arkasına dağıtılır. Bu, paylaşılan bir havuzdaki önbelleğe alınmış çözümleri yeniden kullanmak yerine her bir sunucunun ayrı bir önbellek tutmasıyla sonuçlanır.

Çözümler

Google Açık DNS'te, DNS arama sürelerini kısaltmak için çeşitli yaklaşımlar uyguladık. Bu yaklaşımlardan bazıları oldukça standarttır, bazıları ise deneyseldir:

Sunum kümelerinin temel hazırlığını uygun şekilde yapma

DNS çözümleyicilerinin önbelleğe alma, yetkili alan adı sunucularından daha pahalı işlemler gerçekleştirmesi gerekir. Bunun nedeni, birçok yanıtın bellekten sunulamamasıdır. Bunun yerine, diğer alan adı sunucularıyla iletişim kurulmasını ve dolayısıyla çok sayıda ağ girişi/çıkışı gerektirir. Ayrıca açık çözümleyiciler, önbellek zehirlenmesi girişimlerine karşı son derece savunmasızdır. Bu durum önbellekleri kaçırma oranını (bu tür saldırılar özellikle önbellekten çözülemeyen sahte adlar için istekler gönderir) ve trafik yüküne katkıda bulunan DoS saldırılarına karşı savunmasızdır. Çözümleyiciler yeterli şekilde sağlanmazsa ve yüke yetişemezlerse bu durum performans üzerinde çok olumsuz bir etkiye neden olabilir. Paketler bırakılır ve bu paketlerin yeniden iletilmesi, alan adı sunucusu isteklerinin sıraya alınması vb. gerekir. Tüm bu faktörler gecikmelere neden olur.

Bu nedenle, DNS çözümleyicilerin yüksek hacimli giriş/çıkış için temel hazırlığının yapılması önemlidir. Bu, olası DDoS saldırılarının ele alınmasını da içerir. Bu saldırılar için etkili tek çözüm, çok sayıda makineye gereğinden fazla temel hazırlık yapmaktır. Bununla birlikte, makine eklerken önbellek isabet oranını azaltmamanız önemlidir. Bunun için aşağıda ele aldığımız etkili yük dengeleme politikasının uygulanması gerekir.

Paylaşılan önbelleğe alma için yük dengeleme

Makine ekleyerek çözümleyici altyapısını ölçeklendirmek, yük dengeleme düzgün yapılmazsa geri tepebilir ve önbellek isabet hızını düşürebilir. Tipik bir dağıtımda birden fazla makine, çevrimsel sıralı gibi basit bir algoritma kullanarak trafiği her makineye eşit şekilde dağıtan bir yük dengeleyicinin arkasında bulunur. Bunun sonucunda her makine, kendine ait bağımsız bir önbellek bulundurur ve böylece önbelleğe alınan içerik makineler arasında izole edilir. Gelen her sorgu rastgele bir makineye dağıtılırsa trafiğin yapısına bağlı olarak etkin önbellek kaçırma oranı orantılı olarak artırılabilir. Örneğin, tekrar tekrar sorgulanan uzun TTL'leri olan adlar için önbellek eksiklik oranı, kümedeki makine sayısı ile artırılabilir. (TTL'leri çok kısa olan, çok nadir sorgulanan veya önbelleğe alınamayan yanıtlarla (0 TTL ve hata) sonuçlanan adlar için önbellek kaçırma oranı, makine eklenmesinden gerçekten etkilenmez.)

Önbelleğe alınabilir adların isabet oranını artırmak amacıyla, önbelleğin parçalara ayrılmayacak şekilde yük dengelemesi sunucularının kullanılması önemlidir. Google Açık DNS'te, iki önbelleğe alma düzeyimiz vardır. Kullanıcıya çok yakın bir makine havuzunda, makine başına küçük bir önbellek en popüler adları içerir. Bu önbellekten yanıtlanamayan bir sorgu, önbelleği adlara göre bölümleyen başka bir makine havuzuna gönderilir. Bu ikinci düzey önbellek için aynı ada sahip tüm sorgular aynı makineye gönderilir. Burada ad önbelleğe alınır veya taşınmaz.

Geniş coğrafi kapsam için sunum kümelerini dağıtma

Çözümü kapalı olan kişiler için bu gerçekten bir sorun değildir. Açık çözümleyiciler için sunucularınız kullanıcılarınıza ne kadar yakın olursa istemci tarafında o kadar az gecikme görürler. Ayrıca, alan adı sunucuları genellikle DNS çözümleyicisinin konumu için optimize edilmiş sonuçlar döndürdüğünden, yeterli coğrafi kapsama sahip olmak uçtan uca gecikmeyi dolaylı olarak iyileştirebilir. Yani bir içerik sağlayıcı, dünyanın her yerinde yansıtılmış siteler barındırıyorsa bu sağlayıcının ad sunucuları, IP adresini DNS çözümleyiciye en yakın mesafede döndürür.

Google Açık DNS, dünya genelindeki veri merkezlerinde barındırılır ve kullanıcıları coğrafi olarak en yakın veri merkezine göndermek için her noktaya yayın yönlendirmesini kullanır.

Ayrıca Google Açık DNS, EDNS istemci alt ağını (ECS) destekler. Bu, çözümleyicilerin istemci konumunu ad sunucularına yönlendirmesini sağlayan bir DNS protokolü uzantısıdır. Bu sayede, çözümleyicinin IP adresi yerine gerçek istemci IP adresi için optimize edilmiş konuma duyarlı yanıtlar döndürebilir. Ayrıntılar için lütfen bu SSS sayfasını okuyun. Google Açık DNS, EDNS İstemci Alt Ağını destekleyen alan adı sunucularını otomatik olarak algılar.