Opłacalny sposób na zbudowanie serwera z dużą ilością pamięci RAM


10

Mam aplikację Java, w której skalowalność jest przede wszystkim ograniczona przez pamięć RAM, którą chciałbym uruchomić na jednym lub kilku serwerach w centrum danych. Gdzie powinienem szukać sprzętu serwerowego, który może pomieścić 100 GB - 512 GB lub więcej pamięci RAM? Nie jestem ekspertem w takich sprawach, więc naprawdę nie wiem od czego zacząć.

Czy to dostaje się na terytorium superkomputera (6 cyfr lub więcej), czy też mogę uzyskać taki serwer za niskie 5-cyfrowe dolary?

Kilka uwag na podstawie poniższych pytań:

  • Tak, starałem się wymyślić sposoby na usunięcie tego wymogu skalowalności, ale nie, tak naprawdę nie jest to opcja. Aplikacja zasadniczo wymaga bardzo szybkiego losowego dostępu do bardzo dużych ilości danych, przechowywanie na dysku twardym (być może za pośrednictwem bazy danych) go nie wycina.
  • Jestem prawie pewien, że JVM może, przynajmniej teoretycznie, zwiększyć tak daleko. Regularnie uruchamiam swój kod z 10 GB przydzielonej do Sun 1.6 JVM bez zauważalnych problemów.

Odpowiedzi:


6

Nietypowe wymagania czasami korzystają z nietypowych rozwiązań. Oczywiście, możesz dać 6 figurek Sunowi, Dellowi lub HP i skończyć z tym, ale to nie jedyna gra w mieście.

W przypadku rozwiązań z pojedynczym pudełkiem uzyskanie do 128 GB jest bardzo tanie (32 x 4 GB ~ 3000 USD), nawet w przypadku płyt głównych homebrew, które kosztują mniej niż 1000 USD. (nie kpij z twórców. Jeśli to wystarczy dla Google ...)

256 GB jest znacznie droższe (32 x 8 GB ~ 18 000 USD), a ponadto ...

Czy rozważałeś alternatywnie tanie skrzynki Infiniband (10 Gb / s) jako alternatywę?

Możesz w ten sposób zbudować 4 węzły, 16 procesorów (64 rdzenie), maszynę 512 GB i nadal mieć zmianę z 25 000 USD.

Ponadto zyskałbyś dodatkowe korzyści wynikające z bezkompromisowej degradacji, jeśli Twoja aplikacja może działać na 3 komputerach, jeśli jeden z nich ulegnie awarii, i być może uzyskasz liniowe skalowanie kosztu do 8 węzłów (wystarczy dodać 4 kolejne węzły). W tym momencie patrzysz na fajną 128-rdzeniową bestię RAM o pojemności 1 TB za <50 000 USD .

Zanim odrzucisz propozycję Infiniband jako egzotyczną, nie jest to typ maszyny, o którą prosisz. np. 141 z 500 najlepszych superkomputerów zostało zbudowanych w ten sposób, w tym 4 z 10 najlepszych ( http://top500.org/connfam/8 )


Nie wiem, czy Infiniband jest właściwym rozwiązaniem (nie mam z tym doświadczenia), ale (w 2011) nazwałbym system z Javą 100 GB + RAM na jednym serwerze, aby był egzotyczny. Czas zastanowić się nad egzotycznymi rozwiązaniami.
Mike Miller,

-1 za bycie naprawdę wprowadzającym w błąd. Większość superkomputerów w Top500 korzysta z InfiniBand w celu zapewnienia sieci o niskim opóźnieniu, a nie w celu zapewnienia jednego spójnego obrazu przez RDMA - takie użycie jest naprawdę egzotyczne. Aby z tego skorzystać, musisz użyć obrazu pojedynczego systemu lub produktu vSMP. Chociaż do tego można użyć czegoś takiego jak Kerrighed lub OpenSSI, te oferty są oparte na zmodyfikowanych jądrach i nie mogą dzielić pojedynczego obrazu procesu na węzły. Tylko ScaleMP, które jest bardzo drogim rozwiązaniem, może zapewnić prawdziwy spójny obraz systemu na wielu serwerach podłączonych do RDMA.
jgoldschrafe

3

W porządku, patrz. Nie znajdziesz serwera, którego szukasz pamięci RAM, a przynajmniej takiego, który nie wymaga własnej sieci elektrycznej.

Dlaczego nie zastosować skalowalnego podejścia i nie używać pamięci memcached? Możesz rozdzielić pamięć na różne maszyny w sieci. Dane nigdy nie muszą dotykać dysku, a dzięki tak ultraszybkiej sieci, którą można kupić za pieniądze, o których mówisz, opóźnienia wcale nie będą stanowić problemu.

Oto klient memcached dla java: http://www.whalin.com/memcached/

A oto wprowadzenie do memcached na wypadek, gdybyś nie był zaznajomiony: http://www.danga.com/memcached/

Spójrz na to. Będzie to o wiele bardziej opłacalne niż budowanie pojedynczej potwornej maszyny z niesamowitą ilością pamięci RAM. Poza tym, jeśli robisz coś, co ma tego rodzaju wymagania, prawdopodobnie ma to kluczowe znaczenie dla misji i nie potrzebujesz ani jednego punktu awarii.


Dobry pomysł. Prawie lubię to bardziej niż własny pomysł.
phuzion

To kompletna bzdura. Sandy Bridge, który został uruchomiony w zeszłym tygodniu w części serwerowej, może skalować do 768 GB w pakiecie serwerowym 1U. Jeśli chcesz trzymać się części Westmere, możesz połączyć dwa serwery IBM x3850 lub podobne za pomocą łączy QPI i zasilać je mocą mniejszą niż 4000 watów. (To taki sam ślad mocy, jak cztery serwery 2U w tym samym miejscu w szafie). Prawdopodobnie AMD ma również konkurencyjne oferty w tym miejscu.
jgoldschrafe

4
@jgoldschrafe Na to pytanie (i odpowiedź) udzielono 3 lata temu.
Matt Simmons,

2

Serwery Opteron z 4 lub 8 gniazdami, takie jak HP DL585 lub DL785 lub Sun X4600, mogą zajmować duże ilości pamięci w zakresie 128-256 GB. Chociaż nie są tanie, z pewnością nie są w 6 cyfrowych metkach; 8-drożny, 32-rdzeniowy Sun X4600 z 256 GB list pamięci RAM w cenie około 35 000 $ na ich stronie internetowej, a to prawie tyle, ile zyskuje ten system. Prawdopodobnie przekonasz się, że możesz uzyskać system za nieco mniej niż cena katalogowa pokazana na stronie internetowej.

Mimo że moduły DIMM 4 Gb są dostępne, zwykle mają wyższą cenę, więc przejście na system z nimi maksymalny byłby znacznie droższy.

Jeśli chcesz użyć systemu tego typu, potrzebujesz 64-bitowego systemu operacyjnego. Upewnij się, że masz także 64-bitową maszynę JVM i sprawdź, czy działa ona dobrze z aplikacją.


Myślę, że masz na myśli 64-bitową
maszynę


2

Bądź absolutnie ostrożny, jakie takie rozmiary pamięci RAM. Skalowaliśmy maszynę HP do 64 GB (HP stwierdziło, że maszyna może wziąć 128 GB), ale dopiero po dodaniu dodatkowej płyty nośnej, wału chłodzącego i tak dalej (po wielu rozmowach z HP).
Tylko dlatego, że maszyna ma zająć do n GB, nie oznacza to, że będzie działać bez dodatkowych zmian. W naszym przypadku nie działały wszystkie normalne moduły pamięci, ponieważ były gorące, działały tylko bardzo specyficzne moduły.


1

Koszt pamięci RAM nie jest skalowany liniowo do dużych rozmiarów. To, że mogę kupić moduł DIMM o pojemności 1 GB za 15 USD, nie oznacza, że ​​mogę uzyskać serwer o pojemności 128 GB za zaledwie 1920 USD ... na początek nie znajdziesz płyty głównej ze 128 gniazdami DIMM.

Powyżej pewnego rozmiaru (~ 8 do 16 GB) zaczynają się pojawiać płyty główne wymagające pełnego buforowania modułów DIMM (FB-DIMM), co kosztuje znacznie więcej na GB niż standardowa pamięć pulpitu.

Regularnie używamy maszyn z 128 GB pamięci, a cena znacznie spadła w ostatnich latach, ale nie mam żadnych aktualnych liczb ... ani żadnego doświadczenia, jak dobrze JVM skalowałby się do tego rozmiaru pamięci .


1

W rzeczywistości masz wiele opcji, tylko z listy HP masz blade BL680c, które mogą przyjąć 128 GB, ich DL580 / 585 mogą zająć 256 GB, a ich DL785 może przyjąć 512 GB. Niektóre komputery IBM mają pojemność do 256 GB, podobnie jak jeden Dell.


0

Myślę, że zaczniesz napotykać problemy z rezerwą przy 64 GB na tradycyjnym sprzęcie. Jeśli możesz skalować się stamtąd, byłbyś w porządku, ale sądzę, że o wiele bardziej opłacalnym rozwiązaniem byłoby zakwestionowanie twojej architektury. To prawda, że ​​mówię to bez wiedzy o tym, co robicie, ale po prostu to wyrzucam.


Niestety nie ma łatwego sposobu na obejście wymagań dotyczących pamięci RAM, ponieważ aplikacja wymaga bardzo szybkiego losowego dostępu do dużych ilości danych - przechowywanie danych na dysku po prostu ich nie wycina :-(

0

Czy rozwiązanie EC2 firmy Amazon byłoby dla Ciebie opłacalne? Z pewnością byłoby to najbardziej opłacalne rozwiązanie.


Obawiam się, że nie - maksymalna ilość pamięci RAM, którą serwer EC2 może obsłużyć, to 14 GB, przy ostatnim sprawdzaniu.

0

Powiedzmy, że możesz zmieścić tyle pamięci w serwerze (jeśli się nie mylę, Linux na standardowym sprzęcie jest ograniczony do 64 GB, ale nie jestem pewien).

W większości systemów operacyjnych JVM jest ograniczona do przestrzeni sterty wynoszącej około 1,4 GB-1,6 GB, częściowo dlatego, że wymagana jest ciągła pamięć, a częściowo z powodu ograniczeń systemu operacyjnego.

W związku z tym dodatkowa pamięć RAM nie pomogłaby w skalowaniu jednej aplikacji, pozwoliłaby na uruchomienie tylko wielu instancji aplikacji. Będziesz jednak potrzebował wielu rdzeni i napotkasz różne inne problemy.

Po co ci tyle pamięci RAM? Być może będziesz w stanie znaleźć bazy danych, które można przechowywać w pamięci lub użyć napędu RAM, ale nie znam JVM, który pozwoliłby ci przechowywać tyle rzeczy w pamięci.


Jestem prawie pewien, że JVM nie jest ograniczony do miejsca na stosie 1,6 GB, regularnie uruchamiam go z 10 GB i więcej z JVM firmy Sun, oczywiście musi to być komputer 64-bitowy.

Nie zgadzam się. Zobacz: unixville.com/~moazam I kilka pytań tutaj na SO. Nie jestem pewien co do 64-bitowych maszyn JVM, AFAIK, który nie jest obecnie obsługiwany na moim 64-bitowym komputerze Mac, nie wiem o 64-bitowym systemie Linux / Win.

Używam 64-bitowej maszyny JVM, w rzeczywistości korzystam z niej na komputerze Mac. Apple wydało Javę 1.6 dla komputerów Mac 64-bitowych dość dawno temu.

Nie wiedziałbym, ponieważ Eclipse nie działa dla mnie na 1.6 ... Ale dobrze, akceptuję to. Jaka jest maksymalna pamięć RAM, którą możesz umieścić na swoim komputerze?

Cały czas używam 64-bitowych plików Jvms ze stosami 16 GB

0

Typowym sposobem na uzyskanie większej ilości pamięci systemowej jest uzyskanie większej liczby systemów. Jeśli pamięć jest naprawdę wąskim gardłem, to nie tyle ile masz pamięci, ale jak dobrze Twoje dane są połączone z procesorami. Będziesz musiał skalować wiele rzeczy, aby zrobić ci dużo dobrego.

Aby to wyjaśnić, dodanie kilku zer do pamięci systemowej prawdopodobnie nie pozwoli zrobić tego, co myślisz. Przekonasz się, że teraz, gdy cały zestaw danych mieści się w pamięci lub nawet w nieco większym jej fragmencie, napotkasz inne wąskie gardło, takie jak unieważnienie pamięci podręcznej.

Właściwy sposób skalowania systemu jest powolny. Jeśli obecnie pracujesz, powiedzmy, na 4-rdzeniowym systemie z 8 koncertami pamięci RAM, najpierw wyprofiluj swoją aplikację, aby zobaczyć, gdzie naprawdę spędza czas, a następnie spróbuj podnieść do 12 lub 16 koncertów pamięci RAM i zobacz, jak to zrobić wyniki profilowania uległy zmianie.

Prawdziwe pytanie brzmi: dlaczego potrzebowałbyś około 100 razy więcej pamięci systemowej w porównaniu z innymi zasobami, niż to, co jest powszechnie dostępne. Jeśli wzorzec dostępu do danych jest w jakiś sposób przewidywalny, powinieneś zrobić zwiększenie przepustowości dysku, osiągnie to kilka kontrolerów RAID z kilkoma dyskami w paski.

Jeśli wzorzec dostępu do danych jest naprawdę, naprawdę losowy, prawdopodobnie istnieje miejsce na zoptymalizowany algorytm.


0

Prawdopodobnie potrzebujesz do tego specjalnego serwera.

Spróbuj spojrzeć na ES7000 od Unisys. Opis jest prawdopodobnie nieco przestarzały.

Może obsługiwać do 512 GB pamięci RAM. Korzysta ze znanych systemów operacyjnych, takich jak Windows i Linux Enterprise.

Będzie to kosztowało ~ 30 000 $ za standardową konfigurację, ale w przypadku Itanium i wszystkich dzwonków i gwizdków może wzrosnąć do ~ 600 000 $.

Przy tak dużej pamięci RAM możesz przechowywać dużo gorących danych bez dotykania miejsca na dysku.


0

Oczywiście potrzebujesz 64-bitowych systemów operacyjnych, ale nie jesteś na terytorium superkomputera. Na przykład PowerEdge R900 i R905 firmy Dell są dostępne z 256 GB pamięci RAM i używają zwykłych procesorów Intel Xeon / AMD Opteron i działają pod kontrolą systemów Linux, Solaris lub Windows 2003 i 2008.

Oczywiście kupowanie pamięci RAM bezpośrednio w firmie Dell nie jest bardzo opłacalne (chcą ~ 35 000 USD za 32 x 8 GB, podczas gdy można je uzyskać już za około 23 000 USD, być może mniej), ale z drugiej strony możesz chcieć aby upewnić się, że masz odpowiednie wsparcie, jeśli kupujesz serwer za 40 000 USD (nie spodziewałeś się, że 256 GB pamięci RAM będzie tanie, prawda? Jeśli 128 GB również jest OK, możesz zaoszczędzić ~ 12 000 USD).

Nie mam jednak doświadczenia, na którym systemie operacyjnym wybrać, uruchamianie Java 100+ GB zazwyczaj nie jest czymś, co robię :)


0

A może kompletnie gotowe rozwiązanie: baza danych. Wiem, że powiedziałeś, że to będzie zbyt wolne, ale to zależy od tego, co go hostuje. Co powiesz na hosting go na macierzy RAID0 wystarczającej ich liczby.

400 $ za gadżet, Pricewatch podaje chipy za 55 $ (nie sprawdziłem kompatybilności) za 4GB, więc to kolejne 440 $ za pamięć. To daje 32 GB za 840 USD. (Teoretycznie urządzenie może pobierać układy 8 GB, co daje w sumie 64 GB, ale żadne układy nie są jeszcze obsługiwane).

RAID0 4 z nich i jesteś w dolnej części swojego zakresu za nieco ponad 3000 $ + zwykłe pudełko. 16 z nich dostaje najwyższy poziom twojego zasięgu za 14 000 $.

To, czy jest to użyteczne, czy nie, sprowadza się również do charakteru danych - urządzenia te są niestabilne i wyczerpią swoją baterię zapasową w ciągu kilku godzin, chociaż mogą wykonać kopię zapasową na karcie CF.


0

Jestem wielkim fanem podejścia „wielu tanich serwerów”. Czy zastanawiałeś się może nad uruchomieniem tego rodzaju procesu na platformie Eucalyptus, dostępnej na Ubuntu 9.04? Możliwe jest, że możesz uruchomić ten program na kilku komputerach we własnej dedykowanej sieci gigabitowej z wieloma serwerami z 8, 16 lub 32 GB pamięci RAM i skalować w sposób liniowy, dodając więcej tanich serwerów, gdy ich potrzebujesz.


0

Przeczytałem twój komentarz na temat charakteru twojej aplikacji, ale nadal możesz rozważyć alternatywne rozwiązania.

FusionIO to jedna prawdziwa alternatywa. Tylko spójrz . Przy cenie 10 000 $ jest to nadal znacznie tańsze niż wysokiej klasy serwer. Przepisz przepustowość 1,0 GB / s - to naprawdę szalone.

Inną opcją jest oczywiście dysk SSD. Na wypadek, gdybyś widział specyfikację dysku SSD Intel® X25-E Extreme:

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

Umieszczenie kilku z nich w tablicy RAID 10 może zapewnić wystarczającą wydajność. A przy 400 USD za 32 GB jest o wiele tańszy niż alternatywne serwery wysokiej klasy.


0

W podobny sposób jak sugestia FusionIO, możesz uzyskać urządzenia, które pozwalają podłączyć dynamiczną pamięć RAM do interfejsu SATA. Coś w tym stylu (nie mam doświadczenia z produktem ani firmą, jest to tylko pierwsza opcja, która pojawiła się podczas wyszukiwania w „Zakupach Google”).

Możesz użyć kilku z nich jako zamontowanych systemów plików do buforowania danych przy użyciu logiki aplikacji (jest ona zasilana bateryjnie, więc powinna przetrwać rozruch i inne awarie) lub możesz użyć ich jako przestrzeni wymiany i pozwolić, aby jądro zdecydowało, jak z nich korzystać ( chociaż ponieważ jądra systemu operacyjnego są zwykle optymalizowane, zakładając, że wszystkie lokalizacje wymiany są wolniejsze o wiele rzędów wielkości i bardziej utajone niż prawdziwa pamięć RAM, prawdopodobnie będzie to musiało zostać znacznie poprawione, aby jak najlepiej wykorzystać takie ustawienie).

Opcja FusionIO będzie bardziej opłacalna, jeśli naprawdę potrzebujesz czegoś tak dużego, ten rodzaj pamięci RAM może być lepszy jako kompromis. Sprawdzając, jak dobrze serwer zdolny do 128 GB pamięci RAM na płycie głównej i kilka z pełnymi 64 GB zapełnionymi porównuje pod względem ceny i wydajności do specjalistycznego serwera, który obsługuje bezpośrednio 256 GB lub więcej, zostawiam ćwiczenie dla czytelnika!


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.