首页 > 解决方案 > 如何通过负载均衡策略更好地利用本地缓存?

问题描述

我有一个身份验证服务,我需要缓存一些用户信息以获得更好的性能。我选择使用本地缓存,因为可能会在每个请求上调用身份验证服务,所以我希望它超级快。与远程缓存选项相比,本地缓存要快得多(本地缓存访问时间低于 1 毫秒,而远程缓存访问时间约为 25 毫秒)。

问题是我无法缓存与分布式缓存一样多的信息而不会耗尽内存(谈论数百万用户)。我可以保持原样,当本地缓存达到内存限制时,它会驱逐一些其他数据,但这将是缓存的糟糕优化。或者我可以使用某种负载均衡器策略,其中用户将根据其 IP 地址或其他标准重定向到相同的身份验证服务实例,因此缓存命中率会高得多。

这有点违背了拥有无状态服务的目的,但是我认为如果我想要一致性和可用性,我可以在网络层稍微妥协这一原则。至于身份验证,两者对于完全安全都至关重要(用户信息必须始终是最新且可用的)。

什么样的负载平衡技术可以解决这类问题?可以有其他解决方案吗?

注意:尽管这个问题是特定于身份验证的,但我认为许多其他经常访问且需要速度的服务可以从使用本地缓存中受益匪浅。

标签: authenticationcachingarchitecturemicroservicesload-balancing

解决方案


所以 - 在这里回答这个问题 - 负载均衡器可以用他们的散列算法来处理这个问题。

我经常使用 Azure,所以我以 Azure 负载均衡器为例:

从文档:

基于哈希的分发模式

Azure 负载均衡器的默认分发模式是五元组哈希。

元组由以下部分组成:

  • 源 IP
  • 源端口
  • 目标 IP
  • 目的端口
  • 协议类型

哈希用于将流量映射到可用服务器。该算法仅在传输会话中提供粘性。同一会话中的数据包被定向到负载平衡端点后面的同一数据中心 IP。当客户端从相同的源 IP 启动新会话时,源端口会更改并导致流量转到不同的数据中心端点。


推荐阅读