Projekt Redis wrócił do korzystania z otwartej licencji. Wprowadzono Redis 8.0

Firma Redis Ltd ogłosiła zmianę polityki licencyjnej projektu. Od wydania Redis 8.0 kod projektu stał się dostępny na wolnej licencji AGPLv3. Przejście na otwartą licencję było możliwe dzięki powrotowi do firmy Salvatore Sanfilippo, twórcy bazy danych Redis. Po odejściu z Redis Ltd Salvatore opracował zestaw rozszerzeń wektorowych (Vector Sets), które chciał włączyć do Redis, ale chciał, aby stworzony przez niego kod był dostarczany na otwartej licencji. Sanfilippo udało się przekonać współpracowników o zasadności przywrócenia otwartego charakteru projektu oraz poprawy interakcji ze społecznością.

Rowan Trollope, dyrektor Redis Ltd, oświadczył, że dokonana w ubiegłym roku zmiana na licencje proprietarne osiągnęła swój cel, ponieważ firmy AWS i Google założyły forka, zaczęły uczestniczyć w wspólnym rozwoju i dzielić się swoimi dotychczasowymi osiągnięciami. Zmiana licencji zaszkodziła jednak relacjom ze społecznością, które firma teraz będzie starała się przywrócić, wracając do dostarczania kodu na wolnej licencji.

Po przejściu na licencje proprietarne rozwój otwartej bazy kodu Redis kontynuowany był w forkach Valkey (fork rozwijany przy udziale Amazon, Google, Oracle, Ericsson i Snap), Redict (fork od twórcy linii poleceń Sway i języka Hare), Garnet (baza danych od Microsoftu, kompatybilna z Redis) oraz KeyDB (wysokowydajny fork Redis 5 od Snapchata). W repozytoriach dystrybucyjnych Debian 13, Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Arch Linux i Alpine 3.20 pakiet Redis został zastąpiony forkiem Valkey.

Początkowo Redis był udostępniany na podstawie licencji BSD, która pozwalała na nienie wdrożenie swoich zmian, a następnie przeszedł na licencje proprietarne RSALv2 (Redis Source Available License v2) i SSPLv1 (Server Side Public License v1). Zaczynając od Redis 8, kod projektu jest dostępny na licencji AGPLv3, która posiada dodatkowe ograniczenia dla aplikacji działających jako usługi sieciowe. Przy użyciu komponentów AGPL w usługach sieciowych, deweloper jest zobowiązany do dostarczenia użytkownikowi kodu źródłowego wszelkich wprowadzonych zmian do tych komponentów, nawet jeśli oprogramowanie leżące u podstaw usługi nie jest publikowane i jest wykorzystywane wyłącznie w infrastrukturze wewnętrznej do działania usługi. Licencja AGPLv3 jest kompatybilna z GPLv3, lecz koliduje z licencją GPLv2.

Używane wcześniej licencje SSPL i RSAL prowadziły do dyskryminacji niektórych kategorii użytkowników, co nie pozwalało uznać ich za otwarte lub wolne. Pod względem celów obie licencje są podobne, a różnice sprowadzają się do tego, że licencja SSPL opiera się na kopyleftowej licencji AGPLv3, a licencja RSAL na licencji pozwalającej BSD. Licencja RSAL pozwala na używanie, modyfikowanie, rozpowszechnianie i integrowanie kodu w aplikacjach, z wyjątkiem przypadków, gdy te aplikacje są komercyjne lub wykorzystywane do świadczenia zarządzanych płatnych usług. Licencja SSPL dodatkowo zawiera wymóg dostarczania pod tą samą licencją nie tylko kodu samej aplikacji, ale także wszystkich komponentów zaangażowanych w świadczenie usługi w chmurze.

Równocześnie z ogłoszeniem zmiany licencji został przedstawiony wydanie Redis 8.0. Niemniej jednak, pomimo ogłoszenia o dostępności wydania, w repozytorium wciąż zamieszczony jest tylko kandydat na wydania, a link do pobrania Redis 8.0 na stronie projektu prowadzi do strony ogólnego opisu procesu instalacji. W uwagach do wydania na razie również zaznaczone jest tylko wydanie 8.0-RC1.

Główne zmiany w Redis 8.0:

  • Dodano typ przechowywania zbiorów danych wektorowych, poszukiwanych w systemach uczenia maszynowego i wyszukiwania semantycznego. Zbiory wektorowe (vector set) rozszerzają wcześniejsze możliwości uporządkowanych list (sorted set) o możliwość przechowywania wielowymiarowych wektorów. Do manipulacji danymi wektorowymi dodano 11 nowych poleceń, takich jak VADD, VREM i VSIM.
  • W głównym składzie Redis przeniesiono moduły Redis Query Engine, JSON, Time Series oraz Probabilistic Data Types, wcześniej dostarczane w formie oddzielnych rozszerzeń Redis Stack.
  • Zintegrowano wsparcie dla struktury danych JSON, umożliwiającej przechowywanie dokumentów w formacie JSON związanych z kluczami w Redis. Do selektywnego wydobywania dokumentów JSON oraz dostępu do poszczególnych elementów można używać języka zapytań JSONPath. Obsługuje atomowe aktualizacje, które pozwalają na wprowadzanie zmian w pojedynczych polach dokumentu JSON bez ładowania całego dokumentu.
  • Dodano wsparcie dla struktur danych w formie szeregów czasowych (gdzie zapis tworzy czas i zestaw odpowiadających mu wartości, na przykład pozyskiwanych poprzez okresowe sondowanie stanu czujników lub zbieranie metryk). W celu zmniejszenia zużycia pamięci użyto algorytmów kompresji podobnych danych oraz zapewniono możliwość ustalania zasad redukcji archiwalnych danych (downsampling).
  • Dodano struktury danych probabilistycznych: Bloom filter, Cuckoo filter, Count-min sketch, Top-k oraz t-digest, które pozwalają w znaczny sposób zredukować rozmiar przechowywania przy konieczności przechowywania bardzo dużych ilości danych, kosztem utraty precyzji w wykonywaniu niektórych operacji. 'Bloom filter' i 'Cuckoo filter' pozwalają sprawdzić przynależność do zbioru, dopuszczając fałszywe stwierdzenie o nieobecności danego elementu, ale unikając pominięcia elementu istniejącego. 'Count-min sketch' prognozuje liczbę wystąpień wartości w zbiorze. 'Top-k' pozwala na znajdowanie najczęściej występujących wartości. 'T-digest' umożliwia próbkowanie wartości większych lub mniejszych od zadanej.
  • W skład wchodzi silnik 'Redis Query Engine' z wsparciem dla wyszukiwania wektorowego i możliwościami formowania próbek na podstawie zawartości, a nie kluczy. Redis Query Engine pozwala na tworzenie dodatkowych indeksów dla danych umieszczonych w hashach i dokumentach JSON.
  • Rozszerzone wsparcie dla ACL (Listy Kontroli Dostępu), które umożliwiają zarządzanie dostępem do danych na podstawie kluczy, pozwalając na definiowanie różnych zestawów reguł dostępu do komend z możliwością przypisania zestawów uprawnień do każdego użytkownika. Na przykład, przy pomocy ACL można określić, którzy użytkownicy mogą łączyć się z Redis, do jakich kluczy ma dostęp dany użytkownik i jakie komendy może wykonywać. W Redis 8 dodano nowe kategorie ACL dla nowych struktur danych.
  • Dodano nowe komendy do pracy z haszami:
    • HGETDEL — zwraca i usuwa pola hasza dla podanego klucza.
    • HGETEX — zwraca pola hasza dla podanego klucza oraz określa dla nich czas życia.
    • HSETEX — ustawia pola hasza dla podanego klucza oraz określa dla nich czas życia.
  • Wprowadzono ponad 30 optymalizacji wydajności, prowadzących do przyspieszenia wykonania komend w niektórych testach o 87%, zwiększenia przepustowości o 112%, przyspieszenia replikacji o 18% oraz przyspieszenia zapytań w Redis Query Engine do 16 razy (dzięki poziomemu i pionowemu skalowaniu). W trakcie zestawu 149 testów 90 komend zaczęło działać szybciej. Znacząco zwiększyła się przepustowość dzięki przejściu na wielowątkową pracę komponentów do analizy komend, przetwarzania zapytań klientów oraz odczytu i zapisu w gniazdach sieciowych. Zaproponowano nową realizację mechanizmu wielowątkowego przetwarzania wejścia/wyjścia (io-threads).
  • Przedstawiono nowy mechanizm replikacji, zużywający o 35% mniej pamięci i działający o 18% szybciej. Aby wyeliminować blokady, wykorzystano dwa osobne wątki replikacji — jeden do przesyłania zmian do głównego węzła, a drugi do przesyłania zmian do węzłów pośrednich.

Aby zarządzać danymi w bazie danych Redis, dostępne są takie polecenia jak inkrementacja/dekrementacja, standardowe operacje na listach i zbiorach (łączenie, przecięcie), zmiana nazw kluczy, wielokrotne pobieranie oraz funkcje sortowania. Obsługiwane są dwa tryby przechowywania: okresowa synchronizacja danych na dysk oraz prowadzenie na dysku dziennika zmian. W drugim przypadku gwarantowana jest całkowita zachowanie wszystkich zmian. Wspierane są transakcje, które pozwalają na wykonanie w jednym kroku grupy poleceń, zapewniając spójność i sekwencyjność (polecenia z innych zapytań nie mogą się włączyć) wykonywania danego zestawu poleceń, a w przypadku problemów pozwalając na cofnięcie zmian.

Możliwe jest zorganizowanie replikacji danych master-slave na kilka serwerów, realizowane w trybie bezblokującym. Dostępny jest również tryb wymiany wiadomości „publikacja/subskrypcja”, w którym tworzony jest kanał, a wiadomości z niego są rozprzestrzeniane do klientów, którzy się subskrybują. Wszystkie dane są w pełni buforowane w pamięci operacyjnej. Biblioteki klienckie są dostępne dla większości popularnych języków, w tym Perl, Python, PHP, Java, Ruby, Tcl, JavaScript/Node.js, Go i C#.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster