Руководство пользователя на нескольких API приложений без гражданства


Мы хотим сделать наш API апатридным.

Сейчас токены для пользователей предоставляются через 3-ю сторону, при входе в систему, и хранятся в памяти приложения.

Пока маркер используется, он действителен. до тех пор, пока он не будет простаивать в течение настраиваемого периода времени.

На стороне третьей стороны (поставщика токенов) этот токен действителен гораздо дольше (например: месяц на их стороне независимо от использования против 20 минут простоя на наш).

Означает, что каждое использование этого маркера обновляет метку времени в памяти приложения.

При создании нашего API без состояния я столкнулся с проблемой:

Предполагая, что у нас будет несколько приложений и балансировщик нагрузки, как мне поддерживать управление пользователями между двумя приложениями?

Я знаю, как восстановить профиль пользователя / детали, если маркер не находится в памяти приложения (но все еще действителен на стороне 3-й стороны), но я не могу знать отметка времени его последнего использования.

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

Я надеюсь, что мое объяснение достаточно ясно.

Мои вопросы таковы:

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

Спасибо заранее

1 2

1 ответ:

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

Таким образом, другое решение, которое я могу предложить, вероятно, использует инструмент, который обеспечивает совместное использование памяти между процессами и машинами. Например, вы можете использовать Hazelcast. Это очень легко начать инструмент с очень удобный API. Если, например, вы храните отображение от маркера к метке времени в карте, теперь единственное, что вам нужно изменить, - это место, где вы создаете карту. Используйте Hazelcast map factory вместо new HashMap<>() , и ваши токены будут волшебным образом распределены между вашими приложениями.