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.
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.
sumber
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.
sumber
Saya tidak akan mengulangi saran perangkat keras (yang bagus) tetapi Anda mungkin ingin melihat Terracotta untuk melihat apakah itu cocok untuk aplikasi Anda.
http://www.terracotta.org/
sumber
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.
sumber
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. .
sumber
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.
sumber
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.
sumber
Apakah solusi EC2 Amazon layak untuk Anda? Ini tentu akan menjadi solusi yang paling hemat biaya.
sumber
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.
sumber
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.
sumber
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.
sumber
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 :)
sumber
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.
sumber
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.
sumber
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:
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.
sumber
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!
sumber
3 tahun setelah questio, segalanya jauh lebih mudah.
Saya telah mencari beberapa konfigurasi Siliconmechanics .
Cara termurah adalah menggunakan platform AMD dengan 32 dimms - 512GB - $ 11,940 .
Alternatif, tetapi jauh lebih mahal per GB adalah platform Intel dengan 64 dimms - 1TB - $ 48,769 .
sumber