Opóźnienie klienta
Redis jest wyposażony w architekturę klient-serwer. W niektórych przypadkach wielu klientów może próbować jednocześnie połączyć się z serwerem Redis. Ponieważ Redis jest jednolitą, wprowadzi kolejkę klientów, w której serwer obsługuje jeden proces klienta w danym momencie. Stąd powstało opóźnienie współbieżności. Dlatego kolejni klienci mogą potrzebować czekać.
Opóźnienie polecenia
Każde polecenie zajmuje trochę czasu na wykonanie. Może się różnić od mikrosekund do sekund. Stąd został zidentyfikowany jako źródło opóźnienia. Większość poleceń Redis bierze stałą lub logarytmiczną złożoność czasu. Jednocześnie niektóre polecenia przyjmują złożoność czasu (n). Są znacznie wolniejsze.
Opóźnienie w obie strony
W obie strony to czas potrzebny na uzyskanie odpowiedzi z serwera Redis po wykonaniu polecenia po stronie klienta. Mogą istnieć różne przyczyny opóźnienia w obie strony, takie jak powolność sieci, operacje widelca i stronicowanie systemu operacyjnego.
Monitorowanie opóźnień Redis
Aplikacje w czasie rzeczywistym używają Redis, gdzie wydajność jest kluczowa. Stąd satysfakcjonujące jest spostrzeżenia na temat opóźnień redis, które będą pomocne w podjęciu działań z wyprzedzeniem. Z wersji 2.8.13, Redis dodał komponent monitorowania opóźnień do swojego zestawu narzędzi. Ten komponent jest w stanie rejestrować skoki opóźnień na zdarzenie lub określoną ścieżkę kodu.
Zdarzenia opóźnienia lub ścieżki kodu
Zdarzenia opóźnień (ścieżki kodu) są niczym więcej niż ogólne lub specyficzne operacje wykonywane przez Redis, takie jak polecenia ogólne, wywołania systemu widelców i systemy unlipink. Jeśli chodzi o polecenia ogólne, istnieją dwa główne zdarzenia określone przez Redis.
Zdarzenie „szybkiego komentu” jest zdefiniowane dla poleceń Redis, które mają złożoność czasu O (1) lub O (log n), taką jak Hset, Hincrby, Hlen itp.
Ścieżka kodu „poleceń” mierzy skoki opóźnienia dla innych poleceń o złożoności czasowej O (n).
Włączanie monitorowania opóźnień na serwerze Redis
Wartości opóźnienia zależą od charakteru aplikacji. Jedna aplikacja może rozważyć 10 milisekund jako wysokie opóźnienie. Jednocześnie kolejna aplikacja uważa 1 sekundę za wysoką wartość. Stąd Redis oferuje opcję zdefiniowania progu opóźnienia na serwerze. Domyślnie wartość progowa wynosi 0. Istnieją dwa sposoby ustawienia tej wartości w Redis:
Podkomenda zestawu konfiguracji
Możesz użyć podkomenda zestawu konfiguracji z parametrem i jego wartością do ustawienia wartości progowej, jak pokazano następująco. Tutaj ustawiliśmy to na 500 milisekund.
Zestaw konfiguracji opóźnienia-monitor-progów 500
Modyfikowanie redis.plik CONF
Możemy uruchomić serwer Redis, dostarczając wszystkie konfiguracje w pliku konfiguracyjnym o nazwie „Redis.konf ”. W sekcji „Monitor opóźnienia” możesz odpowiednio ustawić wartość parametru „Monency-Monitor-proghold”.
Zaleca się ponowne uruchomienie serwera Redis po zmodyfikowaniu pliku konfiguracyjnego.
Podkomenda wykresu opóźnienia
Komenda „Opóźnienie” oferuje kilka podkomenda. Jednym z popularnych poleceń jest „wykres opóźnienia”. Rysuje wykres w stosunku do czasu, w którym wydarzenie się wydarzyło. Ten wykres jest oparty na symboli ASCII i zakresu od minimalnej wartości opóźnienia do maksimum. Skoki opóźnień są znormalizowane między opóźnieniami min i maksymalnie.
Użyjmy polecenia „Sleep debug”, aby sprawdzić, w jaki sposób generowane są informacje o wykresie opóźnień.
Składnia
Wykres opóźnienia
Parametr „Event_name” może być dowolnym zdarzeniem zdefiniowanym przez framework monitorowania opóźnień Redis, taki jak polecenie, szybkie, widelca itp.
Przykład 01 - Aplikacje z opóźnieniem poniżej progu
Użyjmy polecenia „Sleep debug”, aby wygenerować niektóre kolce opóźnienia. Będzie się spać, aż do określonego limitu czasu. Ponieważ próg opóźnienia wynosi 500 ms, wystawimy polecenia snu z limitem czasu niższym niż 500 ms.
Sen debugowania .1
Sen debugowania .2
Sen debugowania .3
Następnie wyda polecenie wykresu opóźnienia, jak pokazano następująco:
Polecenie wykresu opóźnienia
To idealnie wygenerowałoby wykres opóźnienia w stylu ASCII dla poprzednich poleceń. Ponieważ czas wykonywania polecenia jest niższy niż wartość progowa we wszystkich trzech poleceń „snu debugowania”, Redis nie wygeneruje skoków opóźnień. Jeśli zakładamy, że jest to nasza aplikacja w czasie rzeczywistym, wszyscy jesteście dobrzy. Nie ma problemów z opóźnieniami.
Wyjście:
Zgodnie z oczekiwaniami, mówi, że na to wydarzenie nie są dostępne żadne próbki.
Przykład 02 - Zastosowania o opóźnieniu większym niż próg
Wydajmy niektóre polecenia debugowania o wartości czasu większej niż wartość progowa. Zwykle lepiej jest zresetować wszystkie poprzednie skoki opóźnienia przed następnym zestawem poleceń, jak pokazano następująco:
Polecenie resetowania opóźnienia
Następnie wydamy polecenia snu debugowania o wartości limitu czasu ponad 500 ms.
Sen debugowania .7
Sen debugowania .9
Debugowanie snu 1
Wyjście:
Zgodnie z oczekiwaniami wykres w stylu ASCII został wygenerowany przez Redis. „_” Oznacza najniższą wartość opóźnienia, a symbol „#” oznacza szczyt najwyższego opóźnienia, który miał miejsce w ciągu ostatnich 20 sekund. Ten wykres można interpretować pionowo. Każda kolumna dotyczy zdarzenia, które miało miejsce w ciągu ostatnich sekund, minut lub dni. Najbardziej lewą kolumnę można interpretować jako wydarzenie, które wydarzyło się 20 sekund temu, następna nastąpiła 14 sekund temu, a ostatnia kolumna oznacza zdarzenie, które miało miejsce 4 sekundy temu.
Wniosek
Redis jest używany jako magazyn danych do aplikacji w czasie rzeczywistym. Dlatego aspekty wydajności są kluczowe. Framework monitorowania opóźnień jest komponentem oferowanym przez Redis w celu monitorowania skoków opóźnień dla predefiniowanych zdarzeń. „Polecenie wykresu opóźnienia” można użyć do generowania skoków opóźnień w stylu ASCII dla danego ramki czasowej. Służy do identyfikacji trendów opóźnień w aplikacji i z wyprzedzeniem podejmowania niezbędnych działań. Skoki opóźnienia zostaną wygenerowane, jeśli czas opóźnienia jest większy niż wartość progowa. Wartość progowa opóźnienia może różnić się w zależności od jednego zastosowania w oparciu o naturę.