轻量级有状态服务器会话与无状态令牌(需要服务器吊销列表)



当我使用服务器有状态会话时,我总是将其用于轻量级目的,例如仅存储用户的用户ID,名称,时区和最后一页点击。对于 10,000 个用户,最终可能是 ~3MB。它没有太多内存,很容易与其他服务器保持同步,并且很容易注销/撤销会话ID。

似乎如果我使用无状态令牌(例如 JWT),我需要检查对服务器的每个请求的令牌,并查看它是否在吊销列表中。并且该吊销列表必须至少有两个字段,令牌 ID 和令牌最初有效的时间(以便最终可以删除该条目,否则吊销列表将始终增长)。此外,我确信出于安全原因,用户需要知道登录的所有会话,因此我仍然需要保留每个活动令牌的详细信息,包括它所针对的用户 ID 和令牌的最后一页点击。

那么,使用无状态令牌(需要服务器吊销列表)与轻量级有状态服务器会话相比是否有好处?

真正的无状态服务器有几个好处:

  1. 缩放。必须复制状态,无论它有多小都会限制节点的数量。

  2. 负载平衡。如果不复制状态,则必须使用粘性会话(同一用户始终连接到同一实例),这最终会导致负载不均匀。

  3. 滚动更新。逐个更新服务器时(例如,如果执行持续交付),会话复制和粘性会话都会使事情变得更加复杂,可能会完全阻止滚动更新。

无论如何,我想如果您可以安排更新的停机时间,拥有有限数量的用户,那么拥有有状态会话将不是问题,并且可能更容易实现。

这些好处适用于 JWT 等加密令牌,其中不需要服务器会话。吊销列表使事情复杂化,但由于它不需要存储在任何特定服务器上,因此不会干扰。

最新更新