Wydanie Memcached 1.6.0 z włączoną obsługą pamięci zewnętrznej

Odbyła się znacząca wersja systemu buforowania danych w pamięci Memcached 1.6.0, który działa na danych w formacie klucz/wartość i jest łatwy w użyciu. Memcached jest zwykle używany jako lekkie rozwiązanie przyspieszające pracę witryn o dużym obciążeniu poprzez buforowanie dostępu do systemu DBMS i danych pośrednich. Kod dostarczane na licencji BSD.

Nowa wersja stabilizuje realizację magazynu”exstore„, który jest teraz zbudowany domyślnie (aby go wyłączyć, skrypt konfiguracyjny udostępnia opcję „--disable-extstore”), ale wymaga jawnej aktywacji przy uruchomieniu (stare instalacje będą nadal działać bez zmian po aktualizacji). Chociaż extstore jest ogólnie uważany za stabilny, zaleca się ostrożność podczas wdrażania go na bardzo dużych systemach.

Extstore pozwala na użycie dysków SSD/Flash w celu zwiększenia rozmiaru pamięci podręcznej. Podobnie jak w przypadku pamięci RAM, pamięć Flash nie jest trwała i jest resetowana po ponownym uruchomieniu. Celem nowego trybu jest zapewnienie wydajnego buforowania dużych ilości danych. Podczas korzystania z „extstore” klucze i metadane są, jak poprzednio, przechowywane tylko w pamięci RAM, ale duże dane związane z kluczami, których rozmiar przekracza ustawiony próg, są przechowywane w pamięci zewnętrznej, a jedynie wskaźnik pozostaje w pamięci RAM.

Jeśli klucz jest powiązany z małymi danymi, Memcached działa normalnie, przechowuje dane w pamięci i nie uzyskuje dostępu do pamięci zewnętrznej. Jeśli jest dużo wolnej pamięci, najbardziej potrzebne dane można dodatkowo całkowicie umieścić w pamięci podręcznej w pamięci RAM (na przykład możesz określić, że tylko obiekty większe niż 1024 bajty, do których nie uzyskano dostępu przez 3600 sekund, zostaną zresetowane do Flash ).

Implementacja jest zoptymalizowana w celu zapewnienia maksymalnej wydajności i minimalnego obciążenia procesora kosztem wydajności pamięci masowej (wysoki poziom fragmentacji). Aby przedłużyć żywotność dysków Flash, dane są buforowane i sekwencyjnie przesyłane do pamięci masowej. Aby zapisać stan pamięci podręcznej pomiędzy ponownymi uruchomieniami, możesz skorzystać z możliwości, która pojawiła się w wersji 1.5.18, aby zrzucić zrzut pamięci podręcznej do pliku. Przy następnym uruchomieniu możesz przywrócić pamięć podręczną z tego pliku, aby wyeliminować szczyty obciążenia procesorów treści spowodowane pustą pamięcią podręczną (pamięć podręczna natychmiast staje się „ciepła”).

Drugą ważną zmianą w Memcached 1.6 była przeróbka kodu komunikacji sieciowej, który jest przystosowany do automatycznego przetwarzania żądań wsadowych w ramach jednego wywołania systemowego. Poprzednio, podczas wysyłania wielu poleceń GET w jednym pakiecie TCP, memcached wysyłał wyniki w oddzielnych wywołaniach systemowych. W Memcached 1.6 odpowiedzi są agregowane i zwracane poprzez wysłanie pojedynczego wywołania systemowego. W rezultacie na wywołanie systemowe przypada obecnie średnio 1.5 klucza, co w testach wykazuje zmniejszenie obciążenia procesora nawet o 25% i zmniejszenie opóźnień o kilka procent.

Przeprojektowanie podsystemu sieci umożliwiło także przejście na dynamiczną alokację buforów w miarę potrzeb, zamiast statycznego przydzielania buforów. Optymalizacja ta zmniejszyła zużycie pamięci podczas oczekiwania na nowe polecenia poprzez połączenie nawiązane przez klienta z 4.5 KB do 400-500 bajtów, a także umożliwiła pozbycie się wielu wywołań malloc, realloc i free, które prowadzą do niepotrzebnej fragmentacji pamięci na systemy z dużą liczbą połączeń. Każdy wątek roboczy obsługuje teraz własną pulę buforów odczytu i zapisu dla aktywnych połączeń klientów. Aby dostosować rozmiar tych buforów
dostępne są opcje „-o resp_obj_mem_limit=N” i „-o read_buf_mem_limt=N”.

Oddział 1.6 ogłosił również wycofanie protokół binarny interakcja z serwerem. Konserwacja protokołu binarnego i poprawki błędów będą kontynuowane, ale nowe funkcje i aktualizacje istniejących funkcji nie będą przenoszone. Protokół tekstowy będzie się rozwijać bez zmian. Protokół binarny został zastąpiony nowym protokołem meta (tekstowa wersja protokołu ze zwartymi metapoleceniami), demonstrująca optymalną kombinację wydajności i niezawodności. Nowy protokół obejmuje wszystkie operacje dostępne wcześniej za pośrednictwem protokołów tekstowych i binarnych.

Źródło: opennet.ru

Dodaj komentarz