ważne wydanie systemu pamięci podręcznej w pamięci operacyjnej , operującej danymi w formacie klucz/wartość i charakteryzującej się łatwością użycia. Memcached jest zazwyczaj stosowany jako lekkie rozwiązanie do przyspieszania działania wysoko obciążonych stron internetowych poprzez buforowanie dostępu do baz danych i danych pośrednich. Kod na licencji BSD.
W nowej wersji stabilizowana jest implementacja magazynu „«, która teraz kompilowana jest domyślnie (w celu wyłączenia w skrypcie configure przewidziana jest opcja „—disable-extstore”), jednak wymaga jawnej aktywacji podczas uruchamiania (stare instalacje po aktualizacji będą działały bez zmian). Mimo że magazyn „extstore” jest ogólnie uznawany za stabilny, zaleca się ostrożność przy jego wdrażaniu w bardzo dużych systemach.
Extstore pozwala na wykorzystanie dysków SSD/Flash do zwiększenia rozmiaru pamięci podręcznej. Podobnie jak w przypadku pamięci operacyjnej, magazyn na Flash nie jest trwały i jest resetowany po ponownym uruchomieniu. Jako zastosowanie nowego trybu wskazuje się zapewnienie efektywnego buforowania danych dużego rozmiaru. Przy użyciu „extstore” klucze i metadane, jak wcześniej, przechowywane są tylko w pamięci operacyjnej, ale powiązane z kluczami duże dane, które przekraczają ustalony próg, są przechowywane w zewnętrznym magazynie, a w RAM pozostaje tylko wskaźnik.
Jeśli z kluczem powiązane są dane małego rozmiaru, Memcached działa jak zwykle, przechowując dane w pamięci i nie odwołując się do zewnętrznego magazynu. Jeśli dostępna pamięć jest duża, najczęściej wykorzystywane dane mogą dodatkowo znajdować się w pamięci podręcznej w pamięci operacyjnej (na przykład można wskazać, aby na Flash zapisywane były tylko obiekty większe niż 1024 bajty, do których nie było odwołań przez 3600 sekund).
Implementacja została zoptymalizowana tak, aby zapewnić maksymalną wydajność i minimalne obciążenie CPU, kosztem efektywności przechowywania (wysoki poziom fragmentacji). Aby przedłużyć żywotność pamięci Flash, dane są buforowane i zapisywane do magazynu w sposób sekwencyjny. Aby zachować stan cache między restartami, może być wykorzystana nowa funkcjonalność z wersji 1.5.18, pozwalająca na zrzut cache do pliku. Przy następnym uruchomieniu cache można przywrócić z tego pliku, aby uniknąć szczytów obciążenia na obsłudze treści z powodu braku danych w cache (cache od razu staje się „ciepły”).
Drugą istotną zmianą w Memcached 1.6 była przebudowa kodu do komunikacji sieciowej, który został dostosowany do automatycznego przetwarzania zgrupowanych zapytań w ramach jednego wywołania systemowego. Wcześniej, w przypadku przesyłania wielu poleceń „GET” w jednym pakiecie TCP, memcached wysyłał wyniki z wykonaniem oddzielnych wywołań systemowych. W Memcached 1.6 odpowiedzi są agregowane i zwracane poprzez wysłanie jednego wywołania systemowego. Jako rezultat teraz średnio przypada 1,5 klucza na wywołanie systemowe, co w testach wykazuje zmniejszenie obciążenia CPU o 25% i skrócenie opóźnień o kilka procent.
Przebudowa systemu sieciowego również pozwoliła na przejście na dynamiczne przydzielanie buforów w razie potrzeby, zamiast statycznego przypisywania buforów. Ta optymalizacja zmniejszyła zużycie pamięci w trybie oczekiwania na nowe polecenia przez nawiązane połączenie z klientem z 4,5 KB do 400-500 bajtów, a także umożliwiła pozbycie się wielu wywołań malloc, realloc i free, prowadzących do nadmiernej fragmentacji pamięci na systemach z dużą liczbą połączeń. Każdy wątek roboczy teraz przetwarza swoją pulę buforów do odczytu i zapisu dla aktywnych połączeń klienta. Aby dostosować rozmiar tych buforów
przewidziano opcje „-o resp_obj_mem_limit=N” i „-o read_buf_mem_limit=N”.
W gałęzi 1.6 ogłoszono również przejście do statusu przestarzałego interakcji z serwerem. Utrzymanie binarnego protokołu i naprawa błędów będą kontynuowane, jednak nowe możliwości i aktualizacje istniejących funkcji nie będą wprowadzane. będzie kontynuować rozwój bez zmian. Nowy protokół zastąpił protokół binarny (tekstowa wersja protokołu z kompaktowymi komendami meta), pokazująca optymalne połączenie wydajności i niezawodności. Nowy protokół obejmuje wszystkie operacje, które wcześniej były dostępne przez protokoły tekstowe i binarne.
Źródło: opennet.ru
