MongoDB: uygulama sunucularında mongos sürecini birlikte bulun


12

Bu belgede açıklanan en iyi uygulama hakkında bir soru sormak istiyorum:

http://info.mongodb.com/rs/mongodb/images/MongoDB-Performance-Best-Practices.pdf

Birden çok sorgu yönlendiricisi kullanın. Birden çok sunucuya yayılmış birden çok mongos işlemi kullanın. Yaygın bir dağıtım, uygulama ve mongos işlemi arasında yerel iletişime izin veren uygulama sunucularında mongos sürecinin birlikte konumlandırılmasıdır. Uygun sayıda mongos işlemi, uygulamanın ve konuşlandırmanın niteliğine bağlı olacaktır.

Konuşlandırmamız hakkında biraz bilgi. Çok sayıda uygulama sunucusu düğümümüz var. Her biri durumsuz RESTful WS ile JVM tabanlı bir işlem yürütür. Bu en iyi uygulamanın önerdiği gibi, her bir uygulama sunucusu düğümü kendi mongosişlemini çalıştırır , yani JVM işlemlerinin sayısı her zaman işlem sayısına eşittir mongos.

Tüm mongosişlemler 3 yapılandırma sunucusuna ve birkaç mongo parçasına bağlanır (her parçanın içindeki çoğaltma kümeleriyle). Kırık bir dağıtım kullanıyor olsak da, koleksiyonlarımızı gerçekten kırmıyoruz. Aslında, oluşturma süreleri boyunca tüm parçalara yayılmış çok sayıda veritabanımız var (ve şu anda parçalama için ana kullanım durumumuz budur).

En iyi uygulama aynı zamanda "Uygun sayıda mongos işleminin uygulamanın ve konuşlandırmanın niteliğine bağlı olacağını" önerdiğinden, kullanımımızın mongosgerçekten uygun olup olmadığını veya birkaç özel mongosdüğüme sahip olmanın daha iyi olup olmayacağını merak etmeye başladım. uygulama sunucularımız mongosyerel olarak çalışmadan bunlara bağlanır .

mongosUygulama sunucusu yönetim ortamı sayısı veya MongoDB kümesinin boyutu ile ilgili olarak kaç örneğin uygun olduğuna karar vermek için en iyi yaklaşım hakkındaki fikriniz nedir ?

Son zamanlarda, Docker, Apache Mesos ve Kubernetes gibi araçlar demek istediğim vatansız web hizmetlerimiz için küme yönetimine bakmaya başladık. Docker kullanıyorsak, konteynır içinde birden fazla işlem yürütmek genellikle önerilmez. Bu gerçeği göz önünde bulundurarak, uygulama sunucusu kapsayıcısı ve mongoskapsayıcısının her zaman aynı fiziksel düğümde birlikte bulunduğundan ve eşit miktarda işleme sahip olduğundan emin olmak gerçekten zorlaşır . Bu bana, bu en iyi uygulamanın henüz tanımladığım küme mimarisi için hala geçerli olup olmadığını merak ediyor. Değilse, lütfen mongosbu mimaride süreçleri bulmanın ve dağıtmanın daha iyi bir yolu olabilir mi?

Yanıtlar:


12

Zaten ve cevap gönderildi, ve yararlı ve geçerli bir cevap olduğu için, kendi kullanışlılığından uzaklaşmak istemiyorum, ancak gerçekten kısa bir yorumun ötesine geçecek noktalar var. Bu yüzden umarım geçerli olan ancak öncelikle söylenenlere ek olarak bu "büyütme" yi düşünün.

Gerçek şu ki, "uygulamanızın verileri nasıl kullandığını" düşünmek ve "gölgeli bir ortam" daki faktörlerin yanı sıra bunu etkileyen önerilen "kap ortamınız" da farkında olmaktır.

Arkaplan Örneği

mongosSürecin uygulama örneği ile birlikte konumlandırılması için uygulama önerisinin genel olarak alınması, uygulamanın bu mongossüreçle iletişim kurması için gereken tüm ağ yükünü ortadan kaldırmaktır . Tabii ki mongos, "en yakın" düğümün herhangi bir nedenle mevcut olmaması gerektiğinde, uygulama bağlantı dizesinde bir dizi örneği belirtmek de "önerilen uygulama" dır . uzak düğüm.

Bahsettiğiniz "liman işçisi" vakası biraz keyfi görünüyor. Konteynırların birincil hedeflerinden birinin (ve bundan önce BSD hapishaneleri veya hatta kroot gibi) genellikle bir miktar "süreç izolasyonu" elde etmek olduğu doğru olsa da, sürece çok sayıda işlem yürütmenin gerçekten yanlış bir yanı yoktur. çıkarımları anlamak.

Bu özel durumda, mongos"hafif" olması ve uygulama işlemine, uygulamanın kendisinin "eşleştirilmiş" bir parçası olacak şekilde "ek bir işlev" olarak çalışması amaçlanmaktadır. Dolayısıyla docker görüntülerinin kendilerinin "initd" benzeri bir süreci yoktur, ancak konteynır için ana işlem olarak süpervizör (örneğin) gibi bir işlem denetleyicisinin çalıştırılmasıyla ilgili yanlış bir şey yoktur, bu da size daha fazla işlem kontrolü noktası verir. o kabı da. Bu "eşleştirilmiş süreçler" durumu makul bir durumdur ve bunun için resmi bir belge olduğunu yeterince yaygın bir şekilde sorun .

Bu tür bir "eşleştirilmiş" işlemi dağıtım için seçtiyseniz, aslında mongosaynı ağ bağlantısında bir örneği korumanın ve aslında uygulama sunucusunun kendisi ile "sunucu örneği" nin birincil noktasını ele alır . Aynı zamanda bir şekilde "bütün kapsayıcı" nın başarısız olacağı bir durum olarak görülebilir, o zaman kendi içindeki düğüm basitçe geçersiz olur. Bunu tavsiye edemem ve aslında mongosyalnızca gecikmeyi artıran bir ağ bağlantısı üzerinden erişilebilir olsa bile bağlantıları başka örnekleri arayacak şekilde yapılandırmanız gerekir .

Sürüme Özel / Kullanıma Özel

Şimdi bu noktaya değinildiğine göre, buradaki diğer husus, mongossürecin ağ gecikmesi amaçları için uygulama ile birlikte konumlandırılması konusundaki ilk düşünceye dayanmaktadır . MongoDB'nin 2.6'dan önceki versiyonlarında ve özellikle toplama çerçevesi gibi operasyonlarla ilgili olarak, o zaman çok daha fazla ağ trafiği olacak ve daha sonra mongosfarklı parçalardan gelen verilerle ilgilenmek için işlem tarafından gerçekleştirilen işlemden sonra olacaktı. . Şu anda böyle bir durum söz konusu değil, çünkü işleme iş yükünün büyük bir kısmı artık "yönlendiriciye" damıtmadan önce bu parçaların kendileri üzerinde gerçekleştirilebiliyor.

Diğeri ise kırma ile ilgili uygulama kullanım alışkanlıklarınızdır. Bu, birincil iş yükünün "yazmaların birden çok parçaya dağıtılması" veya gerçekten de okuma isteklerinin birleştirilmesinde "dağılma" yaklaşımı olup olmadığı anlamına gelir. Bu senaryolarda

Test Et, Test Et ve Tekrar Test Et

Dolayısıyla buradaki son nokta gerçekten açıklayıcıdır ve sorunuza herhangi bir aklı başında yanıtın temel fikir birliğine varır. Bu, MongoDB veya başka bir depolama çözümü için yeni bir şey değildir, ancak gerçek dağıtım ortamınızın, çekirdek bileşenlerden beklenen işlevsellikten herhangi bir "birim testi" kadar gerçek kullanım düzeyine yakın bir şekilde "kullanım modelleri" üzerinde test edilmesi gerekir. genel sonuçlar ihtiyacı test edilecek.

"Bu şekilde yapılandır" veya "bu şekilde kullan" demek için "kesin" bir ifade yoktur; bu, uygulama performansınız ve güvenilirliğiniz için beklendiği gibi "gerçekte en iyi olanı" test etmekten ayrıdır.

Tabii ki "en iyi durum" her zaman mongos"çok" uygulama sunucusu kaynaklarından gelen taleplerle örnekleri "kalabalıklaştırmamak" olacaktır . Ancak daha sonra onlara, seçilebilecek "en azından" bir "kaynak havuzuna" sahip olmak için mevcut olan kaynak iş yükleri tarafından dağıtılabilecek bazı doğal "eşlik" e izin vermek ve gerçekten de birçok durumda ideal olmakla birlikte, ek bir indükleme ihtiyacını ortadan kaldırmak msgstr "ağ aktarım yükü".

Amaç budur, ancak ideal olarak, nihai dağıtım çözümünüz için "en uygun" çözüme ulaşmak için farklı algılanan yapılandırmaları "laboratuvarda test edebilirsiniz".

Ben de "ücretsiz" (bira gibi) kursları zaten belirtildiği gibi mevcut ve ne düzeyde olursa olsun bilgi şiddetle tavsiye ediyorum. Çeşitli ders materyali kaynaklarının, dikkate almadığınız veya göz ardı ettiğiniz şeyler hakkında daha fazla bilgi vermek için genellikle "gizli taşlar" sunduğunu görüyorum. M102 Serisi inşa tarafından yürütülür belirtildiği gibi Adam Commerford kimi I can için durumu doğrular MongoDB büyük ölçekli dağıtımları ve diğer veri mimarileri bilginin yüksek düzeyde bulunur. En azından zaten bildiğinizi düşünebileceğiniz yeni bir perspektifi düşünmek için zaman ayırmaya değer.


5

En iyi uygulama aynı zamanda "Uygun sayıda mongos işleminin uygulamanın ve konuşlandırmanın niteliğine bağlı olacağını" önerdiğinden, mongos kullanımımızın gerçekten uygun olup olmadığını merak etmeye başladım

Sanırım bu, dokümantasyonda belirtildiği gibi sonuçta sadece sizin cevaplayabileceğiniz bir soru.

Önerilen stratejilerden mongosbiri, uygulama düğümlerinin her birinde bir hizmete ve muhtemelen ek kullanılabilirlik için ekstra bir özel düğüme sahip olmaktır . Şu anda buna sahip olduğunuz için mevcut dağıtımınızla ilgili yanlış bir şey görmüyorum. Mimarinizde hiçbir şey değişmiyorsa, şu anda en iyi uygulamaların içindesiniz. Ancak...

Docker kullanıyorsak, konteynır içinde birden fazla işlem yürütmek genellikle önerilmez.

Yana mongossüreç çok yoğun kaynak değil, aynı zamanda kırıkların her biri üzerinde bunun bir örneğini koymak ve her sağlayabilirsiniz mongoddüğüm de görevi mongosdüğümü. Uygulama sunucusu mimarinizi biraz daha karmaşık hale getirirseniz, bu daha anlamlı olabilir.

Şahsen bu ürünlere çok aşina değilim, ancak mongosyan yana çalıştırabileceğiniz diğer birçok işlemden daha az yoğun olabileceğinden , satıcıları önerileriyle de kontrol ediyorum .

Son olarak, mongosölçeğinize, kaynaklarınıza vb. Bağlı olarak süreç için her zaman özel düğümler çekebilirsiniz , bu da en iyi uygulamada iyi olur. Buradaki asıl kalkış, bir yerde bir sürü işleminiz olduğu mongossürece iyi durumda olduğunuzdur.

Ancak kaç tanesi gerçekte dağıtımınızın boyutuna ve SLA gereksinimlerine bağlıdır. Kırıkları kullanırsanız, fazlasıyla yeterli olacaksınız, ancak özel düğümleri kullanacaksanız, uygulama düğümlerinin sayısını mümkün olduğunca eşleştirmeye çalışacağım.

Bu videoyu bu konuların üzerinden geçen ve bir sonraki oturumda (ücretsiz, çevrimiçi) DBA'lar için M102 sınıfına kaydolmayı denemek isteyebileceğiniz MongoDB M102 çevrimiçi kursundan izleyebilirsiniz .


Harika cevap için teşekkürler! "ancak özel düğümler kullanacaksanız uygulama düğümlerinin sayısını mümkün olduğunca eşleştirmeye çalışırım." Bu ifadenin ardındaki gerekçe nedir?
tenshi

Benim fikrim: çoğu durumda kırıklardan daha az uygulama düğümü vardır ve bir öneri için uygulama düğümlerini kullanmak olduğundan mongos, aynı sayıda özel düğümün eşleştirilmesi en az yeterli mongosörneği sağlamalıdır . Bu tam bir bilim değildir ve ihtiyaçlarınıza bağlıdır, ancak bir üretim ortamını bu şekilde tercih ederim.
LowlyDBA
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.