Które rozwiązanie buforowania wybrać i dlaczego

Rozwiązania buforujące pomagają przyspieszyć działanie aplikacji. Poszukując najlepszych rozwiązań w zakresie buforowania, Redisa I Memcached okażą się dwoma najpopularniejszymi wyborami.

Ale jak zdecydować, który wybrać, porównując Redis i Memcached? Ten przewodnik pomoże Ci zrozumieć, co oba mają do zaoferowania i doprowadzi Cię do podjęcia świadomej decyzji.

Niezależnie od tego, czy chcesz zwiększyć szybkość aplikacji, zmniejszyć obciążenie bazy danych, czy bezproblemowo skalować system, zrozumienie rozwiązań dotyczących buforowania jest ważne.

Chociaż Redis i Memcached można używać jako rozwiązań do buforowania aplikacji, mają one swoje własne funkcje. Z jednej strony oba oferują opóźnienia poniżej milisekundy i wysoką przepustowość; z drugiej strony różnią się pod względem funkcji, takich jak obsługa struktur danych i przechowywanie.

Ale zanim zagłębimy się w Redis i Memcached, przyjrzyjmy się buforowaniu.

Co to jest buforowanie i dlaczego jest potrzebne?

Gdy wykonujesz jakąkolwiek operację w aplikacji, zużywa ona zasoby systemowe. Może to być przetwarzanie, gdy wykonujesz zadanie intensywnie obciążające procesor. Może to być też zadanie intensywnie obciążające sieć, np. czytanie pliku lub bazy danych.

Wielokrotne wykonywanie tego samego zadania obciążającego procesor lub obciążającego sieć ma wpływ na wydajność systemu. Rozważmy scenariusz, w którym wyszukujesz dane z bazy danych, a zapytanie jest złożone. Obliczenie i pobranie danych z bazy danych nie tylko zajmie trochę czasu, ale także złożenie złożonego zapytania spowoduje zużycie większej ilości zasobów bazy danych.

Teraz wyobraź sobie, że pomiędzy dwoma kolejnymi żądaniami nie ma żadnych zmian w wyniku zapytania. Jednak nadal za każdym razem, gdy potrzebujesz danych, uruchamiasz to samo kosztowne zapytanie. A co jeśli istnieje alternatywa? Tutaj w grę wchodzi buforowanie.

Zasadniczo buforowanie polega na przechowywaniu często używanych danych w szybkiej pamięci. Dzięki temu można je szybko odzyskać w przypadku ponownego żądania danych. Dodatkowo eliminujesz potrzebę powtarzania operacji wymagających dużych zasobów – takich jak zapytania do bazy danych lub złożone obliczenia. W ten sposób poprawiasz wydajność, wydajność i responsywność systemu.

Oto korzyści płynące z buforowania:

  • Twoje opóźnienia są zmniejszone
  • Twoje witryny i aplikacje ładują się i reagują szybciej
  • Zmniejsza się niepotrzebne wykorzystanie zasobów
  • Dzięki temu serwery zaplecza będą mniej obciążone
  • Twoja baza danych jest zabezpieczona przed częstymi, ciężkimi zapytaniami

Redis: przegląd

Redisa to magazyn danych typu open source, który działa w pamięci. Dane przechowujesz w parach klucz-wartość. Oprócz używania go jako rozwiązania do buforowania, możesz używać Redis jako bazy danych, brokera komunikatów lub kolejki.

Ponieważ Redis działa w pamięci, opóźnienia zapytań wynoszą mniej niż milisekundę. Pobieranie danych z pamięci jest znacznie szybsze niż z dysku. W ten sposób uzyskujesz bardzo wysoką przepustowość i możesz wykonywać wiele odczytów i zapisów na sekundę.

Kiedy porównujesz Redis i Memcached, Redis obsługuje szeroki zakres struktur danych. Możesz przechowywać dowolne dane tekstowe lub binarne w postaci ciągów znaków (maksymalny rozmiar 512 MB). Jeśli chcesz przechowywać obiekty, możesz użyć par pole-wartość zwanych Hashami. Jeśli musisz przechowywać kolekcję ciągów znaków, możesz użyć list, zestawów lub posortowanych zestawów.

Otrzymujesz obsługę bibliotek klienckich dla głównych języków programowania – Java, Python, Go, NodeJs, C# (C-Sharp) i .Net (Dot Net). Dodatkowo, instalując Redis, otrzymujesz wbudowane narzędzie wiersza poleceń o nazwie redis-cli. To narzędzie CLI pozwala szybko sprawdzić, czy serwer Redis działa poprawnie. Można także wysyłać polecenia odczytu, zapisu i modyfikacji danych.

Korzyści z Redisa

  • Redis jest oprogramowaniem typu open source i dostępnym bezpłatnie
  • Istnieją oficjalni klienci dla głównych języków programowania
  • Można go używać jako rozwiązania buforującego, brokera komunikatów, bazy danych lub kolejki
  • Oferuje bardzo wysoką wydajność przy opóźnieniach poniżej milisekundy
  • Otrzymujesz kilka wbudowanych struktur danych, takich jak ciągi znaków, listy, zestawy i posortowane zestawy
  • Architektura repliki podstawowej zapewnia wysoką dostępność i skalowalność

Następnie omówimy szczegółowo Memcached.

Memcached: przegląd

Memcached to darmowy system buforowania obiektów pamięci rozproszonej typu open source. Oferuje bardzo wysoką wydajność. Otrzymujesz magazyn klucz-wartość w pamięci dla małych fragmentów dowolnych danych. Ale zanim porównamy Redis i Memcached, zobaczmy, co dokładnie robi Memcached.

Pamięć w systemie komputerowym nie jest równomiernie rozłożona. Wolna pamięć jest obecna w dowolnych fragmentach i różnych rozmiarach. Memcached umożliwia dostęp do dostępnej pamięci z różnych części systemu. W ten sposób pobierasz pamięć tam, gdzie jest jej nadmiar i używasz jej tam, gdzie jest potrzebna.

Będąc prostym magazynem klucz-wartość, serwery Memcached nie rozumieją, co reprezentują dane. Przechowujesz surowe, wstępnie serializowane dane wraz z kluczem, czasem wygaśnięcia i opcjonalnymi flagami. Co więcej, nie otrzymujesz żadnej obsługi wbudowanych struktur danych.

W porównaniu do Redis, serwery Memcached nie komunikują się ze sobą. Nie uzyskasz synchronizacji, replikacji ani emisji. W ten sposób dostępność pamięci podręcznej i unieważnianie są uproszczone. Jako klient usuwasz lub nadpisujesz dane bezpośrednio na serwerze, który jest ich właścicielem.

Dzięki tej niezwykle prostej architekturze Memcached zapewnia bardzo wysoką wydajność. Na szybkim komputerze z szybką siecią możesz z łatwością obsłużyć Memcached ponad 200 000 żądań na sekundę.

Korzyści z Memcached

  • Ponieważ wykorzystuje dane znajdujące się w pamięci, odzyskiwanie jest szybsze w porównaniu z tradycyjnym dyskiem
  • Dostępne są API dla najpopularniejszych języków programowania
  • Memcached zmniejsza potrzebę wielokrotnego wyszukiwania danych poprzez buforowanie wyników
  • Możesz buforować wyniki bazy danych, odpowiedzi API, a nawet renderowane strony internetowe
  • Pomaga odzyskać fragmentaryczną pamięć
  • Wykorzystuje buforowanie ostatnio używanych, a elementy wygasają po określonym czasie
  • Możesz tworzyć własne abstrakcje w Memcached

Następnie zbadamy różnicę między Redis i Memcached.

Redis kontra Memcached: tabela porównawcza

FunkcjeRedisMemcachedData StructuresObsługuje wbudowane struktury danych, takie jak ciągi, listy, zestawy, posortowane zestawyBrak obsługi wbudowanych struktur danych. Przechowywane są surowe, wstępnie serializowane dane Rozmiar danych Możliwość przechowywania wartości o rozmiarze do 512 MB Możliwość przechowywania wartości o rozmiarze do 1 MB Obsługa pamięci dyskowej Natywnie obsługuje pamięć dyskową przy użyciu pliku bazy danych Redis (RDB) lub plików tylko do dołączania (AOF) Nie ma natywnej obsługi zapisu na dysk. Narzędzia innych firm, takie jak libmemcached-tools są dostępneThreadingJest jednowątkowyJest wielowątkowyReplikacjaMa architekturę repliki podstawowej, która pozwala na replikacjęNie obsługuje replikacjiEvictionCacheUżywa polityki ostatnio używanej do wykluczania pamięci podręcznej. Można skonfigurować inne zasady. Wykorzystuje zasady ostatnio używane do usuwania pamięci podręcznej. Języki programowania. Obsługuje główne języki programowania. Obsługuje główne języki programowania.

Przyjrzyjmy się teraz niektórym przypadkom użycia rozwiązanym przez Redis i Memcached.

Przypadki użycia Redis i Memcached

#1. Obsługa handlu elektronicznego na dużą skalę: Shopify

Jeśli kiedykolwiek szukałeś możliwości sprzedaży produktów online, istnieje duże prawdopodobieństwo, że trafiłeś na Shopify. To wielokanałowa platforma e-commerce, która pozwala w łatwy sposób stworzyć sklep internetowy dla Twojej firmy. W szczytowym momencie Shopify obsługuje 80 tys. żądań na sekundę, zasilając 600 tys. sprzedawców. Jednakże obsługa takiego ruchu przy minimalnych opóźnieniach stanowi wyzwanie.

Aby rozwiązać ten problem, Shopify wykorzystuje w swoim stosie technologicznym zarówno Memcached, jak i Redis. W swojej istocie Shopify ma dość prostą architekturę, która wykorzystuje MySQL jako bazę danych, Memcached jako magazyn klucz-wartość i Redis jako kolejkę. Czasami nie musisz patrzeć na Redis i Memcached. Zamiast tego możesz używać obu z nich w swojej architekturze aplikacji.

Kiedy patrzysz na dowolną platformę e-commerce, istnieje wiele statycznych danych, które nie zmieniają się tak często. Obejmuje to między innymi zdjęcia przedmiotów, opisy i informacje o sklepie. Zamiast odpytywać wszystkie te dane przy każdym żądaniu, przechowywanie ich w magazynie klucz-wartość przyspiesza działanie systemu i poprawia jego wydajność.

Korzystanie z rozwiązania buforującego, takiego jak Memcached, do obsługi zawartości statycznej zmniejsza obciążenie serwerów zaplecza i baz danych.

#2. Rozproszone buforowanie danych aplikacji: Pinterest

Pinterest stał się największą przestrzenią, w której ludzie szukają inspiracji. Możesz wejść na Pinterest i obejrzeć wszystkie pinezki i tablice utworzone przez innych ludzi. Za kulisami wiele się dzieje. Każde przychodzące żądanie przechodzi przez kilka różnych usług i wykonuje dużą ilość obliczeń. Wiąże się to również ze sprawdzaniem pinów i rekomendacji.

Aby chronić usługi backendu i uniknąć powtarzania obliczeń, Pinterest wykorzystuje warstwę rozproszonej pamięci podręcznej. Przechowuje wyniki powtarzanych obliczeń. W związku z tym żądania nie docierają do usług i baz danych wymagających dużej mocy obliczeniowej lub pamięci masowej. Raczej pamięć podręczna pochłania znaczną część ruchu. Warstwa buforowania Pinteresta obejmuje tysiące komputerów i obsługuje ponad 150 milionów żądań na sekundę.

Jeśli spojrzysz na to, jak Pinterest zarządza swoją warstwą pamięci podręcznej, przekonasz się, że obsługuje Memcached i mcrouter jako jego kręgosłup. Ze względu na asynchroniczny charakter sterowany zdarzeniami i wielowątkowe przetwarzanie, Memcached jest niezwykle wydajny. Dodajmy do tego fakt, że ma bardzo prostą architekturę. Możesz tworzyć własne abstrakcje i skalować je w poziomie. W ten sposób Pinterest obsługuje swój ruch.

#3. Zarządzanie bezpieczeństwem danych na dużą skalę: CloudSponge

Jeśli szukasz oprogramowania jako usługi (SaaS), które umożliwia użytkownikom szybkie wysyłanie zaproszeń, kuponów lub kartek z życzeniami, odpowiedzią jest CloudSponge. Pomaga użytkownikom importować wszystkie główne książki adresowe, dzięki czemu użytkownicy nie muszą ręcznie wpisywać kontaktowych adresów e-mail.

W ciągu jednego roku CloudSponge przetwarza za pośrednictwem swoich serwerów prawie 2 biliony adresów e-mail. Wiąże się to z własnym wyzwaniem dotyczącym bezpieczeństwa, ponieważ każda luka w systemie może dać hakerom szansę na kradzież danych.

Możesz używać Redis jako czegoś więcej niż tylko rozwiązania do buforowania. To jest dokładnie to, co robi CloudSponge. Redis przechowuje wszystkie dane kontaktowe w pamięci. Dane są przechowywane wystarczająco długo, aby klienci mogli je odzyskać. Następnie zostaje usunięty. Żadne dane nie są utrwalane na dysku, mimo że Redis udostępnia taką opcję.

#4. Inne typowe zastosowania rozwiązań buforujących

Oto kilka innych typowych scenariuszy, w których stosowane są rozwiązania w zakresie buforowania:

❇️ Systemy przesyłania wiadomości na czacie

Jeśli tworzysz własny system przesyłania wiadomości na czacie, rozwiązania w zakresie buforowania są nieocenionym komponentem, którego potrzebujesz w swojej architekturze. Możesz przechowywać często używane dane, takie jak profile użytkowników, listy kontaktów i ostatnie wiadomości. To z kolei pomaga zmniejszyć obciążenie bazy danych i zwiększyć responsywność systemu.

Funkcje działające w czasie rzeczywistym, takie jak wskaźniki pisania i powiadomienia o obecności, również korzystają z buforowania. Jeśli używasz rozproszonej pamięci podręcznej, możesz skalować serwery zaplecza bez konieczności zwiększania pamięci podręcznej.

❇️ Usługi lokalizacyjne

Jeśli otworzysz aplikację i przejrzysz usługi oparte na lokalizacji, takie jak szacowanie odległości, czas przybycia i rekomendacje w pobliżu, będziesz polegać na pamięciach podręcznych dostosowanych do danych o lokalizacji. Dane lokalizacyjne zapisywane są w formie indeksu geoprzestrzennego.

Dzięki indeksowi geoprzestrzennemu możliwe jest przechowywanie lokalizacji dowolnego obiektu w magazynie danych. Redis domyślnie obsługuje indeksy geoprzestrzenne. Dzięki serwowaniu z pamięci informacje o lokalizacji mogą być efektywnie udostępniane w czasie rzeczywistym.

❇️ Analityka w czasie rzeczywistym

Gry online stały się ogromną branżą. Być może znasz kooperacyjne gry mobilne lub aplikacje do sportów fantasy, w których gracze podejmują decyzję lub wprowadzają zmiany na opóźnieniach krótszych niż sekunda.

Korzystając z pamięci podręcznej, możesz prowadzić analizy w czasie rzeczywistym, np. prowadzić rankingi. W przypadku aplikacji takich jak fantasy sports możesz przechowywać statystyki graczy i informacje w warstwie pamięci podręcznej, aby zwiększyć wydajność aplikacji.

Który wybrać?

Redis wyróżnia się jako wszechstronna opcja obsługująca różne struktury danych, dzięki czemu nadaje się do aplikacji wymagających czegoś więcej niż tylko podstawowego buforowania. Opóźnienia zapytań wynoszące mniej niż milisekunda i wysoka przepustowość, wraz z obsługą bibliotek klienckich dla głównych języków programowania, czynią go silnym konkurentem dla systemów wymagających zarówno szybkości, jak i elastyczności. Otrzymujesz także natywną obsługę utrwalania danych na dysku, jeśli tego potrzebujesz.

Z drugiej strony Memcached wyróżnia się prostotą i szybkim buforowaniem. Jest to idealny wybór, jeśli Twoim przypadkiem użycia jest buforowanie surowych, wstępnie serializowanych danych. Efektywnie wykorzystuje dostępną pamięć w różnych częściach systemu. Prosta architektura Memcached zapewnia bardzo wysoką wydajność, szczególnie na szybkich komputerach z szybką siecią.

Aby dokonać właściwego wyboru pomiędzy Redis i Memcached, należy wziąć pod uwagę takie czynniki, jak złożoność aplikacji, wymagania dotyczące struktury danych i potrzeby skalowalności. Redis doskonale sprawdza się w sytuacjach, w których potrzebujesz różnorodnych struktur danych i bardziej zaawansowanych funkcji, podczas gdy Memcached zapewnia najniższe opóźnienia i najwyższą przepustowość w prostych scenariuszach buforowania o wysokiej wydajności.

Jeśli chodzi o Redis i Memcached, ostatecznie decyzja powinna być zgodna z konkretnymi celami i ograniczeniami Twojego projektu. Czasami buforowanie danych aplikacji może nie wystarczyć.

Następnie sprawdź, jak skonfigurować lokalny serwer buforujący DNS w systemie Linux.