Wydanie systemu DBMS Redis 7.0

Ukazała się premiera systemu DBMS Redis 7.0, należącego do klasy systemów NoSQL. Redis zapewnia funkcje przechowywania danych klucz/wartość, wzmocnione obsługą formatów danych strukturalnych, takich jak listy, skróty i zestawy, a także możliwość uruchamiania procedur obsługi skryptów po stronie serwera w Lua. Kod projektu jest dostarczany na licencji BSD. Dodatkowe moduły oferujące zaawansowane możliwości dla użytkowników korporacyjnych, takie jak RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, od 2019 roku dostarczane są w ramach autorskiej licencji RSAL. Projekt GoodFORM, który ostatnio przeżywa stagnację, próbował kontynuować rozwój otwartych wersji tych modułów w ramach licencji AGPLv3.

W przeciwieństwie do systemów przechowywania w pamięci, takich jak Memcached, Redis zapewnia trwałe przechowywanie danych na dysku i gwarantuje, że baza danych pozostanie nienaruszona w przypadku awarii. Kod źródłowy projektu rozpowszechniany jest na licencji BSD. Biblioteki klienckie są dostępne dla najpopularniejszych języków, w tym Perl, Python, PHP, Java, Ruby i Tcl. Redis obsługuje transakcje, które pozwalają na wykonanie grupy poleceń w jednym kroku, zapewniając spójność i spójność (polecenia z innych żądań nie mogą zakłócać) w wykonaniu danego zestawu poleceń, a w przypadku problemów umożliwiając wycofanie zmiany. Wszystkie dane są w pełni buforowane w pamięci RAM.

Do zarządzania danymi służą takie polecenia, jak zwiększanie/zmniejszanie, standardowe operacje na listach i zbiorach (suma, przecięcie), zmiana nazwy klawiszy, wielokrotny wybór i funkcje sortowania. Obsługiwane są dwa tryby przechowywania: okresowa synchronizacja danych na dysku oraz utrzymywanie dziennika zmian na dysku. W drugim przypadku zapewnione jest całkowite bezpieczeństwo wszelkich zmian. Istnieje możliwość zorganizowania replikacji danych master-slave na kilka serwerów, realizowanej w trybie nieblokującym. Dostępny jest także tryb przesyłania wiadomości „publikuj/subskrybuj”, w którym tworzony jest kanał, z którego wiadomości są dystrybuowane do klientów w ramach subskrypcji.

Kluczowe zmiany w Redis 7.0:

  • Dodano obsługę funkcji po stronie serwera. W przeciwieństwie do wcześniej obsługiwanych skryptów w języku Lua, funkcje nie są przypisane do aplikacji i mają na celu zaimplementowanie dodatkowej logiki rozszerzającej możliwości serwera. Funkcje przetwarzane są nierozerwalnie z danymi i w powiązaniu z bazą danych, a nie z aplikacją, łącznie z replikacją i przechowywaniem w pamięci trwałej.
  • Zaproponowano drugą edycję listy ACL, która umożliwia kontrolę dostępu do danych w oparciu o klucze oraz pozwala na zdefiniowanie różnych zestawów reguł dostępu do poleceń z możliwością powiązania kilku selektorów (zestawów uprawnień) z każdym użytkownikiem. Do każdego klucza można przypisać określone uprawnienia, np. można ograniczyć dostęp wyłącznie do odczytu lub zapisu określonego podzbioru kluczy.
  • Dostępna jest partycjonowana (fragmentowana) implementacja paradygmatu dystrybucji komunikatów Publikuj-Subskrybuj działająca w klastrze, w której komunikat jest wysyłany do określonego węzła, do którego podłączony jest kanał komunikatów, po czym komunikat ten jest przekierowywany do pozostałych zawartych węzłów w odłamku. Klienci mogą odbierać wiadomości subskrybując kanał, zarówno łącząc się z węzłem głównym, jak i z węzłami drugorzędnymi sekcji. Sterowanie odbywa się za pomocą poleceń SSUBSCRIBE, SUNSUBSCRIBE i SPUBLISH.
  • Dodano obsługę przetwarzania podpoleceń w większości kontekstów.
  • Dodano nowe polecenia:
    • ZMPOP, BZMPOP.
    • LMPOP, BLMPOP.
    • SINTERCARD, ZINTERCARD.
    • SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
    • CZAS WAŻNOŚCI, CZAS WAŻNOŚCI.
    • EVAL_RO, EVALSHA_RO, SORT_RO.
    • FUNKCJA *, FCALL, FCALL_RO.
    • DOKUMENTY POLECEŃ, LISTA POLECEŃ.
    • HISTOGRAM OPÓŹNIENIA.
    • FRAGMENTY KLASTRA, ŁĄCZA KLASTRA, KLASTER DELSLOTSRANGE, KLASTER ADDSLOTSRANGE.
    • BRAK EKSMICJI KLIENTA.
    • OSUSZANIE ACL.
  • Dodano możliwość jednoczesnego przetwarzania wielu konfiguracji w jednym wywołaniu CONFIG SET/GET.
  • Do narzędzia redis-cli dodano opcje „-json”, „-2”, „-scan”, „-functions-rdb”.
  • Domyślnie dostęp klienta do ustawień i poleceń mających wpływ na bezpieczeństwo jest wyłączony (przykładowo wyłączone są polecenia DEBUG i MODULE, zabroniona jest zmiana konfiguracji z flagą PROTECTED_CONFIG). Redis-cli nie wysyła już poleceń zawierających wrażliwe dane do pliku historii.
  • Wprowadzono dużą część optymalizacji mających na celu zwiększenie wydajności i zmniejszenie zużycia pamięci. Na przykład zużycie pamięci zostało znacznie zmniejszone podczas włączania trybu klastra, podczas wykonywania operacji kopiowania przy zapisie oraz podczas pracy ze skrótami i kluczami zset. Ulepszona logika opróżniania danych na dysk (wywołanie fsync). Zmniejszono liczbę pakietów sieciowych i wywołań systemowych podczas wysyłania odpowiedzi do klienta. Poprawiono wydajność replikacji.
  • Naprawiono lukę CVE-2022-24735 w środowisku wykonywania skryptów Lua, która pozwala na podstawienie własnego kodu Lua i osiągnięcie jego wykonania w kontekście innego użytkownika, w tym z wyższymi uprawnieniami.
  • Naprawiono lukę CVE-2022-24736, która umożliwia awarię procesu serwera redis z powodu wyłuskiwania wskaźnika NULL. Atak odbywa się poprzez załadowanie specjalnie zaprojektowanych skryptów Lua.

Źródło: opennet.ru

Dodaj komentarz