Економічний спосіб створення сервера з великою кількістю оперативної пам’яті


10

У мене є програма Java, де масштабованість в першу чергу обмежена оперативною пам'яттю, яку я хотів би запустити на одному або декількох серверах у центрі обробки даних. Де я повинен шукати серверне обладнання, здатне вмістити 100 ГБ - 512 Гб або більше оперативної пам’яті? Я не фахівець з таких питань, тому я дійсно не знаю, з чого почати.

Це потрапляння на територію суперкомп'ютера (6 цифр і більше), чи я можу отримати такий сервер за низькі 5-значні долари?

Кілька приміток на основі деяких питань нижче:

  • Так, я дуже намагався продумати способи усунення цієї вимоги щодо масштабованості, і жоден варіант не є дійсно можливим. Додаток вимагає дуже швидкого випадкового доступу до дуже великого обсягу даних, зберігання на жорсткому диску (можливо, через базу даних) не перерве це.
  • Я впевнений, що JVM може, принаймні теоретично, розширити масштаб. Я регулярно запускаю свій код з 10 Гб, виділеним на Sun 1.6 JVM, без помітних проблем.

Відповіді:


6

Незвичайні вимоги іноді виграють від незвичайних рішень. Впевнені, що ви можете надати 6 фігур Sun, Dell або HP і зробити це з ним, але це не єдина гра в місті.

Для рішень для одного коробки обсяг до 128 ГБ є дуже дешевим (32 х 4 Гб ~ 3 000 доларів США), навіть із материнськими платами для домашніх технологій, які коштують менше 1000 доларів. (не знущайтеся над творцями. Якщо це досить добре для Google ...)

256 ГБ - це серйозно дорожче (32х8 Гб ~ 18 000 дол. США), а крім того ...

Як альтернативу, ви розглядали Infiniband (10Gbps) взаємопов'язані дешеві коробки як альтернативу?

Ви можете побудувати 4-вузловий, 16-ти процесор (64 ядра), 512 ГБ, і все ще змінити з 25 000 доларів США.

Крім того, ви матимете додаткові переваги вигідної деградації, якщо ваша програма може працювати на трьох машинах, якщо один з них не працює, і, можливо, отримати лінійне масштабування вартістю до 8 вузлів (просто додайте ще 4 вузли). У цей момент ви дивитесь на класну 128-ядерну, 1 ТБ оперативної пам’яті за <50 000 доларів США .

Перш ніж відхилити пропозицію Infiniband як екзотичну, це не для типу машини, про яку ви просите. наприклад 141 з 500 найпопулярніших суперкомп'ютерів побудовано таким чином, у тому числі 4 з 10 найкращих ( http://top500.org/connfam/8 )


Я не знаю, чи Infiniband - це правильне рішення (я не маю досвіду з цим), але (у 2011 році) я би назвав систему, що працює на Java з 100 ГБ + таран на одному сервері, екзотикою. Настав час розглянути екзотичні рішення.
Майк Міллер

-1 за те, що насправді, дуже вводить в оману. Більшість суперкомп'ютерів Top500 використовують InfiniBand для забезпечення низької латентності мережі, а НЕ для забезпечення єдиного цілісного образу над RDMA - це використання є дуже екзотичне. Щоб скористатися цим, вам потрібно використовувати односистемний образ або vSMP продукт. Хоча ви можете використовувати для цього щось на кшталт Kerrighed або OpenSSI, ці пропозиції базуються на модифікованих ядрах і не можуть розділити єдине зображення процесу на вузли. Тільки ScaleMP, що є дуже дорогим рішенням, може надати реальне узгоджене системне зображення на декількох серверах, підключених до RDMA.
jgoldschrafe

3

Добре, дивись. Ви не збираєтеся знайти сервер, який має такий вид оперативної пам’яті, який ви шукаєте, принаймні не той, який не потребує власної електричної мережі.

Чому б не скористатися масштабованим підходом і не використовувати згадані? Ви можете поширити пам'ять навколо різних машин по всій мережі. Дані ніколи не повинні торкатися дискового накопичувача, і при такій ультрашвидкій мережі, яку ви можете придбати за гроші, про які ви говорите, затримка навряд чи буде проблемою.

Ось певний клієнт для Java: http://www.whalin.com/memcached/

І ось вступ до запам’ятовування, якщо ви не знайомі: http://www.danga.com/memcached/

Подивіться на це. Це буде набагато рентабельніше, ніж створення однієї машини-монстра з шаленою кількістю оперативної пам’яті. Крім того, якщо ви робите щось, що вимагає такої вимоги, це, ймовірно, місія критична, і вам не потрібна жодна точка відмови.


Гарна ідея. Мені це майже подобається більше, ніж моя власна ідея.
phuzion

Це нісенітниця. Піщаний міст, який був запущений минулого тижня в серверній частині, може скласти до 768 Гб в пакеті 1U сервера. Якщо ви хочете дотримуватися деталей Westmere, ви можете з'єднати два сервери IBM x3850 або подібні між собою за допомогою посилань QPI і живити їх потужністю менше 4000 Вт. (Це такий самий слід потужності, що і чотири 2U-сервери в тому ж просторі стійок.) Імовірно, AMD має і деякі конкурентоспроможні пропозиції в цьому просторі.
jgoldschrafe

4
@jgoldschrafe Про це запитали (і відповіли) 3 роки тому.
Метт Сіммонс

2

4 або 8 розеткових серверів Opteron, таких як HP DL585 або DL785 або Sun X4600, можуть займати велику кількість пам'яті в діапазоні 128-256 ГБ. Хоча вони і не дешеві, вони, звичайно, не входять до шестизначних цінників; 8-сторонній 32-ядерний Sun X4600 з 256 ГБ оперативної пам’яті складає близько 35 000 доларів на своєму веб-сайті, і це приблизно стільки, скільки отримує цей тип системи. Ви, ймовірно, виявите, що можете отримати систему дещо менше, ніж ціна, вказана на веб-сайті.

Незважаючи на те, що 4Gb DIMM доступні, вони, як правило, мають високу цінову премію, тому підходити до системи, змішаної з ними, буде значно дорожче.

Якщо ви хочете використовувати систему такого типу, вам знадобиться 64-бітний O / S. Переконайтеся, що ви також отримали 64-розрядний JVM і переконайтеся, що він добре працює з вашою програмою.


Я думаю, ви маєте на увазі 64-розрядний JVM, а не 54-розрядний JVM: P
tegbains

2

Я не повторюватиму апаратні пропозиції (які звучать), але ви, можливо, захочете поглянути на Terracotta, щоб побачити, чи підходить він для вашої програми.

http://www.terracotta.org/


2

Будьте абсолютно обережні, які такі розміри оперативної пам’яті. Ми збільшили масштаб машини HP до 64 Гб (HP заявив, що машина може зайняти 128 ГБ), але лише після додавання додаткової дошки стояка, охолоджуючого валу і так далі (після багато спілкування з HP).
Тільки тому, що машина задана до n ГБ, це не означає, що вона буде працювати без додаткових змін. У нашому випадку не всі звичайні модулі пам'яті працювали, тому що вони нагрілися, працювали лише дуже конкретні модулі.


1

Вартість оперативної пам’яті не масштабується лінійно до великих розмірів. Тільки тому, що я можу придбати 1 Гб DIMM за 15 доларів, не означає, що я можу отримати сервер з 128 ГБ всього за 1 920 доларів… для початку ви не знайдете материнську плату з 128 слотами DIMM в ній.

Вище певного розміру (~ 8-16 Гб) ви починаєте бачити материнські плати, які потребують повністю буферизації DIMM (FB-DIMM), що обійдеться вам значно дорожче за ГБ, ніж стандартна пам'ять на робочому столі.

Ми регулярно використовуємо машини з 128 ГБ пам’яті в них, і ціна за останні роки значно знизилася, але я не маю жодних нинішніх чисел ... ні досвіду того, наскільки добре JVM би масштабувався до такого розміру пам’яті .


1

Насправді у вас є багато варіантів, просто зі списку HP у вас є лезо BL680c, яке може займати 128 ГБ, їх DL580 / 585 - 256 ГБ, а DL785 - 512 ГБ. Деякі з IBM коштують до 256 ГБ, як і один Dell.


0

Я думаю, що ви почнете стикатися з проблемами на загальному рівні в 64 Гб на традиційному обладнання. Якщо ви зможете масштабувати звідти, то було б нормально, але я гадаю, що набагато вигіднішим рішенням буде поставити під сумнів вашу архітектуру. Звичайно, я кажу, що не знаючи, що ти робиш, але я просто кидаю це.


На жаль, не існує простого способу обійти вимогу оперативної пам’яті, оскільки програма вимагає дуже швидкого випадкового доступу до великої кількості даних - зберігання даних на диску просто не скоротить її :-(

0

Чи було б рішення для Amazon EC2 життєздатним для вас? Це, безумовно, було би найбільш економічним рішенням.


Не боїться - максимальний об'єм оперативної пам’яті, який може підтримувати сервер EC2, становить 14 Гб, востаннє я все-таки перевіряв.

0

Скажімо, ви могли б помістити стільки пам’яті на сервер (якщо я не помиляюся, Linux для стандартного обладнання обмежений 64 Гб, але я не впевнений).

У більшості операційних систем JVM обмежений нагромадженням близько 1,4 ГБ-1,6 ГБ, частково через необхідну суміжну пам'ять, а частково через обмеження операційної системи.

Отже, додаткова оперативна пам’ять не допоможе вам збільшити масштаб однієї програми, вона лише дозволить запустити кілька примірників програми. Однак тоді вам знадобиться кілька ядер і зіткнетеся з різними іншими проблемами.

Для чого вам потрібно стільки оперативної пам’яті? Можливо, ви зможете знайти бази даних, які можуть зберігатися в пам'яті або використовувати накопичувач RAM, але я не знаю про JVM, який би дозволив вам зберігати стільки речей в пам'яті.


Я майже впевнений, що JVM не обмежений нагромадженням 1,6 Гб, я регулярно запускаю його з 10 Гб і більше з JVM Sun, звичайно, він повинен бути на 64-бітній машині.

Я не погоджуюсь. Дивіться: unixville.com/~moazam І кілька запитань тут про ТАК. Я не впевнений, що 64-розрядні JVM, AFAIK, які наразі не підтримуються на моєму 64-бітовому mac, не знаю про 64-бітний Linux / Win.

Я використовую 64-бітний JVM, насправді я використовую його на Mac. Apple випустила Java 1.6 для 64-бітових Macs досить давно.

Я б не знав, оскільки Eclipse для мене не працює на 1.6 ... Але нормально, я це приймаю. Яку максимальну оперативну пам’ять ви можете встановити на своїй машині?

Я весь час використовую 64 бітові jvms з набором 16 ГБ

0

Типовий спосіб отримати більше системної пам’яті - отримати більше систем. Якщо пам’ять справді вузьким місцем, то це не стільки, скільки пам’яті у вас, а наскільки добре пов’язані ваші дані з вашими процесорами. Вам потрібно буде масштабувати багато речей для того, щоб зробити вам багато добра.

Для уточнення: Просто додавання пари нулів до системної пам'яті, ймовірно, не збирається робити те, що, на вашу думку, буде. Що ви знайдете, це те, що тепер, коли весь ваш набір даних вписується в пам'ять або навіть трохи більший її фрагмент, ви наткнетесь на якесь інше вузьке місце, наприклад, вимкнення кешу.

Правильний спосіб масштабування вашої системи відбувається повільно. Якщо ви зараз працюєте, скажімо, у чотирьохядерній системі з 8 гігами оперативної пам’яті, спершу профіліруйте чорт у вашому додатку, щоб побачити, де він реально витрачає час, а потім спробуйте зіткнутись до 12 чи 16 гіг оперативної пам’яті та подивіться, як результати профілювання змінилися.

Справжнє запитання полягає в тому, навіщо вам знадобитися приблизно в 100 разів більше пам'яті системи, ніж інші ресурси, ніж те, що є загальнодоступним. Якщо ваша форма доступу до даних якимось чином передбачувана, то, що вам слід зробити, це збільшити пропускну здатність диска, декілька рейдових контролерів з декількома смугастими дисками досягнуть цього.

Якщо модель доступу до даних дійсно, насправді випадкова, можливо, є можливість для кращого оптимізованого алгоритму.


0

Напевно, для цього вам потрібен спеціалізований сервер.

Спробуйте подивитися ES7000 від Unisys. Опис там, мабуть, трохи застарів.

Він може підтримувати до 512 Гб оперативної пам’яті. Тут використовується відомий O / S, як Windows та Linux Enterprise.

Це обійдеться вам в $ 30K за стандартної конфігурації, але з Itanium і всіми дзвіночками він може піднятися до ~ 600K.

Завдяки цій великій кількості оперативної пам’яті ви можете зберігати безліч гарячих даних, не торкаючись місця на диску.


0

Очевидно, вам потрібні 64-бітні операційні системи, але ви не в суперкомп'ютерній території. Як приклад, PowerEdge R900 і R905 Dell доступні з 256 ГБ оперативної пам’яті та використовують звичайні стандартні процесори Intel Xeon / AMD Opteron та запускають Linux, Solaris або Windows 2003 та 2008.

Звичайно, покупка оперативної пам’яті безпосередньо в Dell не дуже економічно вигідна (вони хочуть ~ 35 000 доларів США за 32 х 8 ГБ, тоді як ви можете отримати її вже приблизно за 23 000 доларів США, можливо менше), але, з іншого боку, ви можете захотіти щоб гарантувати належну підтримку, якщо ви купуєте сервер 40 000 доларів США (ви не очікували, що 256 Гб оперативної пам’яті буде дешевим, чи не так? Якщо 128 ГБ також нормально, ви можете зекономити ~ 12 000 доларів США).

Я не маю досвіду, яку операційну систему вибрати, хоча я працюю на 100+ ГБ Java, як правило, не те, що я роблю :)


0

Як щодо повністю нестандартного рішення: База даних. Я знаю, ви сказали, що це буде занадто повільно, але це базується на тому, що його розміщує. Як щодо розміщення його на масиві RAID0, достатнього з цих.

400 доларів за гаджет, Pricewatch перераховує мікросхеми на рівні 55 доларів (я не перевіряв сумісність) за 4 Гб, так що це ще 440 доларів для пам'яті. Це отримує 32 Гб за $ 840. (Теоретично пристрій може приймати чіпси 8 Гб на загальну суму 64 Гб, але чіпи поки не підтримуються.)

RAID0 4 з них, і ви знаходитесь в нижньому кінці свого діапазону за трохи більше $ 3000 + звичайна коробка. 16 з них отримують найвищий рівень вашого асортименту за $ 14 тис.

Незалежно від того, чи це корисно, чи ні, це також зводиться до характеру ваших даних - ці пристрої є мінливими і вичерпають їх резервний акумулятор за кілька годин, хоча вони можуть створити резервну копію до CF-картки.


0

Я великий шанувальник підходу "багатьох дешевих серверів". Чи задумалися ви, можливо, запускаєте подібний процес на платформі Евкаліпта, доступній на Ubuntu 9.04? Цілком можливо, що ви можете запускати подібну програму на декількох комп'ютерах у власній спеціалізованій гігабітній мережі з декількома серверами, що працюють 8, 16 або 32 Гб оперативної пам’яті, і масштабувати лінійно, додаючи ще дешеві сервери, коли вам це потрібно.


0

Я читав ваш коментар щодо характеру вашої заявки, але все ж ви можете розглянути альтернативні рішення.

FusionIO - це одна реальна альтернатива. Просто подивіться . У 10K $ це все ще набагато дешевше, ніж сервер високого класу. Ширина смуги запису 1,0 Гб / с - це звучить справді божевільно.

Ще один варіант - SSD, звичайно. На всякий випадок, якщо ви побачили характеристики для 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

Якщо розмістити їх у масиві raid 10, ви зможете отримати достатню продуктивність. А з 400 доларів за 32 ГБ це набагато дешевше, ніж альтернативні сервери високого класу.


0

Аналогічно пропозиції FusionIO, ви можете отримати пристрої, які дозволяють підключити динамічну оперативну пам’ять до інтерфейсу SATA. Що - щось на зразок цього (я не маю ніякого досвіду продукту або компанії, це тільки перший варіант , який вийшов з «Google Shopping» пошук).

Ви можете використовувати пару з них як змонтовану файлову систему для кешування даних за допомогою логіки вашого додатка (він підтримується батареєю, тому слід пережити завантаження та інші відключення), або ви можете використовувати їх як обмінний простір і нехай використання ядра вирішує, як їх використовувати ( хоча, оскільки ядра ОС зазвичай оптимізовані, припускаючи, що всі місця розміщення більше на порядок повільніші та латентніші, ніж реальна оперативна пам'ять, тоді це буде, ймовірно, вам доведеться істотно налаштувати його, щоб найкраще використовувати таке розташування).

Варіант FusionIO стане кращим співвідношенням ціни і якості, якщо вам дійсно потрібно щось таке велике, такий тип оперативної пам'яті може бути кращим як компроміс. Розробляючи, наскільки сервер, здатний на 128 Гб оперативної пам’яті на материнській платі, і декілька таких з повною 64 Гб заселеною програмою порівнює цінність та ефективність роботи з спеціалізованим сервером, який підтримує 256 Гб або більше безпосередньо, я залишаю вправу для читача!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.