Framework::xCache Introduction
Последние несколько лет я разрабатываю на PHP. Последний год - высоконагруженные проекты входящие в первую десятку согласно статистике Яндекса и LiveInternet'а. Много кода было написано за это время. Большинство успешно отправилось в /dev/null, но кое-что используется на боевом и хорошо себя зарекомендовало. И теперь я хочу немного рассказать об том, что в итоге попало в мой Framework. Это может быть полезным тем, кто забредёт на этот блог в поисках откровений, но, и это гораздо важнее, позволит мне систематизировать накопленный опыт. Начнём с кеширования.
В многих проектах на PHP используют кеширование как опкода, так и данных. Вариантов много, я остановился на xCache по двум причинам:
- опкод хранится в shared memory, а не на диске
- на моих тестах он показал скорость выше чем остальные
Простым подключением модуля можно получить ускорение 30%-50%. Используя всю мощь кеширования данных можно ускоряться практически бесконечно.
Из минусов на данный момент я могу выделить только один: невозможность разделения памяти по проектам. У xCache есть свой административный веб-интерфейс для доступа к которому необходимо проходить стандартную HTTP авторизацию, что логично. Но реализовано это средствами модуля, то есть попытка воспользоваться функционалом инициирует отсылку сервером соответствующих заголовков.
Вообще, всё его API делится на четыре группы:
- административные функции
- общие функции управления данными
- функции управления опкодом
- статистические функции
Из них нам интересны только первые две группы. Как я уже написал - для доступа к административным функциям необходимо пройти HTTP авторизацию. Но в эту группу входят такие крайне необходимые функции как:
- получение дополнительной информации о записях
- список (и количество) записей в кеше
- очистка кеша.
Доступны без авторизации только самые базовые функции:
- получение данных из записи
- установка и удаление данных
- проверка на существование
- инкремент\декремент единичной целочисленной записи.
Есть несколько задач, которые не решаются тривиальными методами:
- очистка кеша всего проекта при выкатывании нового кода
- пересчёт кеш некоторой части кеша при изменении настроек
- блокировка всего (или некоторой части) кеша для заполнения долго-получаемыми данными
Для их решения была придумана модель данных, которую я опишу ниже.
0 коммент.:
Отправить комментарий