Кэширование данных аутентификации - PullRequest
0 голосов
/ 09 апреля 2010

В настоящее время я внедряю веб-сервис REST с использованием CouchDB и RESTlet. Уровень RESTlet в основном предназначен для аутентификации и некоторой незначительной фильтрации данных JSON, обслуживаемых CouchDB:

Клиенты <= HTTP => [RESTlet <= HTTP => CouchDB]

Я также использую CouchDB для хранения данных для входа пользователя, потому что я не хочу добавлять дополнительный сервер базы данных для этой цели. Таким образом, каждый запрос к моему сервису вызывает два запроса CouchDB, выполняемых RESTlet (данные аутентификации + «реальный» запрос). Чтобы максимально повысить эффективность службы, я хочу уменьшить количество запросов, в данном случае избыточных запросов на данные для входа.

Моя идея сейчас состоит в том, чтобы предоставить кеш (i.e.LRU-Cache через LinkedHashMap) в моем приложении RESTlet, которое кэширует данные для входа в систему, потому что HTTP-кэширования, вероятно, будет недостаточно. Но как мне сделать данные кеша недействительными, например, когда пользователь меняет пароль? Благодаря REST приложение может работать на нескольких серверах параллельно, и я не хочу создавать центральный экземпляр только для кэширования данных для входа.

В настоящее время я сохраняю запрошенные данные аутентификации в кеше и пытаюсь авторизовать новые запросы, используя их. Если аутентификация не удалась или теперь есть доступная запись, я отправлю запрос GET в мое хранилище CouchDB, чтобы получить фактические данные аутентификации. Так что в худшем случае пользователи, которые изменили свои данные, возможно, все еще смогут войти в систему со своими старыми учетными данными. Как я могу справиться с этим?

Или какова хорошая стратегия для поддержания кеша (ов) в актуальном состоянии в целом?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 апреля 2010

Распределенный кэш в памяти, такой как memcached, может быть тем, что вы ищете. Вы можете настроить возраст объекта, размер кэша, а также предоставить обратные вызовы для удаления определенных объектов из кэша (например, когда информация устарела).

1 голос
/ 11 апреля 2010

Мне кажется, вы выросли достаточно далеко, чтобы использовать какое-то "профессиональное" решение для кэширования (например, EHCache ).Все распределенные кэши позволяют реплицировать и аннулировать новые данные между различными узлами, поэтому ваша проблема уже решена.

...