Как обрабатывать сессии на нескольких серверах учетных записей / при горизонтальном масштабировании? - PullRequest
1 голос
/ 01 июля 2019

Я работаю над веб-приложением и хочу сделать это должным образом, поэтому я не забываю о масштабируемости. Одна вещь, которая поражает меня, - это то, как обрабатывать сессии на нескольких серверах.

Краткий пример:
Допустим, Анна входит на мою веб-страницу и балансировщик нагрузки перенаправляет ее на сервер X . Сервер X хранит данные Анны и вскоре после Анна закрывает веб-страницу.
Примерно через 10 минут Анна снова открывает страницу и перенаправляется на сервер Y . Ее сеанс должен быть еще жив.

Откуда сервер Y знает, что это она?

  │
  ├── Anna ─> load-balancer ─> Server X ─> Session Data on X
  │
10 mins pass
  │
  └── Anna ─> load-balancer ─> Server Y ─> How to get session data on X?

  • Есть ли возможность обслуживать аутентифицированные запросы API без сеанса?
  • Лучше ли хранить данные сеансов в центральной базе данных?
  • Есть ли другое распространенное решение, которое я не знаю, как искать?

Я очень благодарен за любые ответы, особенно если это касается приложений для узлов и экспрессов. В общем, я ищу наилучшее практическое решение, так как я очень хочу учиться.

1 Ответ

2 голосов
/ 01 июля 2019

Для этого сценария есть несколько параметров, которые вы можете проверить:

  1. Если вам нужно хранить токены доступа (oauth), вы можете использовать redis, быструю базу данных для проверки токена любым узломСервер .js в каждом запросе (https://redis.io)
  2. . Вы можете использовать JWT, в этом случае токен защищен благодаря вычисленному знаку (https://www.npmjs.com/package/jsonwebtoken)
  3. Использовать липкие сеансы, в которыхесли каждый пользовательский запрос будет отправляться на один и тот же сервер. НЕ рекомендуется

Для шагов 1 и 2 вы можете отправить токен в заголовке http Authorization

...