Soru Dağıtılmış önbellek olarak DNS


Her biri benzersiz bir anahtarla 300+ milyondan fazla veriyi önbelleğe almak için bir kullanım vakasına sahibiz.

Bunun alışılmışın dışında olduğunu biliyorum ancak şirketimde DNS'nin küçük (<512 bayt) veri parçaları için hızlı dağıtılmış bir önbellek olarak kullanılabileceği önerildi.

DNS girişi {Key}. {Hashed anahtarının modülü} .mycompany.local.

yani U5333145311.1.mycompany.local

10 ila 15 sunucu arasında saniyede 5000 - 7500 arasında istek yapıyor olacağız.

Her bir DNS sunucusunu bölge dosyaları aracılığıyla güncellerdik.

Ben bir programcı olduğum için, hepsi benim için yeni

  1. bu mümkün mü?
  2. tuzaklar nelerdir?
  3. DNS sunucularını nasıl boyutlandırabilirim.

Teşekkürler

Güncelleme: Veri 1 ila 30 tam sayı dizisidir (512K üzgün değil), bu yüzden çok küçüktür. Bu çözüm gibi ağ üzerinden gelen CTO'm, bilinen, olgun bir sistem olduğu ve hata toleransı içinde oluşturduğu ve bunu yönetmek için network ops kullanabileceği için. Ben çok yavaş ama açık fikirliyim.


6
2018-06-01 17:01


Menşei




Cevaplar:


DNS bazı durumlarda anlamlıdır:

  • Yaygın olarak dağıtılmış veriler

    Örneğin, DNS kara listeleri, önbelleğe alma altyapısı nedeniyle etkilidir zaten kullanıcılar (yani ISS’leri) yanında veya büyük kullanıcılar için kolayca (rbldnsd) gibi özel bir yazılım çalıştırın. Ancak noktadan faydalanıyor yaygın olarak kullanılan bir protokol.

  • Küçük yanıtlar (yaklaşık 500 bayt)

    İnsanların DNS yoluyla dağıttığı çoğu şey küçük ve çoğu zaman bile kaydın varlığı veya olmaması yeterlidir (ör. bir DNSBL bir IP sinyali verir Adres bozuk veya bu dosyanın sağlama toplamını işaret eden bir şey "kötü").

    Bunu ben yazdım: https://dgl.cx/wikipedia-dnsve neredeyse sınırı zorluyor Yanıt boyutlarının güvenli bir şekilde DNS'de yapabilirsiniz. Herkes uygulamıyor veya destek vermiyor EDNS0 ve bir başkasının dediği gibi, bir kez daha vatansız olmak yok olur.

Diğerleri bana söylediği gibi bana daha iyi bir şey yapabilecekmiş gibi geliyor memcached gibi. Kendinizi DNS’le sınırlamaya çalışmak, ne zaman olduğu için aptalca görünüyor İç kullanım. İstemci üzerinde denetiminiz varsa, DNS'in kendisinin yapabildiğinden yük devretme ve yük dengelemede daha iyi bir iş yapabilirsiniz.


3
2018-06-01 20:05





Şüphecinin CTO'su olduğum için, tartışmanın etrafında biraz renk atmak istiyorum.

Gary'nin belirttiği gibi, uygulamanın çok büyük bir manifesto yayımlayabilmesi gerekiyor. Bildiri birkaç (30-100) gruba ayrılacak. Her tuş yaklaşık 55 bayt ortalama olacak, ancak çok daha büyük olabilir.

Seçtiğimiz ürün aşağıdakileri desteklemelidir:

1) Tam artıklık ve yük dengeleme 2) Yüksek işlem hacmi (15k-20k okur / saniye) <500 ms yanıt süresi ile.

Güzeller için: 1) Hiyerarşik yapı 2) Kaydın sona ermesi 3) Kendi kendini tanımlayan topoloji

DNS, yalnızca bir bellek içi dağıtılmış önbellekten veri almak için TCP yerine UDP kullanmayı düşündükten sonra akla geldi. Doğal olarak, DNS eski ve en büyük DNS uygulamalarından biridir.

DNS, çok büyük miktarda kayıt içeren bölge dosyalarını desteklediği bilinmektedir. Örneğin, .com. Bir bölge dosyası afterall (küresel olarak birçok sunucuya dağıtılmış olsa da). Çok yüksek seviyelerde trafiği desteklediği de bilinmektedir.

Bazı ön testler aracılığıyla DNS'i çalıştırdık. Temsili miktarda veriyle 10M TXT kayıtları olan tek bir bölge dosyası yükledik. Aynı LAN'daki farklı bir sunucudan, çok iş parçacıklı bir şekilde 300.000 sorgu test ettik ve saniyede yaklaşık 5,000 istek aldık. Sunucu ve istemci, test sırasında zar zor bir şekilde kesişti. Test uygulamasının kendisinde veya istemcideki ağ yığında darboğazlar halinde çalışıyoruz.

DNS tarafından merak uyandırıyorum, çünkü doğal olarak istediğim her şeyi destekliyor ve uzun yıllardır var. Beğendiğim özellikler:

 Zone Delegation - we can define which server(s) handle particular partitions.  For example 1.mycompany.local is handled by servers 10.1.1.1 and 10.1.1.2.
 Redundancy - DNS was built with resiliency and redundancy in mind.  It can also be easily load balanced.
 Performance - Proven to support high request volumes

Tüm söylenenlerle, DNS önbellek olarak kullanmak için tuhaf bir araç gibi geliyor. Eğer seçim aşamasından geçiyorsa, onu sadece iç LAN üzerinde kullanırdık ve diğer iç veya dış DNS sistemlerimizle aynı DNS üzerinde olmayacaktı. Bir yan not, üçüncü taraf iş ortaklarıyla paylaştığımız verileri paylaşmak isteyebileceğimiz bir husustur. DNS, herkesin bölge aktarımlarını almak için kolayca sorgulayabileceği iyi bilinen bir varlıktır.

Devam eden geri bildirimleriniz için teşekkür ederiz.


2
2018-06-02 01:31





1 - muhtemelen tavsiye edilmemesine rağmen
2 - Tek önbellek davranışı, güvensiz, hiçbir yerde destek yok
3 - fikrim yok

Bunun için memcached içinde esas olarak hazır bir çözüm var: http://www.danga.com/memcached/


1
2018-06-01 17:07



memcached zaman içinde serbest bırakılırsa belki de hız ile birlikte bizim seçimlerimizden biridir. Her birinin kendi sorunları var. En büyük sorun, bir önbellek sunucusu azalırsa ne yapmalı?
Ben memcached tavsiyesi ikincisi ... Her zaman DNS sunucusuna olurdu gibi birkaç sunucuda memcached çalıştırabilirsiniz ... - JJ01
Ayrıca, karar verme faktörünün "eğer zaman içinde serbest bırakılırsa" bir uygulama dağıtmayı düşünemeyeceğimi düşünmüyorum. - Matt Simmons


Sonuçta bu kötü bir fikir değil.

Performansla ilgili ise, yanıtın bir udp paketine uyduğundan emin olun (aksi halde daha yavaş bir tcp'ye geri dönecektir). Kayıtları ne sıklıkla güncellemek istediğinize bağlı olarak TTL değerlerini akıllıca ayarlayın.

Kayıtları dinamik olarak güncellemek için bir (standart) yol vardır; bu, bir programdan yaparsanız iyi olabilir.


1
2018-06-01 17:49





dns girişiniz key.modulus ise, veri nedir? IP adresi bir şey mi eksik?


1
2018-06-01 18:09



Veri, ayrılmış değerler dizesidir


Memcached kullanın. Tam olarak bu amaç için tasarlandı. Verileri önbelleğe alıyorsanız, veriler temizlendiğinde endişelenmemelisiniz. Bir sunucu kaybolursa, istemciler diğer sunucuları kullanmayı sürdürecek ve sadece bir önbellek özniteliği olarak kabul edilecektir. Başarısız bir düğüm durumunda yeniden şekillendirilecek istemciler var. Bence last.fm biraz iş yaptı.

Güvenilir veriye ihtiyacınız varsa, bellek yerine bir berkerleyDB arka planı kullanan ve iki düğüm arasında çoğaltma yapacak olan memcachedb gibi bir şeye bakmak isteyebilirsiniz.


1
2018-06-01 22:46





  1. bu mümkün mü?
    Evet. Bu bilgiyi tutmak için TXT kayıtlarına bakmanızı öneririm

  2. tuzaklar nelerdir?
    Emin değil

  3. DNS sunucularını nasıl boyutlandırabilirim.
    Emin değilim, ama anladığım kadarıyla, DNS, istek ve cevapları ele almak için UDP'yi kullanan oldukça düşük bir gereksinim hizmetidir - bu, bir yanıt alıp almadığını ve başarısız olup olmadığını yeniden öğrenmek için istemciye kalmış gibi .

DNS'nizin çalışmadığı ilk belirtidir, sporadik kurumsal geniş arama hataları olur.

Ayrıca, hemen hemen her bilgisayar sistemi markaları Bu istekler, 30 dakikadan daha kısa bir süre için sonuçları 30 dakika veya ttl değerine kadar önbelleğe alacaktır. Bu yüzden bu değerlerin dikkatli bir şekilde kullanılması gerekli olacaktır.


Bir parmak sunucusunda kantin menüsünü barındırıyordum, böylece herkesin gün menüsünü görebiliyordu.

<emmek yumurta> Ayrıca programınızı belirli bir sunucu / grup düşünerek yazmanızı ve varsayılan DNS sunucusuna güvenmemenizi öneririm: O </ emmek yumurta>


0
2018-06-01 17:57





Erişim / güncelleme gereksinimleri hakkında daha fazla bilgi, daha bilinçli bir fikir vermek için yardımcı olacaktır.

DNS'in kendisi ile ilgili olarak, çoğunlukla nadiren / yavaşça değişen nispeten statik veriler için optimize edilmiştir. Ayrıca, çoğunlukla, tek bir sunucu / alan perspektifinden nispeten az miktarda veri üzerinde çalışmak için kurulur. Her bir kuruluşun sunucuları aracılığıyla büyük ölçüde ara önbellekleme (TTL) ve ayrıca dünya çapında "veritabanı" nın dağıtılmış ağaç doğasıyla ölçeklenebilirliğini elde eder. Yinelenen DNS sunucuları, kullanılabilirliği iyileştirmek için daha fazladır ... ve iş yükünü dağıtmak için çok fazla değildir (bazı uygulamalarda durum böyle olsa da).

Uygulamanız DNS hububatına karşı itme gibi görünüyor iki alan:

  • Kayıtların gerçekten o kadar küçük değil
  • Tutmak için çok sayıda kayıt var

DNS uygulamanızda çalışacak şekilde yapılmış olabilir, ancak açıkça bu durum için optimize edilmediğini söyleyebilirim.


0
2018-06-01 18:14



Tüm güncellemeler yeni bir bölge dosyası aracılığıyla yapılacaktır.


DNS bazı şeyler için harika olsa da, 512KByte değerlerini depolamak iyi bir şey değildir;

300 milyon datum daha küçük olsaydı (1000 byte), DNS (1280 bayt paketiyle) iyi bir fikir olabilir.

PowerDNS Yetkili Sunucusu, örneğin PIPE arka ucunu kullanarak bu tür verileri yayınlamanın harika bir yolu olabilir.

Ancak 512Kbyte verileri için, DNS faturanıza hiç uymuyor.


0
2018-06-01 19:24



512 bayt dedi - duffbeer703


Bu kapsamda test edilmiş DNS'yi hiç yüklemedim, ancak bu yaklaşım konusunda çok dikkatli olacağım. Kesinlikle alışılmamış ve yeterince işe yarayacak kadar çılgın, ama bu yaklaşım, bir vidayı çevirmek için bir çekiç kullanmak gibi bir şeydir - eğer işleri doğru yaparsanız yapabileceğinize emin olabilirsiniz, ama bu iş için yanlış bir araçtır.

En kötüsü, şirketin DNS'sini dizlerine getirecekti, ve birileri de e-postasını alamaması için CEO'ya açıklama yapma işine sahip olacaktı.


-1
2018-06-01 19:11





Yalnızca çözümlenen adresleri sabit diskinize kaydeden yayılan bir DNS önbelleği öneririm. Linux üzerinde pDNSd ve DNSmasq var. Sunucularınızdaki adresleri çözümlemekten kaçınmak için her ikisinin de kurulumu ve önerilmesi çok kolaydır.


-2
2018-06-01 20:32



Her DNS çözümleyici, aldığı sonuçları önbelleğe alır. Bu onların ana amacı. - Martijn Heemels