Próbuję znaleźć coś, na co po prostu nie mogę znaleźć dobrej odpowiedzi.
Jeśli powiem, że pamięć podręczna REDIS (lub zewnętrzna pamięć podręczna w pamięci) znajduje się w centrum danych, a serwer aplikacji znajduje się w tym samym centrum danych, jaka będzie szybkość połączenia sieciowego (opóźnienie, przepustowość) do odczytu danych między tymi dwiema maszynami?
Czy na przykład „prędkość” sieci będzie nadal co najmniej o rząd wielkości wyższa niż prędkość pamięci RAM, która szuka moich danych poza pamięcią podręczną w REDIS?
Moje ostateczne pytanie brzmi - czy to wszystko siedzi w pamięci na REDIS faktycznie zapewniając jakieś narzędzie? W przeciwieństwie do tego, czy REDIS buforował to wszystko na dysku SSD? Pamięć jest droga. Jeśli sieć rzeczywiście nie jest wąskim gardłem W centrum danych, pamięć ma wartość. W przeciwnym razie nie.
Wydaje mi się, że moje ogólne pytanie brzmi: pomimo ogromnych niewiadomych w centrach danych i niemożności uogólnienia, jak również wariancji, czy mówimy o wystarczających rzędach wielkości między opóźnieniem pamięci w systemie komputerowym a nawet najlepszymi sieciami wewnętrznymi dla DC, które pamięć skrócone opóźnienia nie zapewniają znaczącej poprawy wydajności? Rozumiem, że istnieje wiele zmiennych, ale jak blisko jest? Czy jest tak blisko, że te zmienne mają znaczenie? Weźmy na przykład postawę hiperboliczną, napęd taśmowy jest WOLNIE wolniejszy niż sieć, więc taśma nie jest idealna do pamięci podręcznej.
Odpowiedzi:
Istnieje kilka wersji „wykresów opóźnień, które każdy powinien znać”, takich jak:
Chodzi o to, że w rzeczywistości istnieje coś więcej niż tylko opóźnienie. To kombinacja czynników.
Jakie jest opóźnienie sieci w centrum danych? Opóźnienie, powiedziałbym, że „zawsze” poniżej 1ms. Czy to jest szybsze niż pamięć RAM? Nie. Czy jest blisko pamięci RAM? Nie wydaje mi się
Pozostaje jednak pytanie, czy jest istotne. Czy to jest podstawa, którą musisz znać? Twoje pytanie ma dla mnie sens. Ponieważ wszystko ma swój koszt, powinieneś dostać więcej pamięci RAM, aby wszystkie dane mogły pozostać w pamięci RAM lub od czasu do czasu można czytać z dysku.
Twoim „założeniem” jest to, że jeśli opóźnienie sieci jest większe (wolniejsze) niż prędkość dysku SSD, nie zyskasz, mając wszystkie dane w pamięci RAM, ponieważ będziesz mieć wolne w sieci.
I tak by się wydawało. Ale musisz również wziąć pod uwagę współbieżność. Jeśli otrzymasz 1000 żądań danych jednocześnie, czy dysk może wykonać 1000 równoczesnych żądań? Oczywiście, że nie, więc ile czasu zajmie obsłużenie tych 1000 próśb? W porównaniu do pamięci RAM?
Trudno sprowadzić go do jednego czynnika, takiego jak duże obciążenia. Ale tak, jeśli wykonałeś jedną operację, opóźnienie sieci jest takie, że prawdopodobnie nie zauważysz różnicy między dyskiem SSD a pamięcią RAM.
Podobnie jak do momentu pojawienia się na rynku dysku 12 Gb / s, łącze sieciowe 10 Gb / s nie byłoby przeciążone przez pojedynczy strumień, ponieważ dysk stanowił wąskie gardło.
Pamiętaj jednak, że twój dysk robi wiele innych rzeczy, twój proces nie jest jedynym procesem na komputerze, twoja sieć może przenosić różne rzeczy itp.
Ponadto nie cała aktywność dysku oznacza ruch sieciowy. Zapytanie do bazy danych pochodzące z aplikacji na serwer bazy danych to tylko bardzo minimalny ruch sieciowy. Odpowiedź serwera bazy danych może być bardzo mała (pojedyncza liczba) lub bardzo duża (tysiąc wierszy z wieloma polami). Aby wykonać operację, serwer (serwer bazy danych lub nie) może wymagać wykonania wielu operacji wyszukiwania, odczytu i zapisu na dysku, ale wysyłania bardzo małej ilości danych z powrotem przez sieć. Zdecydowanie nie jest to RAM-dysk sieciowy jeden na jednego.
Do tej pory unikałem pewnych szczegółów twojego pytania - w szczególności części Redis.
OK, to znaczy, że wszystko jest w pamięci. Przepraszamy, ten szybki dysk SSD ci tutaj nie pomoże. Redis może utrwalać dane na dysku, dzięki czemu można je załadować do pamięci RAM po ponownym uruchomieniu. To tylko po to, aby nie „utracić” danych ani nie trzeba ponownie wypełniać zimnej pamięci podręcznej po ponownym uruchomieniu. W takim przypadku musisz użyć pamięci RAM, bez względu na wszystko. Musisz mieć wystarczającą ilość pamięci RAM, aby pomieścić swój zestaw danych. Za mało pamięci RAM i myślę, że twój system operacyjny zużyje
swap
- prawdopodobnie nie jest to dobry pomysł.źródło
Istnieje wiele warstw pamięci podręcznej w systemach komputerowych. Wstawienie jednego w warstwie aplikacji może być korzystne, buforowanie zapytań API i baz danych. I ewentualnie tymczasowe dane, takie jak sesje użytkownika.
Magazyny danych, takie jak Redis, zapewniają taką usługę przez gniazdo sieciowe (szybkie) lub UNIX (jeszcze szybsze), podobnie jak w przypadku bazy danych.
Musisz zmierzyć, jak naprawdę działa aplikacja, ale stwórzmy przykład. Powiedz, że zwykłe żądanie użytkownika wykonuje 5 zapytań API, które zajmują 50 ms każde. 250 ms to opóźnienie wykrywalne przez użytkownika. Kontrast do buforowania wyników. Nawet jeśli pamięć podręczna znajduje się w innej strefie dostępności w mieście (nie jest optymalna), trafienia mają prawdopodobnie najwyżej 10 ms. Co byłoby przyspieszeniem 5x.
W rzeczywistości bazy danych i systemy pamięci mają również własne pamięci podręczne. Zazwyczaj jednak uzyskanie wcześniej pobranego wyniku jest szybsze niż ponowne przejście przez silnik bazy danych i warstwy systemu pamięci masowej. Ponadto warstwa buforująca może znacznie obciążyć bazę danych za nią.
Na przykład takiej pamięci podręcznej w środowisku produkcyjnym nie szukaj dalej na blogu poświęconym architekturze infrastruktury stosu przepełnienia stosu . Setki tysięcy żądań HTTP generujących miliardy trafień Redis są dość znaczące.
Pamięć DRAM przy czasach dostępu 100 ns jest około 100 razy szybsza niż pamięć stała. Jest stosunkowo niedrogi jak na tę wydajność. W przypadku wielu aplikacji nieco więcej pamięci RAM zapewnia cenną szybkość i czas reakcji.
źródło