Проверка подлинности RESTful - приводит к снижению производительности при высокой нагрузке?

Для веб-службы RESTful мы говорим, что сервер не должен сохранять какое-либо состояние. Теперь для каждого запроса «пользователь» должен быть аутентифицирован и должен иметь разрешение на действия, которые он / она хочет выполнить.

Теперь каждый запрос будет содержать данные авторизации для этого пользователя. Вот мои недоразумения:

Предполагается, что на домашней странице есть поле для логина и пароля. Пользователь вводит имя пользователя / пароль, который отправляется обратно на сервер, проверяется пользователем, а затем возвращается «некоторый токен». Теперь этот токен отправляется на сервер при каждом запросе. Вопрос (ы):

  • Требуется ли для серверной БД отдельная таблица для хранения этих токены, проиндексированные по имени пользователя?
  • Предполагая, что токен хранится в БД, каждый запрос должен вызывать БД. Разве это не делает сервер БД узким местом во время высокой нагрузки?
  • Если токен на самом деле не хранится в БД, каково наилучшее «спокойное» место для его хранения?
  • Сессии, вероятно, НЕ успокаивают, но тогда я не вижу, насколько спокойная аутентификация / авторизация увеличивается (по сравнению с вышеупомянутые пункты)?
  • Если это НЕ токен, тогда нужно ли отправлять имя пользователя / пароль назад и вперед? (звучит как плохая идея :)

Возможно, я неправильно понимаю концепцию аутентификации / авторизации RESTful. Но действительно ли это так, что для каждого HTTP-запроса "служба" нужно совершить поездку в БД для проверки учетных данных? Есть ли что-то, что может сократить этот процесс и при этом оставаться верным успокаивающим принципам? Я мог бы подумать о том, чтобы иметь кеш, в котором хранятся детали, и в случае перезапуска сервера он просто отправляется в БД. Это просто повышение производительности, которое может усложнить систему (возможно, оно того стоит, не знаю). Это единственное решение?

Итак, с теоретической / концептуальной точки зрения REST (не обязательной реализации), как решается эта проблема (если это вообще проблема)? Как вы в своем профессиональном опыте справились с этой проблемой и насколько Restful был подходом?

Мы работаем над веб-службой Restlet + J2EE + MySQL Restful, и у меня возник этот вопрос, но удовлетворительных ответов нет (Google, Stackoverflow и т. Д. ,) Я знаю об авторизации HTTP Basic и Digest, но я не знаком с внутренним устройством хранения / извлечения в соответствии с приведенным выше объяснением.

15
задан PhD 4 March 2011 в 21:37
поделиться