Microsoft ujawnia kod magazynu Garnet, zgodnego z Redis

Firma Microsoft udostępniła kody źródłowe systemu NoSQL Garnet, który jest zaprojektowany do tworzenia pamięci podręcznych oraz jest zgodny z istniejącymi bibliotekami klienckimi dla magazynu Redis. Garnet obsługuje tworzenie skalowalnych klastrów do buforowania danych, w których można zastosować replikację, migrację kluczy i segmentację danych pomiędzy węzłami klastra. Projekt został napisany w języku C# z rdzeniem magazynowym w C++, udostępniony na licencji MIT i może działać na wszystkich platformach obsługiwanych przez .NET (głównymi platformami są Linux i Windows).

Do przechowywania danych używany jest silnik Tsavorite (fork magazynu Microsoft FASTER), który wspiera wielowątkowe przetwarzanie żądań, transakcje, zapisywanie zmian w trybie bezblokującym (checkpointing), odzyskiwanie po awariach, przechowywanie nadmiarowych kopii oraz prowadzenie dziennika operacji. Mechanizm sieciowy w Garnet zbudowany jest na architekturze pamięci dzielonej, zaproponowanej w ramach projektu badawczego ShadowFax. Obsługa TLS i interakcja z magazynem odbywa się w jednym wątku, co pozwala uniknąć kosztów związanych z przełączaniem wątków oraz efektywniej wykorzystać pamięć podręczną CPU podczas przesyłania danych przez sieć.

Architektura Garnet oddziela logikę analizy i przetwarzania żądań od operacji na magazynie. Dane są przechowywane przy użyciu dwóch magazynów w formacie klucz-wartość, zaimplementowanych na podstawie biblioteki Tsavorite. Pierwszy 'główny' magazyn jest zoptymalizowany do szybkiego wykonywania operacji na ciągach, a drugi 'obiektowy' magazyn jest zoptymalizowany do przechowywania złożonych obiektów i rozbudowanych typów danych, takich jak hashe i listy. Typy danych w drugim magazynie są zrealizowane z wykorzystaniem bibliotek .NET. Dane są przechowywane w stercie (C# heap), co pozwala na ich efektywne aktualizowanie, oraz w formie zserializowanej na dysku.

Microsoft ujawnia kod magazynu Garnet, zgodnego z Redis

Cechy Garnet:

  • Możliwe jest wdrażanie wielowarstwowych magazynów, obejmujących pamięć operacyjną, dyski SSD i magazyny w chmurze, w których mniej potrzebne dane są przenoszone do wolniejszych magazynów, aby utworzyć pamięci podręczne większe niż pamięć operacyjna.
  • Rozszerzone wsparcie dla urządzeń, umożliwiające tworzenie warstw zoptymalizowanych do współpracy z różnymi urządzeniami, takimi jak warstwy dla SSD, dysków twardych i chmury Azure Storage.
  • Efektywny mechanizm ponownego wykorzystania zwolnionej przestrzeni w pamięci operacyjnej, zapobiegający fragmentacji.
  • Konfigurowalne limity na rozmiar pamięci używanej na indeksy, logi i przechowywanie obiektów.
  • Do dostępu do magazynu stosowany jest protokół RESP, co umożliwia korzystanie z Garnet z niezmodyfikowanymi klientami Redis.
  • Wsparcie dla przechowywania zarówno wartości prostych, jak i złożonych struktur danych, takich jak listy, hashe, zbiory, posortowane listy i dane geolokalizacyjne. Możliwość definiowania czasu życia klucza.
  • Dostępność API do wykonywania zapytań analitycznych (HLL/Hyperloglog, Bitmap), transakcji (MULTI/EXEC) oraz do korzystania z paradygmatu publikacji/subskrypcji.
  • Dostępność narzędzi do elastycznego zarządzania dostępem przez ACL.
  • Możliwość definiowania konfiguracji w formacie JSON lub redis.conf.
  • Wsparcie dla podłączenia dodatkowych przetwarzaczy sieciowych. Możliwość szyfrowania ruchu przy użyciu TLS (na bazie SslStream).
  • Możliwość tworzenia rozszerzeń w języku C#, które implementują dodatkowe operacje na tekstach i obiektach.
  • Wsparcie dla transakcyjnych procedur składowanych obejmujących wiele kluczy.
  • Możliwość przywrócenia stanu z wcześniej zapisanej pozycji (checkpoint-recovery). Istnienie trybu tylko do dodawania (AOF, append-only file), w którym wszystkie stare dane pozostają dostępne i nie są zastępowane.
  • Wsparcie dla tworzenia klastra magazynowego z replikacją, segmentacją (Sharding), dynamiczną migracją kluczy między węzłami i odzyskiwaniem węzłów po awarii.
  • Wysoka wydajność i niskie opóźnienia podczas wykonywania zapytań. Efektywne przetwarzanie drobnych pakietowych zapytań przy dużej liczbie sesji klienckich, co pozwala uzyskać przepustowość (liczba przetworzonych zapytań na sekundę) o rząd wielkości wyższą niż w konkurencyjnych rozwiązaniach. maszynach wirtualnych W chmurze Azure w większości przypadków opóźnienia w dostępie klienta nie przekraczają 300 mikrosekund. W przeprowadzonych testach Garnet znacznie przewyższa Redis, Dragonfly i KeyDB pod względem wydajności i responsywności. W niektórych testach Garnet wyprzedza konkurencyjne systemy dziesięciokrotnie.
    Microsoft ujawnia kod magazynu Garnet, zgodnego z Redis
    Microsoft ujawnia kod magazynu Garnet, zgodnego z Redis
    Microsoft ujawnia kod magazynu Garnet, zgodnego z Redis
    Microsoft ujawnia kod magazynu Garnet, zgodnego z Redis

Ź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