Реліз Memcached 1.6.0 із включенням підтримки зовнішнього сховища

Відбувся значний реліз системи кешування даних у оперативній пам'яті Memcached 1.6.0, що оперує даними у форматі ключ/значення і відрізняється простотою використання. Memcached зазвичай застосовується як легковажне рішення для прискорення роботи високонавантажених сайтів шляхом кешування доступу до СУБД та проміжних даних. Код поставляється під ліцензією BSD.

У новій версії стабілізовано реалізацію сховища «extstore«, яке тепер збирається за замовчуванням (для відключення в скрипті configure передбачена опція «disable-extstore»), але вимагає явної активації при запуску (старі установки після оновлення продовжать роботу без зміни). Незважаючи на те, що в цілому сховище «extstore» визнано стабільним, рекомендується бути обережним при його впровадженні в дуже великих системах.

Extstore дозволяє використовувати SSD/Flash-накопичувачі для розширення розміру кешу. Як і при використанні оперативної пам'яті, сховище на Flash не є незмінним і скидається при перезапуску. Як область застосування нового режиму називається забезпечення ефективного кешування даних великого розміру. При використанні "extstore" ключі та метадані, як і раніше, зберігаються тільки в оперативній пам'яті, але пов'язані з ключами великі дані, розмір яких перевищує встановлений поріг, зберігаються у зовнішнє сховище, а в ОЗУ залишається лише покажчик.

Якщо з ключем зв'язуються дані невеликого розміру, Memcached працює як завжди, тримає дані в пам'яті і не звертається до зовнішнього сховища. Якщо вільної пам'яті багато, то найбільш затребувані дані додатково можуть повністю перебувати в кеші в оперативній пам'яті (наприклад, можна вказати, щоб на Flash скидалися тільки об'єкти більше 1024 байт, до яких не було звернень 3600 секунд»).

Реалізація оптимізована для забезпечення максимальної продуктивності та мінімального навантаження на CPU, на шкоду ефективності зберігання (великий рівень фрагментації). Для продовження ресурсу Flash-накопичувачів дані буферизуються та скидаються у сховище послідовно. Для збереження стану кешу між перезапусками може застосовуватися можливість скидання дампа з кешем у файл, що з'явилася у випуску 1.5.18. При наступному запуску можна відновити кеш із даного файлу для виключення піків навантаження на обробники контенту через незаповненість кешу (кеш одразу стає «теплим»).

Другою важливою зміною Memcached 1.6 стала переробка коду для мережевої взаємодії, який адаптований для автоматичної обробки пакетних звернень в рамках одного системного виклику. Раніше, при передачі кількох команд «GET» в одному TCP-пакеті, memcached надсилав результати з виконанням окремих системних викликів. У Memcached 1.6 відповіді агрегуються та повертаються через надсилання одного системного виклику. Як результат, у середньому тепер припадає 1.5 ключа на системний виклик, що демонструє у тестах зниження навантаження на CPU до 25% та скорочення затримок на кілька відсотків.

Переробка мережної підсистеми також дозволила перейти до динамічного виділення буферів за потребою замість статичного призначення буферів. Ця оптимізація скоротила споживання пам'яті в режимі очікування нових команд через встановлене клієнтом з'єднання з 4.5 Кб до 400-500 байт, а також дала можливість позбавитися багатьох викликів malloc, realloc і free, що призводять до зайвої фрагментації пам'яті на системах з великим числом з'єднань. Кожен робочий потік тепер обробляє свій пул буферів для читання та запису для активних клієнтських з'єднань. Для налаштування розміру цих буферів
передбачені опції "-o resp_obj_mem_limit=N" та "-o read_buf_mem_limt=N".

У гілці 1.6 також оголошено про переведення до розряду застарілих бінарного протоколу взаємодії із сервером. Супровід бінарного протоколу та виправлення помилок буде продовжено, але нові можливості та оновлення існуючих функцій переноситись не будуть. Текстовий протокол продовжить розвиток без змін. На зміну бінарному протоколу прийшов новий протокол мета (текстовий варіант протоколу з компактними meta-командами), що демонструє оптимальне поєднання продуктивності та надійності. Новий протокол охоплює всі операції, раніше доступні через текстовий та бінарний протоколи.

Джерело: opennet.ru

Додати коментар або відгук