Руководство пользователя на нескольких API приложений без гражданства
Мы хотим сделать наш API апатридным.
Сейчас токены для пользователей предоставляются через 3-ю сторону, при входе в систему, и хранятся в памяти приложения.
Пока маркер используется, он действителен. до тех пор, пока он не будет простаивать в течение настраиваемого периода времени.
На стороне третьей стороны (поставщика токенов) этот токен действителен гораздо дольше (например: месяц на их стороне независимо от использования против 20 минут простоя на наш).
Означает, что каждое использование этого маркера обновляет метку времени в памяти приложения.
При создании нашего API без состояния я столкнулся с проблемой:
Предполагая, что у нас будет несколько приложений и балансировщик нагрузки, как мне поддерживать управление пользователями между двумя приложениями?
Я знаю, как восстановить профиль пользователя / детали, если маркер не находится в памяти приложения (но все еще действителен на стороне 3-й стороны), но я не могу знать отметка времени его последнего использования.
Я думаю, что мне нужно либо синхронизировать кэш между моими приложениями, либо управлять пользователями на другой службе.
Я надеюсь, что мое объяснение достаточно ясно.Мои вопросы таковы:
- какова наилучшая практика в этом вопросе?
- где можно найти полезную информацию об управлении пользователями в нескольких приложениях? Я думаю, что в данном случае мне трудно подобрать ключевые слова.
Спасибо заранее
1 ответ:
С архитектурной точки зрения предпочтительнее отдельный пользовательский менеджер. В этом случае вы никогда не обратитесь к стороннему поставщику токенов напрямую, а сделаете это через своего собственного менеджера, который хранит токены и метки времени. Однако это, вероятно, потребует серьезного рефакторинга.
Таким образом, другое решение, которое я могу предложить, вероятно, использует инструмент, который обеспечивает совместное использование памяти между процессами и машинами. Например, вы можете использовать Hazelcast. Это очень легко начать инструмент с очень удобный API. Если, например, вы храните отображение от маркера к метке времени в карте, теперь единственное, что вам нужно изменить, - это место, где вы создаете карту. Используйте Hazelcast map factory вместо
new HashMap<>()
, и ваши токены будут волшебным образом распределены между вашими приложениями.