Badacze z Microsoft od prawie dekady pracują nad problemem rosnącego zapotrzebowania na mechanizmy przechowywania danych, które wspierałyby szybki postęp w interaktywnych aplikacjach i usługach internetowych. Tak powstał nowy, otwartoźródłowy system magazynowania pamięci podręcznej o nazwie Garnet, który oferuje wiele korzyści względem poprzednich systemów i jest już z powodzeniem wykorzystywany w produktach Microsoftu.
Garnet został wdrożony w wielu przypadkach użycia w Microsoft, w tym w Windows & Web Experiences Platform, Azure Resource Manager i Azure Resource Graph. Teraz jest dostępny do pobrania jako Open Source na https://github.com/microsoft/garnet. Otwierając źródła projektu, Microsoft Research ma nadzieję, że jego osiągnięcia przyniosą korzyści deweloperom, a także że będą oni tworzyć dalej w oparciu o tę pracę i rozwijać ekosystem poprzez nowe żądania API i funkcje. Twórcy chcieliby także, by było to zachętą do dalszych badań akademickich i otworzyło przyszłe możliwości współpracy w tym ważnym obszarze badawczym. No dobrze, ale na czym polegają te osiągnięcia Garneta?
Rozwój przetwarzania w chmurze oraz brzegowego spowodował wzrost liczby i zakresu aplikacji i usług, które muszą uzyskiwać dostęp do danych, aktualizować je i przekształcać z większą wydajnością, mniejszymi opóźnieniami i niższymi kosztami niż kiedykolwiek wcześniej. Te aplikacje i usługi wymagają zwykle znaczących wydatków operacyjnych na interakcje z magazynem, przez co są dziś jednymi z najdroższych i najbardziej wymagających obszarów platformowych. Warstwa oprogramowania magazynu pamięci podręcznej wdrożona jako oddzielnie skalowalny proces zdalny może obniżyć te koszty i poprawić wydajność aplikacji. Napędza to rosnącą branżę magazynów pamięci podręcznej, w tym wiele systemów open-source, takich jak Redis, Memcached, KeyDB i Dragonfly.
W odróżnieniu od tradycyjnych, zdalnych magazynów pamięci podręcznej [remote cache-stores], które obsługują prosty interfejs get/set, nowoczesne pamięci podręczne oferują bogate zestawy API i funkcji. Wspierają surowe ciągi znaków, analityczne struktury danych, takie jak Hyperloglog, oraz złożone typy danych, takie jak posortowane zestawy i hashe. Umożliwiają sprawdzanie i odzyskiwanie pamięci podręcznej, tworzenie fragmentów danych, utrzymywanie replikowanych kopii oraz obsługę transakcji i niestandardowych rozszerzeń.
Istniejące systemy osiągają jednak tę bogatą funkcjonalność sporym kosztem, utrzymując prosty design systemu, co ogranicza możliwość pełnego wykorzystania ostatnich możliwości sprzętowych (np. wielu rdzeni, warstwowej pamięci masowej, szybkich sieci). Co więcej, wiele z tych systemów nie zostało zaprojektowanych tak, by można je było łatwo rozszerzać przez twórców aplikacji ani by dobrze działały na różnych platformach i systemach operacyjnych.
— Badrish Chandramouli, Partner Research Manager w Microsoft
W 2021 roku Microsoft zaczął tworzyć nowy zdalny magazyn pamięci podręcznej, który odpowiadałby jego potrzebom i zastąpiłby poprzednie systemy. Celem było zachowanie i rozwinięcie istniejącej wydajności, ale w bardziej ogólnym i realistycznym settingu sieciowym. Tak powstał Garnet, który oferuje parę unikalnych korzyści, w tym adaptuje popularny protokół RESP, oferuje znacznie większą skalowalność i przepustowość, demonstruje lepszą latencję klienta na poziomie 99 i 99,9 percentyla oraz opiera się na najnowszej technologii .NET, przez co jest wieloplatformowy, rozszerzalny i nowoczesny. Szczegóły dotyczące wydajności i nie tylko Microsoft Research omawia na swoim blogu: