собачья куча
Dogpile состоит из двух подсистем, одна из которых расположена над другой.
dogpile
предоставляет концепцию «блокировки Dogpile», структуры управления, которая позволяет выбрать один поток выполнения в качестве «создателя» некоторого ресурса, в то же время позволяя другим потокам выполнения ссылаться на предыдущую версию этого ресурса как на творение продолжается; если предыдущей версии нет, эти потоки блокируются до тех пор, пока объект не станет доступен.
dogpile.cache
— это API-интерфейс кэширования, который предоставляет общий интерфейс для любого типа серверных частей кэширования, а также предоставляет перехватчики API, которые интегрируют эти серверные части кэша с механизмом блокировки dogpile
.
В целом, Dogpile.cache задуман как замена системе кэширования Beaker, внутреннее устройство которой написано тем же автором. Все идеи Beaker, которые «работают», повторно реализованы в Dogpile.cache в более эффективной и лаконичной форме, а весь мусор (внутреннее устройство Beaker было впервые написано в 2005 году) отправлен на свалку.
Документация
Полную документацию по Dogpile.cache смотрите в документации по Dogpile.cache. В разделах ниже представлен краткий обзор пакетов dogpile
.
Функции
- Краткий API, который поддерживает предварительную настройку предварительно определенных «регионов», каждый из которых определяет набор характеристик кэширования, включая серверное хранилище, параметры конфигурации и срок действия по умолчанию.
- Предоставляется стандартный API получения/установки/удаления, а также API декоратора функций.
- Механика генерации ключей полностью настраиваема. API декоратора функций имеет подключаемый «генератор ключей», позволяющий настроить способ создания ключей кэша в соответствии с вызовами функций, а дополнительная функция «обработчика ключей» обеспечивает подключаемое искажение ключей (например, кодирование, хеширование SHA-1) по желанию. для каждого региона.
- Блокировка собачьей кучи, впервые разработанная в качестве основного механизма системы кэширования Beaker, здесь значительно упрощена, улучшена и лучше протестирована. Исправлены некоторые ключевые проблемы производительности, присущие архитектуре Beaker, в частности, частое «двойное получение» значений из кэша.
- Серверные части реализуют свою собственную версию «распределенной» блокировки, где «распределение» соответствует системе хранения серверной части. Например, серверные части memcached позволяют всем клиентам координировать создание значений с помощью самого memcached. Серверная часть файла dbm использует файл блокировки вместе с файлом dbm. Новые серверные части, такие как серверная часть на основе Redis, могут предоставлять собственный механизм блокировки, соответствующий механизму хранения.
- Написание новых бэкэндов или взлом существующих бэкэндов должно быть рутинным делом — все, что нужно, — это базовые методы get/set/delete. Распределенная блокировка, ориентированная на серверную часть, является необязательным дополнением, в противном случае Dogpile использует обычный мьютекс потока. Новые бэкэнды можно зарегистрировать напрямую с помощью Dogpile.cache или сделать доступными через точки входа в setuptools.
- Включенные бэкэнды включают три бэкэнда memcached (python-memcached, pylibmc, bmemcached), бэкэнд Redis, бэкенд на основе Anydbm Python и бэкенд простого словаря.
- Место для сторонних плагинов, включая тот, который предоставляет движок Dogpile.cache для шаблонов Mako.
Проект SQLAlchemy
Dogpile является частью проекта SQLAlchemy и придерживается тех же стандартов и соглашений, что и основной проект.
Разработка/Отчеты об ошибках/Запросы на включение
Пожалуйста, обратитесь к Руководству сообщества SQLAlchemy за рекомендациями по кодированию и участию в этом проекте.
Нормы поведения
Прежде всего, SQLAlchemy уделяет большое внимание вежливому, вдумчивому и конструктивному общению между пользователями и разработчиками. Пожалуйста, ознакомьтесь с нашим действующим Кодексом поведения на странице Кодекс поведения.
Лицензия
Dogpile распространяется по лицензии MIT.