Memcached - система распределённого хранения данных в оперативной памяти, изначально разработанная для сервиса LiveJournal.com. Основные преимущества системы включают в себя: значительное уменьшение нагрузки на реляционные базы данных, и лёгко-масштабируемую систему.
Процессы аутентификации, авторизации, учёта и аудита, сейчас необходимы для работы большинства веб-приложений, но в тоже время классические схемы реализации, создают высокую нагрузку на RDBM, либо для её уменьшения затрат часть функций либо исключается, либо переносится, на автономно работающие модули, как правило это аудит.
Модуль Apache2::AuthCookie позволяет на уровне событий веб-сервера Apache, осуществлять авторизацию и аутентификацию пользователей, аудит осуществляется стандартными средствами Apache, например:
192.168.1.4 - wise [18/May/2008:18:16:38 +0600] "GET /favicon.ico HTTP/1.1" 404 277в последствии делая анализ логов. Учет в большинстве случаем, если он необходим, просто осуществлять на уровне авторизации.
192.168.1.4 - wise [18/May/2008:18:16:39 +0600] "GET /files?start=6 HTTP/1.1" 200 5760
192.168.1.4 - - [18/May/2008:18:16:39 +0600] "GET /ru/css/main.css HTTP/1.1" 200 5096
192.168.1.4 - wise [18/May/2008:18:16:39 +0600] "GET /favicon.ico HTTP/1.1" 404 277
192.168.1.4 - wise [18/May/2008:18:16:40 +0600] "GET /files?start=1 HTTP/1.1" 200 7528
192.168.1.4 - - [18/May/2008:18:16:41 +0600] "GET /ru/css/main.css HTTP/1.1" 200 5096
Учётные записи в моем примере реализации хранятся в БД PostgreSQL, небольшой модуль для работы с Memcached базирующийся на модуле Apache2::AuthCookie, выполняет аутентификацию, использую БД, генерацию ключа сессии, получение из БД специфических для пользователя переменных, необходимых для работы сессии, но являющимися данными для временного характера, и помещение их в массив памяти с ключам сессии.
Авторизация осуществляется путём проверки наличия наличия данных на любом сервере memcached. Что по сути являются достаточно быстрой операцией, что очень важно, потому-что авторизацию необходимо осуществляет при любом запросе пользователя.
Таким образом, за все время работы пользователя, запросы к БД осуществляются всего один раз.
Хранение определённых параметров пользователя не требует как правило больших затрат памяти на одного пользователя, и зависит только от организации данных, у меня это максимум 1Кб. Но при необходимости эту цифру можно увеличивать, вопрос только в количестве физической памяти выделяемой, на реализацию, при этом желательно учест тот факт что клиент memcached выполняет асинхронные запросы, поэтому поиск на двух серверах с 2Gb памяти, будет выполнятся быстрей, чем на одном 4Gb.
При этом выделять для не идентифицированных пользователей, выделять память необходимости нет. И расчёт требуемого объёма памяти определяется из пикового количества одновременно находящихся на сервере пользователей.
Memcached, кроме AAA, может быть задействован, для кеширования результатов SQL запросов, хранения временных проверочных ключей, скомпилированных шаблонов, и других данных которые не имеют необходимости в постоянном хранении, и существует механизмы их регенерации.
Немного о железном обеспечении memcached серверов, они требовательны к объёму памяти, но минимально требовательны к ресурсу процессора, и могут быть использованы, совместно, вместе с самим веб-приложением, которое наоборот требуют ресурсы процессоров, но не требуют больших объёмов памяти, желательная установка двух в паре работающих серверов, являющихся копиями друг друга, для обеспечения высоко доступного сервиса.
