To jest pytanie dotyczące projektowania oprogramowania
Pracowałem nad następującą regułą prędkości
cache memory > memory > disk > network
Każdy krok jest 5–10 razy większy od poprzedniego (np. Pamięć podręczna jest 10 razy szybsza niż pamięć główna).
Wygląda na to, że gigabit Ethernet ma opóźnienie mniejsze niż dysk lokalny. Może więc operacje odczytu z dużej zdalnej bazy danych w pamięci są szybsze niż odczyty z dysku lokalnego. To jest jak herezja dla starego timera, takiego jak ja. (Właśnie spędziłem trochę czasu budując lokalną pamięć podręczną na dysku, aby uniknąć konieczności robienia połączeń sieciowych - stąd moje pytanie)
Czy ktoś ma jakieś doświadczenie / liczby / porady w tej dziedzinie?
I tak, wiem, że jedynym prawdziwym sposobem na to jest budowanie i mierzenie, ale zastanawiałem się nad ogólną zasadą.
edycja :
Oto interesujące dane z pierwszej odpowiedzi:
Podróż w obie strony w tym samym centrum danych 500 000 ns
Wyszukiwanie dysku 10 000 000 ns
To dla mnie szok; moim modelem mentalnym jest to, że okrążenie sieci jest z natury wolne. I nie jest - jest 10 razy szybszy niż dysk w obie strony.
Jeff Attwood opublikował ten dobry blog na temat http://blog.codinghorror.com/the-infinite-space-between-words/
źródło
Odpowiedzi:
Oto kilka liczb, których prawdopodobnie szukasz, cytowanych przez Jeffa Deana, członka Google:
Pochodzi z jego prezentacji zatytułowanej Projekty, lekcje i porady dotyczące budowania dużych systemów rozproszonych, którą można uzyskać tutaj:
Dyskusja została wygłoszona podczas Large-Scale Distributed Systems and Middleware (LADIS) 2009 .
Inne informacje
Mówi się, że gcc -O4 wysyła twój kod do Jeffa Deana w celu przepisania.
źródło
Istnieje wiele zmiennych, jeśli chodzi o sieć vs. dysk, ale ogólnie dysk jest szybszy.
Magistrale SATA 3.0 i SAS mają przepustowość 6 Gb / s, w porównaniu do sieci 1 Gb / s minus obciążenie protokołu. Dzięki RAID-10 15k SAS sieć będzie wydawać się zbyt wolna. Ponadto dysponujesz pamięcią podręczną dysku, a także możliwością użycia dysków półprzewodnikowych, które w zależności od scenariusza mogą również zwiększyć prędkość. Losowy a sekwencyjny dostęp do danych odgrywa rolę, podobnie jak rozmiar bloku, w którym dane są przesyłane. Wszystko zależy od aplikacji używanej do uzyskania dostępu do dysku.
Teraz nawet nie poruszyłem faktu, że cokolwiek, co transportujesz przez sieć, i tak idzie na dysk lub z niego przychodzi ... więc ... znowu dysk jest szybszy.
źródło
Zależy to od tego, czy zasób sieciowy ma dane, o które prosisz, są łatwo dostępne (w pamięci lub podobnej), czy też po prostu odczyta je z dysku.
W każdym razie przepustowość może być wyższa w niektórych przypadkach, ale uważam, że opóźnienia będą wyższe.
źródło
IMX dysk jest jeszcze szybszy. Teoretyczna szybkość transferu w sieci jest wysoka, ale w praktyce nie zbliżasz się do tego.
Około dwa lata temu miałem problemy z dyskiem twardym na moim laptopie i DMA wyszedł. To spowodowało, że dysk twardy był znacznie wolniejszy, a zwłaszcza wolniejszy niż sieć. Ale po przejściu na inny komputer wróciłem do pierwotnego stanu dysku twardego szybciej niż Internet.
źródło
Moje doświadczenie z sieciami gigabitowymi polega na tym, że mając odpowiedni serwer, możesz pokonać lokalną wydajność pod względem przepustowości i opóźnień. Zobacz Testy sieciowe: Czy uzyskujemy wydajność Gigabit?
Dla wszystkich praktycznych celów zaleciłbym traktowanie pamięci sieciowej i lokalnej jako równoważnej i używanie tylko pamięci podręcznych.
Standardowe zastrzeżenie, jak wspomniałeś, jest prawdą, ponieważ nie ma ogólnych zasad; i że tak naprawdę przez większość czasu należy pracować z dobrze skonfigurowanymi serwerami i używać wskaźników do oceny najlepszej metody przesyłania danych.
Jeśli używasz niskiej klasy komputera z wolnym dyskiem twardym, prawie na pewno szybsze będzie użycie gigabitowego połączenia sieciowego z serwerem z szybką macierzą pamięci.
Podobnie, jeśli pracujesz z dwoma maszynami o prawie identycznym sprzęcie, to opóźnienie i obciążenie sieci przyspieszyłyby lokalną pamięć masową; to naprawdę zdrowy rozsądek.
źródło
To zależy. Jeśli twoje operacje wejścia / wyjścia są głównie losowe, to ich płaska przepustowość prawdopodobnie nie jest tak duża w porównaniu z dostępną przepustowością sieci. Jednak większość ruchu sieciowego generowana jest ostatecznie przez procesy obejmujące operacje we / wy. Jeśli zestaw roboczy dowolnego procesu generującego ruch sieciowy zmieści się w pamięci podręcznej, przepustowość dysku nie będzie ograniczona. Jeśli przebije pamięć podręczną, dysk stanie się wąskim gardłem.
Pracuję na systemach hurtowni danych, a kanoniczne zapytanie DW to skanowanie tabeli. Jeśli zapytanie trafi w więcej niż kilka procent wierszy w tabeli faktów (lub partycji), wówczas skanowanie tabeli lub partycji przy użyciu sekwencyjnych operacji we / wy będzie bardziej wydajne niż plan kwerendy o dostępie swobodnym z wykorzystaniem wyszukiwania indeksu i wyszukiwania.
Pamięć sieciowa (tj. SAN) zwykle nie działa dobrze w przypadku obciążeń przesyłania strumieniowego, chyba że zostanie odpowiednio dostrojona. Jeśli sieć SAN jest używana w środowisku konsolidacji ogólnego przeznaczenia, prawie na pewno zostanie dostrojona dość nieoptymalnie do przesyłania strumieniowego, kolczastego obciążenia, takiego jak hurtownia danych. Widziałem, że biała księga dostawcy sugeruje, że potrzebujesz około trzykrotnie większej liczby dysków, aby uzyskać taką samą przepustowość w sieci SAN, która nie jest dostrojona do przesyłania strumieniowego we / wy, jak dla tego, który jest.
Moje doświadczenie się z tym zgadza. W rzeczywistości nigdy nie wdrożyłem hurtowni danych w środowisku konsolidacyjnym, w którym nie mogłem znacznie szybciej uruchomić tego samego procesu ETL na komputerze stacjonarnym. Miałem też przedstawicieli handlowych od jednego z głównych dostawców urządzeń SAN, którzy twierdzą, że wielu ich klientów korzysta z pamięci bezpośredniego podłączania do systemu DW, ponieważ sieci SAN nie są wystarczająco szybkie.
Pamięć sieciowa jest co najmniej o rząd wielkości droższa na IOPS niż pamięć masowa z bezpośrednim podłączeniem w przypadku obciążeń o dostępie swobodnym i bliższa o dwa rzędy wielkości droższa w przypadku przesyłania strumieniowego.
źródło
Mam z tego doświadczenie, że gdy masz połączenie 1 Gb i próbujesz pobrać plik, twój dysk twardy jest zwykle wąskim gardłem. Należy jednak pamiętać, że najpierw należy skonfigurować połączenie, co również wymaga czasu. Tak więc wysyłanie dużych fragmentów sieci danych może być szybsze niż dysk.
źródło
Tak, ogólnie, sieci są teraz szybsze niż dyski twarde, ale z czasem może się to zmienić.
Myślę, więc jestem
Gdy aplikacja jest uruchomiona, oznacza to, że komputer hosta działa, podczas gdy praca w sieci wymaga wspólnego protokołu, sprawdzania dostępności sieci równorzędnej, bezpieczeństwa kanału ... a jeśli sieci partnerskie korzystają z różnych platform, trudniej jest osiągnąć to, co można zrobić na pojedyncza maszyna.
Wolę patrzeć na to w kategoriach kompromisów, niż na to, kto jest najsilniejszy ...
źródło
Musisz opisać dokładny przypadek użycia tego porównania. Dyski twarde mają czas wyszukiwania + szybkość transferu i pamięć podręczną. Sieci mają opóźnienia, szybkość przesyłania i obciążenie protokołu ...
Sądzę jednak, że twoja oryginalna pamięć podręczna> pamięć> dysk> sieć jest ogólnie prawdziwa
źródło
Dysk jest połączony z CPU za pośrednictwem magistrali SCSI, SAS lub IDE. Która jest siecią wewnętrzną z określonym protokołem - SCSI lub ATAPI. Ethernet został zaprojektowany do pracy na większych odległościach i może być znacznie wolniejszy niż SAS / SCSI / IDE. Który z nich jest szybszy, zależy od tego, które technologie porównujesz. Jeśli porównasz 20-letni dysk twardy laptopa z 10 Gb / s pamięci RAM, zwycięzcą zawsze będzie sieć. A kiedy kupujesz pamięć, musisz porównać ją z ceną i łatwością zarządzania.
źródło
Cóż, istnieje Light Peak, który dąży do prędkości sieci 100 GB / s, która zbliża się do prędkości pamięci RAM. Oczywiście sieć może dostarczać dane tylko tak szybko, jak nadawca może wygenerować dane, tj. Jeśli nadawca odczytuje dane z dysku twardego, wówczas odbiornik otrzyma dane z taką samą prędkością jak odczyt dysku, nawet przy superszybka sieć.
źródło
Należy pamiętać, że zależy to od sieci. Powiedzmy, że na przykład jesteś odpowiedzialny za wydajność w witrynie internetowej. Ta strona internetowa jest oczywiście połączona z serwerem bazy danych przez sieć lokalną, a także jest połączona z internautami przez Internet, który jest również rodzajem sieci.
W wielu przypadkach można utworzyć dedykowane łącze między serwerem WWW a serwerem bazy danych za pośrednictwem statycznych adresów IP i kabla krosowego lub automdx, aby utrzymać opóźnienie i zapewnić dedykowane łącze dla ruchu, ponieważ chcesz, aby był on bardzo szybki. Serwer bazy danych wykonuje wszelkiego rodzaju prace, aby zachować jak najwięcej db w pamięci, aw wielu przypadkach często udaje się dla całej zawartości plus kilka indeksów. Zapytania do tej bazy danych będą równie szybkie lub nawet szybsze niż zapytania na dysk.
Z drugiej strony niektóre technologie sieciowe (stan wyświetlania formularzy internetowych asp.net, patrzę na ciebie) lubią przesyłać wiele informacji do iz przeglądarki klienta jako pamięć podręczną (swego rodzaju). Jeśli jest to lokalne połączenie LAN (i w obronie formularza asp.net jest to przez większość czasu tak jest), nie jest tak źle, ale w publicznym Internecie może to absolutnie zabić wydajność, tak że często lepiej jest popchnąć to zamiast tego na bazę danych lub dysk lokalny.
źródło
Osobiście uważam, że należy wziąć pod uwagę kilka czynników. Na przykład, jak szybka jest pamięć lub dysk, do którego uzyskujesz dostęp lokalny, w porównaniu do tego, do którego miałbyś dostęp przez sieć? Jeśli zdalne dane znajdowały się na bardzo szybkim dysku SSD i szybciej niż sieć Gigabit zainstalowana od końca do końca, pilot może być szybszy w przypadku dużych plików przesyłanych strumieniowo.
Jednak jeśli losowo uzyskiwałeś dostęp do małych jednostek danych, a sieć nie była bezbłędna lub miałeś wiele przeskoków i więcej niż tylko dostęp do niej, założę się, że lokalna pamięć podręczna jest szybsza nawet na bardzo mechanicznym napędzie dyskowym prawie 100 % czasu. Ale przywołujesz interesujący punkt i jak długo będzie potrzebne lokalne przechowywanie czegokolwiek, jeśli prędkość sieci będzie nadal rosła?
źródło