Çok fazla RAM içeren bir sunucu oluşturmanın uygun maliyetli yolu


10

Ölçeklenebilirliğin öncelikle RAM ile sınırlı olduğu, bir veri merkezinde bir veya daha fazla sunucuda çalıştırmak istediğiniz bir Java uygulamam var. 100GB - 512GB veya daha fazla RAM barındırabilecek sunucu donanımını nerede aramalıyım? Böyle konularda uzman değilim, bu yüzden nereden başlayacağımı gerçekten bilmiyorum.

Bu süper bilgisayar alanına mı giriyor (6 rakam veya daha fazla), yoksa düşük 5 haneli dolar için böyle bir sunucu alabilir miyim?

Aşağıdaki bazı sorulara dayanan birkaç not:

  • Evet, bu ölçeklenebilirlik gereksinimini kaldırmanın yollarını düşünmek için çok uğraştım ve hayır, bu gerçekten bir seçenek değil. Uygulama temel olarak çok büyük miktardaki verilere çok hızlı rastgele erişim gerektirir, bir sabit diskte saklamak (belki bir veritabanı aracılığıyla) kesmez.
  • Eminim ki JVM, en azından teoride, bu kadar genişleyebilir. Kodumu düzenli olarak Sun 1.6 JVM'ye tahsis edilen 10GB ile fark edilir bir şekilde çalıştırıyorum.

Yanıtlar:


6

Olağandışı gereksinimler bazen olağandışı çözümlerden yararlanır. Tabii ki Sun, Dell veya HP'ye 6 rakam verebilir ve onunla yapılabilirsin, ama kasabadaki tek oyun değil.

Tek kutu çözümleri için, 1.000 GB'tan daha düşük maliyetli homebrew anakartlarda bile 128 GB'a kadar ulaşmak çok ucuzdur (32 x 4GB ~ 3.000 USD). (yapımcılarla alay etmeyin. Google için yeterince iyi ise ...)

256GB çok daha pahalı (32x8GB ~ 18.000 USD) ve bunun ötesinde ...

Alternatif olarak, Infiniband (10Gbps) birbirine bağlı ucuz kutuları alternatif olarak gördünüz mü?

Bu şekilde 4 düğümlü, 16 işlemcili (64 çekirdekli), 512 GB'lık bir makine oluşturabilir ve yine de 25.000 ABD Doları'ndan değişiklik yapabilirsiniz.

Ayrıca, uygulamanız bunlardan biri başarısız olursa 3 makinede çalışabilirse ve muhtemelen 8 düğüme kadar maliyette doğrusal bir ölçekleme elde ederseniz (sadece 4 düğüm daha ekleyin) zarif bozulmanın ek avantajlarına sahip olacaksınız. Bu noktada , <50.000 USD için harika bir 128 çekirdekli 1 TB RAM canavara bakıyorsunuz .

Infiniband teklifini egzotik olarak reddetmeden önce, istediğiniz makine tipi için değil. ör. ilk 10 süper bilgisayardan 141'i ilk 10'un 4'ü dahil olmak üzere bu şekilde oluşturulmuştur ( http://top500.org/connfam/8 )


Infiniband'ın doğru çözüm olup olmadığını bilmiyorum (onunla hiçbir deneyimim yok), ancak (2011'de) egzotik olmak için tek bir sunucuda 100GB + ram ile Java çalıştıran bir sistemi çağırırdım. Egzotik çözümleri düşünmenin zamanı geldi.
Mike Miller

-1 gerçekten, gerçekten yanıltıcı olduğu için. TOP500 içinde süper çoğu düşük gecikmeli ağ sağlamak için INFINIBAND kullanırken değil RDMA üzerinde tek bir tutarlı bir görüntü sağlamak için - yani kullanım olduğunu gerçekten egzotik. Bunu kullanmak için Tek Sistemli Görüntü veya vSMP ürünü kullanmanız gerekir. Bunun için Kerrighed veya OpenSSI gibi bir şey kullanabilirsiniz, ancak bu teklifler değiştirilmiş çekirdeklere dayanır ve tek bir işlem görüntüsünü düğümler arasında bölemez. Yalnızca çok pahalı bir çözüm olan ScaleMP, RDMA bağlantılı birden çok sunucuya gerçek bir tutarlı sistem görüntüsü verebilir.
jgoldschrafe

3

Tamam, bak. Aradığınız RAM ayak izine sahip bir sunucu bulamayacaksınız, en azından kendi elektrik şebekesini gerektirmeyen bir sunucu bulamayacaksınız.

Neden ölçeklenebilir bir yaklaşım kullanmıyorsunuz ve memcached kullanmıyorsunuz? Belleği ağ üzerindeki farklı makinelere dağıtabilirsiniz. Veriler hiçbir zaman bir disk sürücüsüne dokunmak zorunda değildir ve bahsettiğiniz parayla satın alabileceğiniz ultra hızlı ağ türüyle gecikme neredeyse hiç sorun olmaz.

Java için memcached istemcisi: http://www.whalin.com/memcached/

Ve işte aşina olmadığınızda memcached'a bir giriş: http://www.danga.com/memcached/

Şuna bak. Çılgınca RAM ile tek bir canavar makinesi inşa etmekten çok daha uygun maliyetli olacak. Ayrıca, bu tür bir gereksinimi olan bir şey yapıyorsanız, muhtemelen görev açısından kritiktir ve tek bir başarısızlık noktasına ihtiyacınız yoktur.


İyi bir fikir. Neredeyse kendi fikrimden daha çok hoşlanıyorum.
phuzion

Bu saçma. Geçen hafta bir sunucu bölümünde başlatılan Sandy Bridge, 1U sunucu paketinde 768 GB'a kadar ölçeklenebilir. Westmere parçalarına bağlı kalmak istiyorsanız, QPI bağlantıları aracılığıyla iki IBM x3850 veya benzer sunucuyu birbirine bağlayabilir ve 4000 watt'tan daha az güçle çalıştırabilirsiniz. (Bu, aynı raf alanındaki dört 2U sunucusuyla aynı güç ayak izi.) Muhtemelen AMD'nin bu alanda da bazı rekabetçi teklifleri var.
jgoldschrafe

4
@jgoldschrafe Bu soru 3 yıl önce soruldu (ve cevaplandı).
Matt Simmons

2

HP DL585 veya DL785 veya Sun X4600 gibi 4 veya 8 yuvalı Opteron sunucuları, 128-256GB aralığında büyük miktarda bellek alabilir. Ucuz olmasalar da, kesinlikle 6 haneli fiyat etiketlerine girmezler; 8-yollu, 32 çekirdekli Sun X4600, 256GB RAM listesiyle, web sitelerinde yaklaşık 35.000 $ 'dır ve bu da bu tür bir sistemin aldığı kadar büyüktür. Muhtemelen sistemi web sitesinde gösterilen liste fiyatından biraz daha az alabileceğinizi göreceksiniz.

4Gb DIMM'ler mevcut olmasına rağmen, büyük bir fiyat primine girme eğilimindedirler, bu nedenle bunlarla maksimum bir sisteme çıkmak oldukça daha pahalı olacaktır.

Bu tür bir sistem kullanmak istiyorsanız, 64 bit O / S'ye ihtiyacınız olacaktır. Ayrıca 64 bit JVM aldığınızdan ve uygulamanızla iyi çalışıp çalışmadığını kontrol edin.


Sanırım 54 bit JVM değil, 64 bit JVM demek istediniz: P
tegbains


2

Hangi RAM boyutlarına kesinlikle dikkat edin. Bir HP makinesini 64 GB'a kadar ölçeklendirdik (HP, makinenin 128 GB alabileceğini belirtti), ancak yalnızca ek bir yükseltici kartı, bir soğutma şaftı ve benzeri ekledikten sonra (HP ile çok fazla sohbet ettikten sonra).
Yalnızca bir makinenin n GB'a kadar yer belirtmesi nedeniyle, ek değişiklikler olmadan çalışacağı anlamına gelmez. Bizim durumumuzda tüm normal bellek modülleri çalışmadı, çünkü ısındılar, sadece çok spesifik modüller çalıştı.


1

RAM maliyeti doğrusal olarak büyük boyutlara ölçeklenmez. Sadece 15GB karşılığında 1GB DIMM satın alabileceğim için, sadece 1.920 $ karşılığında 128GB'lık bir sunucu alabileceğim anlamına gelmez ... bir başlangıç ​​için 128 DIMM yuvası bulunan bir anakart bulamazsınız.

Belli bir boyutun (~ 8 ila 16GB) üstünde, tamamen tamponlama DIMM'lerini (FB-DIMM'ler) gerektiren anakartlar görmeye başlarsınız , bu da GB başına standart masaüstü belleğinden çok daha pahalıya mal olur.

İçlerinde 128GB bellek bulunan makineleri düzenli olarak kullanıyoruz ve fiyat son yıllarda uzun bir yol kat etti, ancak şu anki numaram yok ... ne de JVM'nin bu bellek boyutuna ne kadar iyi ölçekleneceğine dair herhangi bir deneyimim yok .


1

Aslında pek çok seçeneğiniz var, sadece HP listesinden 128GB alabilen BL680c blade'iniz var, DL580 / 585'leri 256GB alabilir ve DL785 512GB alabilir. IBM'in bazıları da bir Dell gibi 256 GB'a kadar çıkıyor.


0

Geleneksel donanımda 64GB'lık tavan boşluğu sorunlarıyla karşılaşmaya başlayacağınızı düşünüyorum. Oradan ölçeklendirebilirseniz sorun olmaz ama benim tahminim mimarinin sorgulanması için çok daha uygun maliyetli bir çözüm olacaktır. Yaptığınız şey hakkında hiçbir bilgiye sahip olmadığımı söylüyorum ama bunu sadece oraya atıyorum.


Ne yazık ki, uygulama büyük miktarda veriye çok hızlı rasgele erişim gerektirdiğinden, RAM gereksinimini aşmanın kolay bir yolu yoktur - verileri diskte depolamak kesmeyecektir :-(

0

Amazon'un EC2 çözümü sizin için uygun olur mu? Kesinlikle en uygun maliyetli çözüm olurdu.


Korkmuyorum - bir EC2 sunucusunun destekleyebileceği maksimum RAM miktarı 14GB, en son ne zaman kontrol ettim.

0

Diyelim ki bu kadar belleği bir sunucuya sığdırabilirsiniz (eğer yanılmıyorsam, standart donanımdaki Linux 64GB ile sınırlıdır, ancak emin değilim).

Çoğu işletim sisteminde, JVM, kısmen bitişik bellek gerektiğinden ve kısmen işletim sistemi kısıtlamaları nedeniyle yaklaşık 1.4GB-1.6GB yığın alanıyla sınırlıdır.

Bu nedenle, fazladan bir RAM bir uygulamayı ölçeklendirmenize yardımcı olmaz, yalnızca uygulamanın birden çok örneğini çalıştırmanıza izin verir. Ancak, daha sonra birden fazla çekirdeğe ihtiyacınız olacak ve çeşitli diğer sorunlarla karşılaşacaksınız.

Ne kadar RAM'e ihtiyacınız var? Bellekte depolanabilen veya bir RAM sürücü kullanabilen veritabanları bulabilir, ancak bu kadar şeyi belleğe kaydetmenize izin verecek bir JVM'nin farkında değilim.


JVM'nin 1.6GB'lık bir yığın alanıyla sınırlı olmadığından eminim, düzenli olarak 10GB ve daha fazlası ile Sun'ın JVM'si ile çalıştırıyorum, elbette 64 bitlik bir makinede olması gerekiyor.

Katılmıyorum. Bakınız: unixville.com/~moazam Ve burada SO hakkında birkaç soru. Şu anda 64 bit Mac'imde desteklenmeyen AFAIK 64 bit JVM'lerden emin değilim, 64 bit Linux / Win hakkında bilmiyorum.

64bit JVM kullanıyorum, aslında Mac'te bir tane kullanıyorum. Apple, 64bit Mac'ler için Java 1.6'yı bir süre önce yayınladı.

Eclipse benim için 1.6 üzerinde çalışmadığı için bilmiyordum ... Ama tamam, bunu kabul ediyorum. Makinenize koyabileceğiniz maksimum RAM nedir?

her zaman 16 gb yığınları ile 64 bit jvms kullanıyorum

0

Daha fazla sistem belleği almanın tipik bir yolu daha fazla sistem elde etmektir. Bellek gerçekten darboğazsa, ne kadar belleğiniz olduğu değil, verilerinizin işlemcilere ne kadar iyi bağlandığıdır. Seni çok iyi yapabilmek için bir çok şeyi ölçeklendirmen gerekecek.

Sadece sistem belleğine sıfır birkaç ekleyerek netleştirmek için muhtemelen edilir değil bunu will ne düşündüğünü yapacağız. Bulacağınız şey, artık tüm veri kümenizin belleğe ya da biraz daha büyük bir dilime sığması, önbellek geçersiz kılma gibi başka bir darboğazla karşılaşacağınızdır.

Sisteminizi ölçeklendirmenin doğru yolu yavaştır. Şu anda, 8 g koçlu 4 çekirdekli bir sistemde çalışıyorsanız, gerçekten nerede zaman harcadığını görmek için önce uygulamanızın cehennemini profilinize alın, ardından 12 veya 16 gig koça kadar çarpmayı deneyin ve nasıl olduğunu görün profil oluşturma sonuçları değişti.

Asıl soru, neden diğer kaynaklara göre sistem belleğinin yaygın olarak mevcut olandan yaklaşık 100 kat daha fazla olması gerektiğidir. Veri erişim düzeniniz bir şekilde tahmin edilebilirse, yapmanız gereken disk bant genişliğini artırmaktır, birkaç şeritli diske sahip birkaç baskın denetleyici bunu başaracaktır.

Veri erişim düzeniniz gerçekten, gerçekten rastgele ise, muhtemelen daha iyi optimize edilmiş bir algoritmaya yer vardır.


0

Muhtemelen bunun için özel bir sunucuya ihtiyacınız var.

Unisys'den ES7000'e bakmayı deneyin. Orada açıklama muhtemelen biraz tarihli.

512 GB'a kadar RAM'i destekleyebilir. Windows ve Linux Enterprise gibi tanınmış O / S kullanıyor.

Standart yapılandırma için size ~ 30K $ mal olacak, ancak Itanium ve tüm çan ve ıslıklarla ~ 600K $ 'a kadar çıkabilir.

Bu kadar RAM ile, disk alanına dokunmadan çok sayıda sıcak veri tutabilirsiniz.


0

Açıkçası 64 Bit İşletim Sistemlerine ihtiyacınız var, ancak Süper Bilgisayar Bölgesinde değilsiniz. Örneğin, Dell'in PowerEdge R900 ve R905 modelleri 256 GB RAM ile kullanılabilir ve standart Intel Xeon / AMD Opteron İşlemciler kullanır ve Linux, Solaris veya Windows 2003 ve 2008 işletim sistemlerini çalıştırır.

Tabii ki, doğrudan Dell'den RAM satın almak çok uygun maliyetli değildir (32 x 8 GB için ~ 35.000 ABD doları isterken, zaten yaklaşık 23.000 ABD Doları, muhtemelen daha az alabilirsiniz), ancak yine de isteyebilirsiniz 40.000 ABD Doları Sunucu satın alıyorsanız uygun desteğe sahip olduğunuzdan emin olmak için (256 GB RAM'in ucuz olmasını beklemiyordunuz, değil mi? 128 GB da iyi ise, ~ 12.000 ABD Doları tasarruf edebilirsiniz).

Hangi İşletim Sistemini seçeceğime dair hiçbir deneyimim yok, 100+ GB Java çalıştırmak genellikle yaptığım bir şey değildir :)


0

Tamamen kullanıma hazır bir çözüme ne dersiniz: Bir veritabanı. Çok yavaş olacağını söylediğini biliyorum ama bu neye ev sahipliği yaptığına bağlı. Bunların yeterince RAID0 dizisinde barındırılmaya ne dersiniz?

Gadget için 400 $, Pricewatch fişleri 4 gb için 55 $ (uyumluluğu kontrol etmedim) listeliyor, bu yüzden bellek için başka bir 440 $. Bu size 840 dolara 32 gb kazandırıyor. (Cihaz teorik olarak toplam 64gb için 8gb yonga alabilir, ancak henüz hiçbir yonga desteklenmez.)

RAID0 4 bunlardan biri ve sıralamanızın en düşük seviyesindesiniz 3000 $ + 'ın biraz üzerinde sıradan bir kutu. 16 tanesi aralığınızın en yüksek seviyesini 14 bin dolar kazanıyor.

Kullanılabilir olup olmadığı da verilerinizin niteliğine bağlıdır - bu cihazlar uçucudur ve bir CF karta yedekleyebilmelerine rağmen yedek pillerini birkaç saat içinde tüketir.


0

Ben "çok ucuz sunucular" yaklaşımının büyük bir hayranıyım. Ubuntu 9.04'te bulunan Eucalyptus platformunda bu tür bir süreci yürütmeyi düşündünüz mü? Bu tür bir programı, kendi özel gigabit ağında 8, 16 veya 32GB RAM çalıştıran birden fazla sunucu ile birkaç bilgisayar üzerinde çalıştırabilir ve ihtiyacınız olduğunda daha ucuz sunucular ekleyerek doğrusal bir şekilde ölçeklendirebilirsiniz.


0

Başvurunuzun niteliği hakkındaki yorumunuzu okudum, ancak yine de alternatif çözümleri düşünebilirsiniz.

FusionIO gerçek bir alternatiftir. Sadece bir bak . 10K $ 'da hala üst düzey sunucudan çok daha ucuzdur. 1,0 GB / s bant genişliği yazın - bu gerçekten çılgınca geliyor.

Başka bir seçenek de elbette SSD. Intel® X25-E Extreme SSD teknik özelliklerini görmüş olmanız durumunda:

Read Latency 75 microseconds
I/O Per Second (IOPS) Random 4 KB reads: >35,000 IOPS
Random 4 KB writes: >3,300 IOPS
Sustained sequential read: up to 250 MB/s
Sustained sequential write: up to 170 MB/s

Bir demet baskın 10 diziye koymak size yeterli performans verebilir. 32 GB başına 400 USD ile alternatif yüksek kaliteli sunuculardan çok daha ucuzdur.


0

FusionIO önerisine benzer bir şekilde, dinamik RAM'i bir SATA arayüzüne bağlamanıza izin veren cihazlar alabilirsiniz. Gibi bir şey bu (ı ürün veya şirketin hiçbir deneyime sahip, bir "Google Alışveriş" arama çıktı sadece ilk seçenektir).

Bunlardan birkaçını, uygulamanızın mantığını kullanarak verileri önbelleğe almak için bağlı bir dosya sistemi olarak kullanabilirsiniz (pil desteklidir, bu nedenle önyükleme ve diğer kesintilerden kurtulmalıdır) veya bunları takas alanı olarak kullanabilir ve çekirdeğin bunları nasıl kullanacağına karar vermesine izin verebilirsiniz ( İşletim sistemi çekirdekleri genellikle tüm takas konumlarının gerçek RAM'den daha yavaş ve daha büyük büyüklük sıraları olduğunu varsayarak optimize edildiğinden, bu olacak, muhtemelen böyle bir düzenlemeden en iyi şekilde yararlanmak için önemli ölçüde ince ayar yapmanız gerekecektir).

Gerçekten büyük bir şeye ihtiyacınız varsa FusionIO seçeneği para için daha iyi bir değer olacaktır, bu tür RAM sürücüsü bir uzlaşma olarak daha iyi olabilir. Anakart üzerinde 128Gb RAM kapasitesine sahip bir sunucunun ve tam 64Gb nüfuslu bunlardan bir kaçının fiyat ve performans açısından 256Gb veya daha fazlasını doğrudan destekleyen bir uzman sunucu ile ne kadar iyi karşılaştırdığını inceleyerek, okuyucu için bir egzersiz olarak ayrılıyorum!


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.