Создание системы кэширования для сложных
вычислительных системВладимир Фльонц
<МЕТА>
Зачем?
• Кэш (англ. cache) - в компьютерных науках промежуточный буфер с быстрым доступом.• Кэш (англ. cash) - сленговое обозначение наличных денег.
Кэш сбережёт вам кэш.
Реклама• Десять лет в интернете.• Один из наиболее посещаемых украинцами сайтов*• 50+ сервисов и служб под одной крышей• Собственный поиск по украинскому сегменту Web
* - www.gemius.com.ua
Один запрос «большого поиска»
Balancer Balancer
Что можно кэшировать?
• Найденные документы по каждому слову – дисковый кэш.• Конечные результаты поиска (SERP)
+ Просто– Большинство «тяжелых» запросов не повторяются
Пока кэш не большой
• Если все умещается в память (RAM) то лучше хранить это там- минусы: сбой/перезапуск и кэш нужно заново наполнять
• Своя реализация vs. готовые third party решениятребования:• максимально быстрый поиск/доступ к записи• эффективное удаление устаревших записей
• list<serp> + map<query, serp*>
Растём
• Увеличение количества запросов * увеличение времени жизни записи в кэше = (увеличение размера данных)2
• Надо «слазить» на диск• Выбор контейнеров хранения• Опять изобретать велосипед?
Berkeley DB Btree
• Знакомый, хорошо зарекомендовавший себя компонент• Поддержка многопоточных приложений• Прогнозируемое время отклика• Собственная система кэширования
Berkeley DB Btree
• Знакомый, хорошо зарекомендовавший себя компонент• Поддержка многопоточных приложений• Прогнозируемое время отклика• Собственная система кэширования
• Фрагментация и избыточность данных• Постраничное кэширование не эффективно!
Попробуем сделать лучше
• Хэш таблица в памяти данные на диске• Последовательная запись, произвольное чтение• Сжатые данные быстрее пишутся и читаются• Данные пишутся и «закрываются» частями• «Закрытые» части переходят в R/O• Мы можем потерять, но только малую часть• Чистка мусора происходит тоже частями
(hint: ext3 медленно удаляет большие файлы)
Ещё лучше
• Произвольное чтение – медленно• Востребованных данных по прежнему гораздо меньше
Ещё лучше
• Произвольное чтение – медленно• Востребованных данных по прежнему гораздо меньше
• Промежуточный «горячий» кэш по записям в памяти• Не обязательно в том же процессе на той же машине• Не забываем сжимать то что кэшруем• Теперь мы только пишем на диск и иногда читаем
Маштабируемость
Balancer Balancer
Маштабируемость
• Полные копии на каждом из сливателей Надёжно но избыточно, многократное кэширование• Общее правило распределения
Hash(Query) mod NДобавление хранилищ требует очистку кэша
• Общий менеджер, раздельные хранилищаОдно узкое место, закон Мёрфи никто не отменял.