Bir veri merkezinde OLAN gecikme süresi nedir? Bunu fark büyüklüğünde emirler olduğunu varsayarak soruyorum


18

İyi bir cevap bulamadığım bir şey bulmaya çalışıyorum.

Bir veri merkezinde oturan bir REDIS önbelleği (veya bazı harici bellek içi önbellek) ve aynı veri merkezinde oturan bir uygulama sunucusu söylediysem, veri okumak için ağ bağlantısının hızı (gecikme, iş hacmi) ne olur Bu iki makine arasında?

Örneğin, ağ "hızı" yine de verilerimi REDIS'te önbellekten arayan RAM'in hızından daha yüksek bir büyüklük sırası mı olacak?

Benim asıl sorum şu - REDIS üzerindeki tüm bu bellekte oturan aslında herhangi bir yarar sağlamak mı? REDIS bunun yerine tüm bunları bir SSD'ye önbelleğe alıp almadığıyla karşılaştırıldı mı? Bellek pahalıdır. Ağ gerçekten veri merkezinde İÇİNDE bir darboğaz değilse, belleğin değeri vardır. Aksi takdirde, değildir.

Genel sorum, veri merkezlerindeki büyük bilinmeyenlere ve varyansların genelleştirilememesine rağmen, bir bilgisayar sistemindeki bellek gecikmesi ve hatta DC'nin içindeki en iyi ağlar arasında belleğin düşük gecikmeler önemli bir performans artışı sağlamaz mı? Çok değişken olduğunu anladım, ama ne kadar yakın? Bu değişkenlerin önemi o kadar yakın mı? Örneğin, üzerinde hiperbolik bir duruş alın, bir teyp sürücüsü ağdan daha yavaştır, bu nedenle teyp bir önbellek için ideal değildir.


1
Ayrıca işlem başına gidiş dönüş sayısına da bağlıdır, bu genellikle bir dizi sorguda serileştirilmiş gerçek problemdir. Daha karmaşık bir sorgu arabirimi, sunucu tarafı yordamı veya denormalizwd önbellek etkiyi azaltabilir.
eckes

Yanıtlar:


20

"Herkesin bilmesi gereken gecikme çizelgeleri" nin çeşitli versiyonları vardır:

Mesele şu ki, gerçekte sadece gecikmeden daha fazlası var. Bu faktörlerin bir kombinasyonu.

Peki, bir veri merkezi içindeki ağ gecikmesi nedir? Gecikme, iyi "her zaman" 1ms altında olduğunu söyleyebilirim. RAM'den daha hızlı mı? Hayır. RAM'e yakın mı? Ben öyle düşünmüyorum.

Ancak soru hala geçerli, ilgili mi? Bilmen gereken referans noktası bu mu? Sorunuz bana mantıklı geliyor. Her şeyin bir maliyeti olduğundan, tüm verilerin RAM'de kalabilmesi için daha fazla RAM almanız gerekir veya zaman zaman diskten okumak iyidir.

"Varsayımınız", ağ gecikmesi SSD'nin hızından daha yüksekse (daha yavaş), ağda yavaşlayacağınız için RAM'deki tüm verileri elde edemeyeceğinizdir.

Ve öyle görünecekti. Ama aynı zamanda eşzamanlılığı da hesaba katmalısınız. Bir kerede veriler için 1.000 istek alırsanız, disk 1.000 eşzamanlı istek yapabilir mi? Tabii ki hayır, bu 1000 talebin sunulması ne kadar sürer? RAM ile karşılaştırıldığında?

Ağır yükler gibi tek bir faktöre kadar kaynatmak zordur. Ancak evet, devam eden tek bir işleminiz varsa, ağın gecikmesi, SSD ile RAM arasındaki farkı fark etmeyeceğiniz şekildedir.

Tıpkı 12Gbps disk piyasaya çıkana kadar, disk darboğaz olduğu için 10Gbps ağ bağlantısı tek bir akış tarafından aşırı yüklenmeyecekti.

Ancak, diskinizin başka birçok şey yaptığını unutmayın, işleminiz makinedeki tek işlem değildir, ağınız farklı şeyler taşıyabilir, vb.

Ayrıca, tüm disk etkinliği ağ trafiği anlamına gelmez. Bir uygulamadan veritabanı sunucusuna gelen veritabanı sorgusu yalnızca çok az ağ trafiğidir. Veritabanı sunucusundan gelen yanıt çok küçük (tek bir sayı) veya çok büyük (birden fazla alana sahip bin satır) olabilir. İşlemi gerçekleştirmek için, bir sunucunun (veritabanı sunucusu ya da değil) birden çok disk araması, okuması ve yazması gerekebilir, ancak ağ üzerinden yalnızca çok küçük bir parça geri gönderilebilir. Kesinlikle bire bir ağ-disk-RAM değil.


Şimdiye kadar sorunuzun bazı ayrıntılarından kaçındım - özellikle Redis kısmı.

Redis, veritabanı, önbellek ve mesaj aracısı olarak kullanılan açık kaynaklı (BSD lisanslı), bellek içi veri yapısı deposudur. - https://redis.io/

Tamam, yani her şey hafızada. Maalesef, bu hızlı SSD sürücüsü size yardımcı olmayacak. Redis verileri diske sürdürebilir, böylece yeniden başlatmadan sonra RAM'e yüklenebilir. Bu yalnızca verileri "kaybetmemek" veya yeniden başlatma sonrasında soğuk bir önbelleği yeniden doldurmak zorunda değildir. Bu durumda, ne olursa olsun RAM'i kullanmanız gerekecek. Veri kümenizi içerecek kadar RAM'e sahip olmanız gerekir. Yeterli RAM yok ve sanırım işletim sisteminiz kullanacak swap- muhtemelen iyi bir fikir değil.


Teşekkürler. Bu gerçekten yararlı. Gerçekten burada, bunun üzerinde bir etkisi olan birçok bağlamsal varyans vardır. Bir an için ağır yükleri görmezden gelirsek, cevabınızdan, aslında ağ gecikmesinin bir darboğaz olduğu görülüyor, bu nedenle SSD'ye karşı RAM'in ek gecikmesi önemli olacak kadar önemli değil. Ancak şimdi, ağır yükleri hesaba katarsak, SSD'nin RAM'e göre gecikme farkları birleşmeye başlar ve şimdi RAM parlayacak. O zamanlar böyle mi geliyor?
Neeraj Murarka

1
Tek bir ağır yük faktörüne kadar kaynatmak zordur. Ancak evet, devam eden tek bir işleminiz varsa, ağın gecikmesi, SSD ile RAM arasındaki farkı fark etmeyeceğiniz şekildedir. Tıpkı 12Gbps disk piyasaya çıkana kadar, disk darboğaz olduğu için 10Gbps ağ bağlantısı tek bir akış tarafından aşırı yüklenmeyecekti. Ancak diskinizin başka birçok şey yaptığını unutmayın, işleminiz makinedeki tek işlem değildir, vb.
ETL

1
Ayrıca, sadece gecikmenin yanı sıra, özellikle gerçek hizmetlerin çoğunun sunucu programının birden çok örneğini farklı makinelerde çalıştırması gerektiğinin göz önünde bulundurulması gereken birçok faktör olduğunu unutmayın, bu nedenle "yerel olarak RAM'deki her şey" normalde pratik bir seçenek değildir.
chrylis -on strike-

Ancak 10g'lık bir ağ bağlantısı düşük uçtur. Sunucularım omurgama 200gigabit (evet, 2x100g bağlantı) ile bağlı.
TomTom

3

Bilgisayar sistemlerinde birçok önbellek katmanı vardır. Uygulama katmanına bir tane eklemek faydalı olabilir, API ve veritabanı sorgularını önbelleğe alabilir. Ve muhtemelen kullanıcı oturumları gibi geçici veriler.

Redis gibi veri depoları, tıpkı bir veritabanı kullanacağınız gibi bir ağ (hızlı) veya UNIX soketi (daha da hızlı) üzerinden böyle bir hizmet sağlar.

Uygulamanızın gerçekte nasıl performans gösterdiğini ölçmeniz gerekiyor, ancak bir örnek oluşturalım. Ortak bir kullanıcı isteğinin her biri 50 ms süren 5 API sorgusu yaptığını varsayalım. 250 ms kullanıcı tarafından algılanabilir gecikme süresidir. Sonuçları önbelleğe almanın aksine. Önbellek şehir genelinde farklı bir kullanılabilirlik bölgesinde olsa bile (optimal değil), isabetler en fazla 10 ms'dir. Bu 5x hızlanma olurdu.

Gerçekte, veritabanı ve depolama sistemlerinin kendi önbellekleri de vardır. Bununla birlikte, genellikle önceden getirilmiş bir sonuç elde etmek, veritabanı motoru ve depolama sistemi katmanlarından tekrar geçmekten daha hızlıdır. Ayrıca, önbellek katmanı, arkasındaki veritabanından önemli bir yük alabilir.

Üretimde böyle bir önbellek örneği için , mimaride Stack Overflow altyapı blogundan başka bir yere bakmayın . Milyarlarca Redis isabeti üreten yüz binlerce HTTP isteği oldukça önemlidir.

Bellek pahalıdır.

100 ns erişim süresindeki DRAM, katı hal kalıcı depolamasından yaklaşık 100 kat daha hızlıdır. Bu performans için nispeten ucuzdur. Birçok uygulama için, biraz daha fazla RAM değerli hız ve tepki süresi satın alır.


Bu 5 API sorgusunun her birinin her biri 50 ms sürdüğünü nasıl hesapladığınızı açıklığa kavuşturabilir misiniz? Bu uygulama kisvesi altında veritabanına isabet ve sorguyu yapmak ve sonuç kümesini hesaplamak, vs sadece sorgu dizesinin kendisini anahtar olarak önbelleğe almış ve bu sonucun önbelleğe alınmış bir kopyası var şehir genelinde bir önbellek vurmak mı Ayarlamak?
Neeraj Murarka

1
Bu sayıları uydurdum ama evet. Bir sorgu yapmak ve bir sonucu tekrar hesaplamak, önceden hesaplanmış sonucu elde etmekten daha yavaş olacaktır. Redis gibi uygulamalar, basitlik ve hız için bellekte olma eğilimindedir. Bir IP ağından veya UNIX soket aktarımından geçmek de oldukça hızlı olabilir. Bütün bunlar, bu önbellekleme her tasarım için gerekli değildir.
John Mahowald

Anladım. Sanırım az çok anlıyorum. Görünüşe göre bir çok durumda, ama her zaman değil, belki de aynı ABD eyaletinde (veya Kanada eyaletinde, vb.) (Belki bölge iyi bir semantik) yakın bir önbellek veri merkezinden dışarı çıkmak bile önbellek isabetiyle sonuçlanırsa, değeri kendi yerel veritabanından algoritmik olarak yeniden hesaplamaya çalışan süreç üzerinde büyük bir avantaj olabilir. Ama sonra, uzakta oturan önbellek, bellekte olarak çok fazla değer sunmaz. SSD tabanlı da olabilir.
Neeraj Murarka

1
Uzak veri merkezi en kötü durumdur, ideal olarak önbellek katmanı istemcilerinden 1 ms'den azdır. Belki aynı kullanılabilirlik bölgesi, hatta aynı ana bilgisayarda. İsterseniz kalıcı bir depolama birimine önbellekleme yapabilirsiniz. Veya, birincil veritabanı için bu katı hal depolamasını kullanabilir, tüm sorguları hızlandırabilir ve muhtemelen bir önbellek katmanına ihtiyacınız olmayabilir. Birden fazla olası tasarım var.
John Mahowald
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.