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

时间:2016-03-06 19:26:38

标签: rest session asp.net-web-api token stateless

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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