Redis 6: szybka baza danych, pamięć podręczna i broker komunikatów

Podobnie jak wielu, możesz pomyśleć o Redis jako tylko pamięci podręcznej. Ten punkt widzenia jest nieaktualny.

Zasadniczo Redis jest magazynem struktury danych NoSQL w pamięci, który może pozostać na dysku. Może działać jako baza danych, pamięć podręczna i broker komunikatów. Redis ma wbudowaną replikację, skrypty Lua, eksmisję LRU, transakcje i różne poziomy trwałości na dysku. Zapewnia wysoką dostępność za pośrednictwem Redis Sentinel i automatyczne partycjonowanie za pomocą Redis Cluster.

Podstawowym modelem danych Redis jest para klucz-wartość, ale obsługiwanych jest wiele różnych rodzajów wartości: ciągi, listy, zestawy, sortowane zestawy, skróty, strumienie, dzienniki HyperLog i mapy bitowe. Redis obsługuje również indeksy geoprzestrzenne z zapytaniami o promień i strumieniami.

[Również na: Jak Redis porysował się i swędzi - i na zawsze zmienił bazy danych]

Do Redis typu open source Redis Enterprise dodaje funkcje zapewniające dodatkową szybkość, niezawodność i elastyczność, a także bazę danych w chmurze jako usługę. Redis Enterprise skaluje się liniowo do setek milionów operacji na sekundę, oferuje aktywną i aktywną dystrybucję globalną z lokalnymi opóźnieniami, oferuje Redis on Flash do obsługi dużych zestawów danych kosztem infrastruktury dyskowej bazy danych i zapewnia 99,999% czasu pracy na -w trwałości i jednocyfrowych sekundach przełączania awaryjnego.

Ponadto Redis Enterprise rozszerza podstawową funkcjonalność Redis o obsługę dowolnej metody modelowania danych za pomocą modułów, takich jak RediSearch, RedisGraph, RedisJSON, RedisTimeSeries i RedisAI oraz umożliwia wykonywanie operacji między modułami i rdzeniem. Wszystko to jest zapewnione przy zachowaniu opóźnienia bazy danych poniżej jednej milisekundy.

Funkcje i przypadki użycia Core Redis

Co to znaczy, że Redis może teraz działać jako baza danych, pamięć podręczna i broker komunikatów? Jakie są przypadki użycia obsługiwane przez te role?

Pamięć podręczna to klasyczna funkcja Redis. Zasadniczo Redis znajduje się przed dyskową bazą danych i zapisuje zapytania i wyniki; aplikacja najpierw sprawdza pamięć podręczną Redis pod kątem zapisanych wyników i wysyła zapytanie do dyskowej bazy danych o wyniki, których nie ma obecnie w pamięci podręcznej. Biorąc pod uwagę wskaźnik odpowiedzi Redis poniżej milisekundy, jest to zwykle duża wygrana w zakresie wydajności aplikacji. Liczniki czasu wygaśnięcia i wykluczenie LRU (ostatnio używane) z pamięci podręcznej Redis pomagają utrzymać aktualność pamięci podręcznej i efektywnie wykorzystywać pamięć.

Sklep sesja jest ważnym elementem nowoczesnych aplikacji internetowych. To wygodne miejsce do przechowywania informacji o użytkowniku i jej interakcjach z aplikacją. W architekturze farmy sieci web hostowanie magazynu sesji bezpośrednio na serwerze sieciowym wymaga „przyklejania” się użytkownika do tego samego serwera zaplecza dla przyszłych żądań, co może ograniczyć moduł równoważenia obciążenia. Korzystanie z dyskowej bazy danych do przechowywania sesji eliminuje potrzebę wiązania sesji z pojedynczym serwerem WWW, ale wprowadza dodatkowe źródło opóźnienia. Korzystanie z Redis (lub dowolnej innej szybkiej bazy danych w pamięci) jako magazynu sesji często skutkuje architekturą aplikacji sieci Web o małych opóźnieniach i wysokiej przepustowości.

Redis może działać jako broker komunikatów przy użyciu trzech różnych mechanizmów, a jednym z ważnych przypadków użycia Redis jako brokera komunikatów jest działanie jako spoiwo między mikrousługami. Redis ma niski narzut mechanizm powiadamiania o publikowaniu / subskrybowaniu, który ułatwia wysyłanie i zapomnienie wiadomości, ale nie może działać, gdy usługa docelowa nie nasłuchuje. Aby uzyskać bardziej trwałą kolejkę komunikatów podobną do Kafki, Redis używa strumieni, które są parami klucz-wartość uporządkowanymi według sygnatury czasowej w jednym kluczu. Redis obsługuje również podwójnie połączone listy elementów przechowywanych pod jednym kluczem, które są przydatne jako kolejka FIFO (First-In / First-Out). Mikrousługi mogą i często używają Redis jako pamięci podręcznej, a także jako brokera komunikatów, chociaż pamięć podręczna powinna działać w oddzielnym wystąpieniu Redis z kolejki komunikatów.

Podstawowa replikacja umożliwia skalowanie Redis bez korzystania z technologii klastrowej wersji Redis Enterprise. Replikacja Redis wykorzystuje model lider-podążający (nazywany również master-slave), który jest domyślnie asynchroniczny. Klienci mogą wymusić replikację synchroniczną za pomocą polecenia WAIT, ale nawet to nie zapewnia spójności usługi Redis we wszystkich replikach.

Redis obsługuje skrypty Lua po stronie serwera, co pozwala programistom na rozszerzenie bazy danych bez pisania modułów C lub kodu po stronie klienta. Podstawowe transakcje Redis umożliwiają klientowi zadeklarowanie sekwencji poleceń jako jednostki nieprzerywalnej przy użyciu poleceń MULTI i EXEC do zdefiniowania i uruchomienia sekwencji. To nie to samo, co transakcje relacyjne z wycofywaniem.

Redis ma różne poziomy trwałości na dysku, które użytkownik może wybrać. Trwałość RDB (plik bazy danych Redis) polega na wykonywaniu migawek bazy danych w określonym momencie w określonych odstępach czasu. Trwałość AOF (plik tylko do dołączania) rejestruje każdą operację zapisu odebraną przez serwer. Aby zapewnić maksymalne bezpieczeństwo danych, można używać zarówno trwałości RDB, jak i AOF.

Redis Sentinel, sam w sobie system rozproszony, zapewnia wysoką dostępność dla Redis. Monitoruje instancje master i repliki, powiadamia, jeśli coś jest nie tak, i automatycznie przełącza awaryjne, jeśli master przestanie działać. Służy również jako dostawca konfiguracji dla klientów.

Klaster Redis umożliwia uruchomienie instalacji Redis, w której dane są automatycznie dzielone na wiele węzłów Redis. Klaster Redis zapewnia również pewien stopień dostępności podczas partycji, chociaż klaster przestanie działać, jeśli większość modułów głównych stanie się niedostępna.

Jak wspomniałem wcześniej, Redis to magazyn klucz-wartość, który obsługuje ciągi, listy, zestawy, sortowane zestawy, hashe, strumienie, HyperLogLogs i bitmapy jako wartości. Jednym z najprostszych i najczęstszych przypadków użycia jest używanie wartości całkowitych jako liczników. Na poparcie tego INCR (inkrementacja), DECR (dekrementacja) i inne pojedyncze operacje są niepodzielne, a zatem bezpieczne w środowisku wielu klientów. W Redis manipulowanie kluczami spowoduje ich automatyczne utworzenie, jeśli jeszcze nie istnieją.

> USTAW połączenia 10

dobrze

> Połączenia INCR

(liczba całkowita) 11

> Połączenia INCR

(liczba całkowita) 12

> Połączenia DEL

(liczba całkowita) 1

> Połączenia INCR

(liczba całkowita) 1

> Połączenia INCRBY 100

(liczba całkowita) 101

> Połączenia DECR

(liczba całkowita) 100

> Połączenia DECRBY 10

(liczba całkowita) 90

Inne rodzaje struktur wartości również mają własne przykłady w samouczku Try Redis. Samouczek był w trakcie konserwacji, kiedy sam go wypróbowałem; Spodziewam się, że zostanie to wkrótce naprawione, ponieważ Redis Labs zaangażowało się w coś, co pierwotnie było wysiłkiem społeczności.

Istnieje wiele modułów dodatkowych dla Redis, w tym (w porządku malejącym według popularności) moduł sieci neuronowej, wyszukiwanie pełnotekstowe, SQL, typ danych JSON i baza danych grafów. Licencje na moduły są ustalane przez autorów. Niektóre moduły współpracujące z Redis to głównie moduły dla Redis Enterprise.

Ulepszenia Redis Enterprise

Korzystając z architektury klastra „nic nie współdzielonego”, Redis Enterprise zapewnia nieskończone liniowe skalowanie bez nakładania nieliniowych kosztów ogólnych w architekturze skalowanej w poziomie. Możesz wdrożyć wiele wystąpień Redis w jednym węźle klastra, aby w pełni wykorzystać wielordzeniową architekturę komputera. Firma Redis Enterprise wykazała możliwość skalowania do setek milionów operacji na sekundę przy pięciu dziewiątkach (99,999%) bezawaryjności. Redis Enterprise wykonuje automatyczne ponowne dzielenie na fragmenty i ponowne równoważenie przy zachowaniu małych opóźnień i wysokiej przepustowości dla obciążeń transakcyjnych.

Redis Enterprise oferuje wdrażanie typu aktywny-aktywny dla globalnie rozproszonych baz danych, umożliwiając jednoczesne operacje odczytu i zapisu na tym samym zestawie danych w wielu lokalizacjach geograficznych. Aby uczynić to bardziej wydajnym, Redis Enterprise może używać bezkonfliktowych replikowanych typów danych (CRDT) w celu zachowania spójności i dostępności danych. Riak i Azure Cosmos DB to dwie inne bazy danych NoSQL obsługujące CRDT.

Chociaż istnieje obszerna literatura akademicka na temat CRDT, przyznaję, że nie do końca rozumiem, jak i dlaczego one działają. Krótkie podsumowanie tego , co robią, jest takie, że CRDT mogą rozwiązać niespójności bez interwencji, korzystając z matematycznie wyprowadzonego zestawu reguł. CRDT są cenne w przypadku dużych ilości danych, które wymagają współdzielonego stanu i mogą wykorzystywać serwery rozproszone geograficznie, aby zmniejszyć opóźnienia dla użytkowników.

Jedną z głównych różnic między Redis i Redis Enterprise jest to, że Redis Enterprise oddziela ścieżkę danych od zarządzania klastrem. Poprawia to działanie obu komponentów. Ścieżka danych jest oparta na wielu wielowątkowych serwerach proxy o zerowym opóźnieniu, które znajdują się w każdym z węzłów klastra, aby maskować złożoność systemu. Menedżer klastra to funkcja zarządzająca, która zapewnia takie możliwości, jak ponowne hartowanie, równoważenie, automatyczne przełączanie awaryjne, rozpoznawanie szafy, zaopatrywanie bazy danych, zarządzanie zasobami, konfiguracja trwałości danych oraz tworzenie kopii zapasowych i odtwarzanie. Ponieważ menedżer klastra jest całkowicie oddzielony od składników ścieżki danych, zmiany w jego składnikach oprogramowania nie mają wpływu na składniki ścieżki danych.

Redis on Flash to funkcja Redis Enterprise, która może drastycznie obniżyć koszt sprzętu dla Redis. Zamiast płacić nosem za terabajty pamięci RAM lub ograniczać rozmiar zestawów danych Redis, możesz użyć Redis on Flash, aby umieścić często używane gorące dane w pamięci i zimniejsze wartości w pamięci Flash lub pamięci trwałej, takiej jak Intel Optane DC.

Moduły Redis Enterprise obejmują RedisGraph, RedisJSON, RedisTimeSeries, RedisBloom, RediSearch i RedisGears. Wszystkie moduły Redis Enterprise współpracują również z oprogramowaniem Redis typu open source.

Co nowego w Redis 6?

Redis 6 to duże wydanie, zarówno w wersji open source, jak i komercyjnej wersji Redis Enterprise. Nowością na temat wydajności jest użycie wątkowego wejścia / wyjścia, które daje Redis 6 dwukrotnie większą prędkość w porównaniu z Redis 5 (co nie było garbem). To przenosi się do Redis Enterprise, który ma dodatkowe ulepszenia szybkości dla klastrów, jak opisano powyżej.

Dodanie list kontroli dostępu (ACL) nadaje Redis 6 pojęcie użytkowników i umożliwia programistom pisanie bezpieczniejszego kodu. Redis Enterprise 6 opiera się na listach ACL, aby oferować kontrolę dostępu opartą na rolach (RBAC), co jest wygodniejsze dla programistów i administratorów baz danych.

Główne nowe funkcje w Redis 6

Oprogramowanie open source Redis 6.0

  • Listy kontroli dostępu (ACL)
  • Ulepszone eksmisje
  • Gwintowane wejścia / wyjścia
  • Protokół RESP3

Redis Enterprise 6.0

  • Kontrola dostępu oparta na rolach (RBAC)
  • Przedłużenie aktywny-aktywny
  • HyperLogLog
  • Strumienie

Redis Enterprise 6.0 dodaje obsługę typu danych Strumienie w aktywnych-aktywnych bazach danych. Umożliwia to zarówno wysoką dostępność, jak i małe opóźnienia podczas jednoczesnego odczytu i zapisu do i ze strumienia w czasie rzeczywistym w wielu centrach danych w wielu lokalizacjach geograficznych.

RedisGears to dynamiczna struktura, która umożliwia programistom pisanie i wykonywanie funkcji implementujących przepływy danych w Redis. Pozwala użytkownikom pisać skrypty Pythona do uruchamiania w Redis i umożliwia wiele przypadków użycia, w tym zapis z tyłu (Redis działa jako front-end do dyskowej bazy danych), przetwarzanie danych w czasie rzeczywistym, przesyłanie strumieniowe i przetwarzanie zdarzeń, operacje które krzyżują się ze strukturami i modelami danych oraz transakcjami opartymi na sztucznej inteligencji.

RedisAI to model obsługujący silnik, który działa w Redis. Może przeprowadzać wnioskowanie z modelami PyTorch, TensorFlow i ONNX. RedisAI może działać na procesorach i procesorach graficznych i umożliwia takie przypadki użycia, jak wykrywanie oszustw, wykrywanie anomalii i personalizacja.

Instalowanie Redis

Możesz zainstalować Redis, pobierając i kompilując źródłowe tarball lub pobierając obraz Docker z Docker Hub. Redis można skompilować i używać w systemach Linux, MacOS, OpenBSD, NetBSD i FreeBSD. Repozytorium kodu źródłowego znajduje się na GitHub. W systemie Windows można uruchomić Redis w kontenerze Docker lub w podsystemie Windows dla systemu Linux (WSL), który wymaga systemu Windows 10.

Możesz zainstalować Redis Enterprise w systemie Linux lub w kontenerach Docker. Pliki do pobrania dla systemu Linux mają postać pakietów binarnych (DEB lub RPM w zależności od wersji Linuksa) i skryptów powłoki Bash do instalacji klastra. Skrypty sprawdzają wymagane cztery rdzenie i 15 GB pamięci RAM do instalacji.

Redis Enterprise Cloud

Najszybszym sposobem zainstalowania Redis Enterprise jest nie instalowanie go wcale, ale raczej uruchomienie go w chmurze Redis Enterprise Cloud. Kiedy próbowałem tego samemu do celów recenzji, początkowo otrzymałem instancję Redis 5; Musiałem poprosić o aktualizację do Redis 6.