2011-09-22 16 views
6

Burada çok fazla yazı okuyorum ve internette geziniyorum, ama belki doğru soruyu sormuyorum. Kümelenmeye hazır oluncaya kadar Redis'in şu anda Master/Slave olduğunu biliyorum. Ancak, birisinin ihtiyaçlarımı karşılamak için (veya doğru bir araç değilse), benimle nasıl mantıksal olarak yapılandırmak istediğimi anlatabileceğini merak ediyordum.Redis mimic MASTER/MASTER? veya başka bir şey?

Scenerio:

ABD'de zıt uçlarında 2 site var. Müşterilerin her sitede yüksek hacimde yazabilmelerini istiyoruz. Daha sonra her müşterinin kendi sitesinde de okuma yapabilmesini istiyoruz. Bununla birlikte, verinin < 50 ms'deki bir kardeş sitesindeki bir yazmadan erişilebilir olmasını istiyoruz. Bolca bant genişliğimiz olduğu göz önüne alındığında. İhtiyaçlarımızı karşılamak için redis'i yapılandırmanın bir yolu var mı? Bizim yazdığımız azami büyüklük 5k genellikle daha az olurdu. Ana nokta, varsayılan olarak desteklenmese bile, birbiriyle senkronize olan2 master'ım olabilir.

cevap

11

Tom'un cevap yakalamak sen, sadece iki sunucu yazıyoruz kümenin her türlü çalıştıran olmamasıdır. Aralarındaki tutarlılığı sağlamak istiyorsanız bu bir sorundur. İstemciniz uzak sunucuya yazma işlemi başarısız olduğunda ne olacağını düşünün. Yazmayı yerel olarak geri alıyor musunuz? Uzak sunucuya yazamadığınız zaman uygulamaya ne olur? Yerelden okuyamadığınızda ne olur?

İkinci yakalama, Joshua'nın geliştirdiği temel fizik sorunudur. Bir gidiş-dönüş için, teorik olarak en az 38ms teorik bir maksimum işlem süresi bırakarak 12ms'lik iki ucunda (üç sistemden) bahsediyorsunuz. Beklentinin biraz fazla olduğunu ve bant genişliğinin bu durumda gecikme ile hiçbir ilgisi olmadığını söyleyebilirim. 10GB'lık bir borcun olabilir ve bu zamanlamalar hala var. Bununla birlikte, 12 ms'de kıtada 5k aktarılması da çok şey soruyor. 12 saatte 5 ms'lik veri aktarımı için bağlantı kapasitesine sahip olduğunuza emin misiniz? Kıtada özel kullanımsız devreler üzerinde çalıştım ve 50 ms'den fazla ping süreleri gördüm - ve ping 5k veri aktarmıyor.

İlişkilendirilmeyen iki sunucuyu eşitlemede nasıl saklarsınız? Kıtadaki 50 ms'lik gecikme süresine gerçekten ihtiyacınız varsa, yukarıdaki teorik en iyi durum, senkronizasyon algoritmalarını çalıştırmak için 12ms'in olduğu anlamına gelir. Diğer sunucudaki verileri kontrol etmek için bir sorgu bile, 50 ms pencerenin dışında olduğunuz anlamına gelir. Veriler senkronize değilse, bunu nasıl düzeltebilirsiniz? Yukarıdaki zamanlamalar göz önüne alındığında, 50 ms'nin altında senkronizasyonun nasıl mümkün olduğunu göremiyorum.

Temel tasarım gereksinimlerini yeniden gözden geçirmenizi öneririz. Spesifik olarak, neden bu gereksinimi? Kıtada 50 ms'lik gidiş gelişin gecikme gereksinimleri genellikle pazarlamanın ya da detaylara dikkat edilmemesinin işareti. Gereksiniminizi analiz ederseniz, bu 50 ms'lik pencerenin aşırı ve gereksiz olduğunu söylerim. Değilse ve veri senkronizasyonu aslında önemli (muhtemelen), birisi senkronizasyon kodunu yazmak için önemli bir çabanın değere veya 50 ms'lik pencerede kalmasına bile olanaklı olup olmadığını belirlemeye ihtiyaç duyacaktır. Kıtalar arası alt 50ms gecikme veri senkronizasyonu basit bir sorun değildir.

Senkronizasyona gerek yok, neden sadece bir sunucu çalıştırmıyorsunuz?Kıtanın diğer tarafındaki bir köleyi sadece iyileşme amacıyla kullanabilirsiniz. Tabii ki, bu hala en iyi durumda oradaki verileri geri almak için 12ms'iniz var demektir. Ben kıtada + gecikme + 5k/10k veri aktarım 50ms gidiş-dönüş operasyonları saymak olmaz. Söylemek istediğim

+1

bütün bunlar yazmak için zaman ayırdığınız için teşekkür ederiz. Ben büyüdü soru belki yeni bir şey kullanma fikri uzak alabilmek için imkansız bir şey (emin değilim) sorulacak o sadece yapıldığını düşünüyorum. Sorun şu ki, birden fazla lokasyonumuz var ve kullanıcıların kendilerine en yakın bir master'a yazmasını istiyoruz, ardından iki site arasında gerçek zamanlı (mümkün olan en kısa sürede) tutarlılık olmasını sağlamak için bir süreç var. Bu senaryoya uyabilecek bir öneriniz var mı? Daha önemli bir yönü olan isteyeceğini – DvideBy0

+1

, yakın tarafı yazar veya yakın tarafı okur. Mümkün olan en hızlı tek-ana ve yerel okuma köleleri olacaktır. Okuma-yoğun veya yoğun yazma mu, yoksa yaklaşık 50-50 mi? Veri merkezi sitelerine zaten sahipseniz, tek bir master kurar ve testleri çalıştırırdım. Çok usta, özellikle çapraz kıta çok basittir. Neyse ki, çoğu durumda, aslında gerekli değildir. Bir test seti kurar ve araştırmayı inceler. Daha basit bir yol varsa, multimaster'a odaklanmayın. 1Master'dan şüpheleniyorum ve dağıtılan köleler senin için çalışacak. –

2

Bu, muhtemelen müşterinizin bir parçası olarak ele alınır - istemcinin her iki düğümde de yazmasını sağlayın. Yazmaların genellikle senkronize edilmesine gerek yoktur, bu nedenle ekstra komutu göndermek yerel bir düğüme sahip olmanızdan kaynaklanan performansı etkilememelidir.

İlgili konular