Cara hemat biaya untuk membangun server dengan banyak RAM


10

Saya memiliki aplikasi Java di mana skalabilitas terutama dibatasi oleh RAM, yang ingin saya jalankan di satu atau lebih server di pusat data. Di mana saya harus mencari perangkat keras server yang dapat menampung 100GB - 512GB atau lebih RAM? Saya bukan ahli dalam hal-hal seperti itu jadi saya benar-benar tidak tahu harus mulai dari mana.

Apakah ini masuk ke wilayah superkomputer (6 angka atau lebih), atau bisakah saya mendapatkan server seperti itu dengan dolar 5 digit yang rendah?

Beberapa catatan berdasarkan beberapa pertanyaan di bawah ini:

  • Ya, saya telah berusaha keras memikirkan cara untuk menghapus persyaratan skalabilitas ini, dan tidak ada yang bukan opsi. Aplikasi ini pada dasarnya membutuhkan akses acak yang sangat cepat ke sejumlah besar data, menyimpan dalam hard disk (melalui database mungkin) tidak akan memotongnya.
  • Saya cukup yakin JVM dapat, setidaknya secara teori, meningkatkan sejauh itu. Saya secara teratur menjalankan kode saya dengan 10GB yang dialokasikan untuk Sun 1.6 JVM tanpa masalah nyata.

Jawaban:


6

Persyaratan yang tidak biasa terkadang mendapat manfaat dari solusi yang tidak biasa. Tentu Anda bisa memberikan 6 angka kepada Sun, Dell atau HP dan menyelesaikannya, tapi itu bukan satu-satunya game di kota.

Untuk solusi kotak tunggal, mendapatkan hingga 128GB sangat murah (32 x 4GB ~ USD 3.000), bahkan dengan motherboard homebrew yang harganya kurang dari USD 1.000. (Jangan mengejek pembuatnya. Jika itu cukup baik untuk Google ...)

256GB benar-benar lebih mahal (32x8GB ~ USD 18.000), dan lebih dari itu ...

Atau apakah Anda mempertimbangkan kotak murah Infiniband (10Gbps) yang saling berhubungan sebagai alternatif?

Anda dapat membangun mesin 4 node, 16 prosesor (64 core), 512GB dengan cara itu dan masih ada perubahan dari USD 25.000.

Anda selanjutnya akan memiliki manfaat tambahan degradasi anggun, jika aplikasi Anda dapat berjalan pada 3 mesin jika salah satu dari mereka gagal, dan mungkin mendapatkan skala linear dalam biaya hingga 8 node (cukup tambahkan 4 node lagi). Pada saat itu Anda sedang mencari 128 core yang keren, 1TB RAM beast seharga <USD 50.000 .

Sebelum Anda menolak proposal Infiniband sebagai eksotis, ini bukan untuk jenis mesin yang Anda minta. mis. 141 dari 500 superkomputer teratas dibangun dengan cara ini, termasuk 4 dari 10 besar ( http://top500.org/connfam/8 )


Saya tidak tahu apakah Infiniband adalah solusi yang tepat (saya tidak punya pengalaman dengan itu), tetapi (pada 2011) saya akan memanggil sistem yang menjalankan Java dengan 100GB + ram pada satu server menjadi eksotis. Sudah waktunya untuk mempertimbangkan solusi eksotis.
Mike Miller

-1 karena benar-benar menyesatkan. Sebagian besar superkomputer di TOP500 menggunakan Infiniband untuk memberikan jaringan-latency rendah, tidak untuk memberikan citra yang koheren tunggal atas RDMA - penggunaan yang adalah benar-benar eksotis. Untuk memanfaatkannya, Anda perlu menggunakan Gambar Sistem Tunggal atau produk vSMP. Meskipun Anda dapat menggunakan sesuatu seperti Kerrighed atau OpenSSI untuk ini, penawaran ini didasarkan pada kernel yang dimodifikasi dan tidak dapat membagi gambar proses tunggal di seluruh node. Hanya ScaleMP, yang merupakan solusi yang sangat mahal, dapat memberikan gambar sistem yang nyata koheren di beberapa server yang terhubung RDMA.
jgoldschrafe

3

Baiklah, lihat. Anda tidak akan menemukan server yang memiliki jenis jejak RAM yang Anda cari, setidaknya tidak ada yang tidak memerlukan jaringan listrik sendiri.

Mengapa tidak mengambil pendekatan scalable, dan menggunakan memcached? Anda dapat menyebarkan memori ke berbagai mesin di seluruh jaringan. Data tidak pernah menyentuh disk drive, dan dengan jenis jaringan sangat cepat yang dapat Anda beli dengan uang yang Anda bicarakan, latensi hampir tidak akan menjadi masalah sama sekali.

Inilah klien memcached untuk java: http://www.whalin.com/memcached/

Dan inilah intro untuk memcached jika Anda tidak terbiasa: http://www.danga.com/memcached/

Lihatlah ke dalamnya. Ini akan menjadi cara yang jauh lebih efektif daripada membangun mesin monster tunggal dengan jumlah RAM yang gila. Selain itu, jika Anda melakukan sesuatu yang memiliki persyaratan seperti itu, itu mungkin misi penting, dan Anda tidak perlu satu titik kegagalan.


Ide bagus. Saya hampir menyukainya lebih dari ide saya sendiri.
phuzion

Itu tidak masuk akal. Sandy Bridge, yang diluncurkan minggu lalu di bagian server, dapat meningkatkan hingga 768 GB dalam paket server 1U. Jika Anda ingin tetap menggunakan komponen Westmere, Anda dapat menghubungkan dua IBM x3850 atau server serupa secara bersamaan melalui tautan QPI dan memberinya daya dengan daya kurang dari 4000 watt. (Itu jejak daya yang sama dengan empat server 2U di ruang rak yang sama.) Agaknya AMD memiliki beberapa penawaran kompetitif di ruang ini juga.
jgoldschrafe

4
@jgoldschrafe Ini ditanya (dan dijawab) 3 tahun yang lalu.
Matt Simmons

2

Server 4 atau 8 socket Opteron seperti HP DL585 atau DL785 atau Sun X4600 dapat mengambil banyak memori dalam kisaran 128-256GB. Meskipun mereka tidak murah, mereka tentu tidak menjadi label harga 6 digit; 8-way, 32 core Sun X4600 dengan 256GB daftar RAM di sekitar $ 35.000 di situs web mereka, dan itu sekitar sebesar sistem ini. Anda mungkin akan menemukan bahwa Anda bisa mendapatkan sistem kurang dari harga daftar yang ditampilkan di situs web ..

Meskipun 4Gb DIMM tersedia, mereka cenderung menggunakan premi harga yang besar, jadi naik ke sistem yang dikompromikan dengan ini akan jauh lebih mahal.

Jika Anda ingin menggunakan sistem jenis ini, Anda membutuhkan O / S 64-bit. Pastikan Anda juga mendapatkan JVM 64-bit dan periksa apakah itu berfungsi baik dengan aplikasi Anda.


Saya pikir Anda berarti 64-bit JVM, bukan 54-bit JVM: P
tegbains


2

Berhati-hatilah dengan ukuran RAM yang demikian. Kami telah meningkatkan mesin HP ke 64 GB (HP menyatakan bahwa mesin dapat mengambil 128 GB), tetapi hanya setelah menambahkan papan riser tambahan, poros pendingin dan sebagainya (setelah banyak mengobrol dengan HP).
Hanya karena mesin ditentukan untuk mengambil hingga n GB, itu tidak berarti bahwa itu akan berfungsi tanpa perubahan tambahan. Dalam kasus kami tidak semua modul memori normal bekerja, karena mereka menjadi panas, hanya modul yang sangat spesifik yang bekerja.


1

Biaya RAM tidak skala secara linear ke ukuran besar. Hanya karena saya dapat membeli DIMM 1GB seharga $ 15 tidak berarti saya bisa mendapatkan server dengan 128GB hanya dengan $ 1.920 ... untuk permulaan Anda tidak akan menemukan motherboard dengan 128 slot DIMM di dalamnya.

Di atas ukuran tertentu (~ 8 hingga 16GB) Anda mulai melihat motherboard yang membutuhkan DIMM penyangga penuh (FB-DIMM), yang akan dikenakan biaya jauh lebih banyak per GB daripada memori desktop standar.

Kami secara teratur menggunakan mesin dengan memori 128GB di dalamnya dan harganya telah turun jauh dalam beberapa tahun terakhir, tetapi saya tidak memiliki angka saat ini ... juga tidak ada pengalaman seberapa baik JVM akan skala untuk ukuran memori itu. .


1

Anda sebenarnya memiliki banyak opsi, hanya dari daftar HP Anda memiliki blade BL680c mereka yang dapat mengambil 128GB, DL580 / 585 mereka dapat mengambil 256GB dan DL785 mereka dapat mengambil 512GB. Beberapa IBM naik hingga 256GB, seperti halnya satu Dell juga.


0

Saya pikir Anda akan mulai mengalami masalah ruang kepala di 64GB pada perangkat keras tradisional. Jika Anda dapat keluar dari sana Anda akan baik-baik saja tetapi tebakan saya adalah bahwa solusi yang jauh lebih hemat adalah mempertanyakan arsitektur Anda. Memang saya katakan bahwa tanpa pengetahuan tentang apa yang Anda lakukan tetapi saya hanya membuangnya di sana.


Sayangnya tidak ada cara mudah untuk menyiasati persyaratan RAM, karena aplikasi ini membutuhkan akses acak sangat cepat ke sejumlah besar data - menyimpan data pada disk tidak akan memotongnya :-(

0

Apakah solusi EC2 Amazon layak untuk Anda? Ini tentu akan menjadi solusi yang paling hemat biaya.


Tidak takut - jumlah maksimum RAM yang dapat didukung server EC2 adalah 14GB, terakhir kali saya memeriksanya.

0

Katakanlah Anda dapat memasukkan memori sebanyak itu ke server (jika saya tidak salah, Linux pada perangkat keras standar dibatasi hingga 64GB, tetapi saya tidak yakin).

Di bawah sebagian besar sistem operasi, JVM terbatas pada ruang tumpukan sekitar 1.4GB-1.6GB, sebagian karena memori yang berdekatan diperlukan dan sebagian karena pembatasan sistem operasi.

Oleh karena itu, RAM tambahan tidak akan membantu Anda meningkatkan satu aplikasi, itu hanya akan membiarkan Anda menjalankan beberapa contoh aplikasi. Namun, Anda kemudian akan membutuhkan beberapa core dan mengalami berbagai masalah lainnya.

Untuk apa Anda membutuhkan RAM sebanyak itu? Anda mungkin dapat menemukan basis data yang dapat disimpan dalam memori atau menggunakan drive RAM, tetapi saya tidak mengetahui adanya JVM yang memungkinkan Anda menyimpan banyak barang dalam memori.


Saya cukup yakin JVM tidak terbatas pada ruang tumpukan 1,6GB, saya secara teratur menjalankannya dengan 10GB dan lebih banyak lagi dengan Sun's JVM, tentu saja harus pada mesin 64 bit.

Saya tidak setuju. Lihat: unixville.com/~moazam Dan beberapa pertanyaan di SO. Saya tidak yakin tentang JVM 64-bit, AFAIK yang tidak didukung pada 64bit mac saya saat ini, tidak tahu tentang 64-bit Linux / Win.

Saya menggunakan JVM 64bit, pada kenyataannya, saya menggunakan JVM di Mac. Apple merilis Java 1.6 untuk 64bit Mac beberapa waktu lalu.

Saya tidak akan tahu, karena Eclipse tidak berjalan pada 1,6 untuk saya ... Tapi ok, saya menerimanya. Berapa RAM maksimal yang bisa Anda pakai di mesin Anda?

saya menggunakan jvms 64 bit dengan 16 gb heaps sepanjang waktu

0

Cara khas untuk mendapatkan lebih banyak memori sistem adalah dengan mendapatkan lebih banyak sistem. Jika memori benar-benar menjadi hambatan, maka itu bukan seberapa banyak memori yang Anda miliki, tetapi seberapa baik koneksi data Anda ke prosesor Anda. Anda harus meningkatkan banyak hal untuk itu agar Anda lebih baik.

Untuk memperjelas, Hanya menambahkan beberapa nol ke memori sistem Anda mungkin tidak akan melakukan apa yang Anda pikirkan. Apa yang akan Anda temukan adalah bahwa sekarang seluruh dataset Anda sesuai dengan memori, atau bahkan sepotong yang sedikit lebih besar, Anda akan mengalami beberapa hambatan lainnya, seperti pembatalan cache.

Cara yang tepat untuk skala sistem Anda secara perlahan. Jika saat ini Anda menjalankan, katakanlah, pada sistem 4 inti dengan 8 pertunjukan ram, pertama-tama buatlah aplikasi Anda untuk melihat di mana itu benar-benar menghabiskan waktu, kemudian coba menabrak hingga 12 atau 16 pertunjukan ram dan lihat caranya hasil profiling telah berubah.

Pertanyaan sebenarnya adalah, mengapa Anda membutuhkan sekitar 100 kali memori sistem, relatif terhadap sumber daya lain, daripada apa yang biasanya tersedia. Jika pola akses data Anda dapat diprediksi, yang harus Anda lakukan adalah meningkatkan bandwidth disk, beberapa pengontrol serangan dengan beberapa disk bergaris akan mencapai ini.

Jika pola akses data Anda benar-benar acak, maka mungkin ada ruang untuk algoritma optimal yang lebih baik.


0

Anda mungkin memerlukan server khusus untuk itu.

Coba lihat ES7000 dari Unisys. Deskripsi di sana mungkin sedikit ketinggalan zaman.

Ini dapat mendukung hingga 512GB RAM. Menggunakan O / S yang terkenal, seperti Windows dan Linux Enterprise.

Ini akan dikenakan biaya ~ $ 30K untuk konfigurasi standar, tetapi dengan Itanium dan semua lonceng dan peluit, bisa naik hingga ~ $ 600 ribu.

Dengan RAM sebesar itu, Anda dapat menyimpan banyak data panas tanpa menyentuh ruang disk sama sekali.


0

Anda jelas membutuhkan Sistem Operasi 64-Bit, tetapi Anda tidak berada di Wilayah Super Komputer. Seperti contohnya, PowerEdge R900 dan R905 dari Dell tersedia dengan RAM 256 GB dan menggunakan Prosesor Intel Xeon / AMD Opteron standar dan menjalankan Linux, Solaris atau Windows 2003 dan 2008.

Tentu saja, membeli RAM secara langsung di Dell tidak terlalu hemat biaya (Mereka ingin ~ 35.000 US $ untuk 32 x 8 GB, sementara Anda bisa mendapatkannya dengan harga sekitar 23.000 US $, mungkin lebih sedikit), namun di sisi lain Anda mungkin ingin untuk memastikan bahwa Anda memiliki dukungan yang tepat jika Anda membeli 40.000 US $ Server (Anda tidak mengharapkan RAM 256 GB menjadi murah, bukan? Jika 128 GB juga OK, Anda dapat menghemat ~ 12.000 US $).

Saya tidak punya pengalaman tentang Sistem Operasi mana yang harus dipilih, menjalankan 100+ GB Java biasanya bukan sesuatu yang saya lakukan :)


0

Bagaimana dengan solusi yang benar-benar out-of-the-box: Database. Saya tahu Anda mengatakan itu akan terlalu lambat tapi itu didasarkan pada apa yang menampungnya. Bagaimana kalau hosting itu pada array RAID0 cukup ini.

$ 400 untuk gadget, Pricewatch mendaftarkan chip seharga $ 55 (saya belum memeriksa kompatibilitas) untuk 4gb, jadi itu $ 440 lagi untuk memori. Itu membuat Anda 32GB untuk $ 840. (Secara teori perangkat dapat mengambil chip 8gb untuk total 64gb tetapi tidak ada chip yang didukung.)

RAID0 4 ini dan Anda berada di ujung bawah kisaran Anda untuk sedikit lebih dari $ 3000 + kotak biasa. 16 dari mereka mendapatkan nilai tertinggi dari kisaran Anda untuk $ 14k.

Apakah ini bisa digunakan atau tidak juga akan mengurangi sifat data Anda - perangkat ini tidak stabil dan akan menghabiskan baterai cadangan mereka dalam beberapa jam meskipun mereka dapat kembali ke kartu CF.


0

Saya penggemar berat pendekatan "banyak server murah". Pernahkah Anda melihat mungkin menjalankan proses semacam ini pada platform Eucalyptus, tersedia di Ubuntu 9.04? Mungkin saja Anda dapat menjalankan program semacam ini melalui beberapa komputer di jaringan gigabit khusus mereka sendiri dengan beberapa server yang menjalankan RAM 8, 16 atau 32GB, dan meningkatkan skala secara linier, menambahkan lebih banyak server murah saat Anda membutuhkannya.


0

Saya memang membaca komentar Anda tentang sifat aplikasi Anda, tetapi tetap saja, Anda mungkin mempertimbangkan solusi alternatif.

FusionIO adalah salah satu alternatif nyata. Coba lihat . Pada $ 10K itu masih jauh lebih murah daripada server high-end. Tulis bandwidth 1,0 GB / s - kedengarannya sangat gila.

Pilihan lain adalah SSD, tentu saja. Untuk berjaga-jaga jika Anda telah melihat spesifikasi untuk Intel® X25-E Extreme SSD:

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

Menempatkan banyak dari mereka ke dalam raid 10 array dapat memberi Anda kinerja yang cukup. Dan dengan USD 400 per 32 GB, itu jauh lebih murah daripada server high-end alternatif.


0

Sejalan dengan saran FusionIO, Anda bisa mendapatkan perangkat yang memungkinkan Anda menghubungkan RAM dinamis ke antarmuka SATA. Sesuatu seperti ini (saya tidak punya pengalaman tentang produk atau perusahaan, itu hanya opsi pertama yang keluar dari pencarian "Google Shopping").

Anda dapat menggunakan beberapa dari ini sebagai sistem file yang dipasang untuk menyimpan data menggunakan logika aplikasi Anda (itu didukung baterai sehingga harus bertahan boot dan pemadaman lainnya) atau Anda dapat menggunakannya sebagai ruang swap dan membiarkan penggunaan kernel memutuskan bagaimana menggunakannya ( meskipun kernel OS biasanya dioptimalkan dengan asumsi semua lokasi swap lebih banyak pesanan lebih lambat dan lebih laten daripada RAM nyata maka ini mungkin, Anda mungkin harus men-tweak secara signifikan untuk mendapatkan penggunaan terbaik dari pengaturan seperti itu).

Opsi FusionIO akan menjadi nilai uang yang lebih baik jika Anda benar-benar membutuhkan sesuatu yang besar, drive RAM semacam ini mungkin lebih baik sebagai kompromi. Mengetahui seberapa baik server yang mampu RAM 128Gb pada motherboard dan beberapa di antaranya dengan populasi penuh 64Gb membandingkan harga dan kinerja dengan server spesialis yang mendukung 256Gb atau lebih secara langsung, saya pergi sebagai latihan untuk pembaca!


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.