在节点中设置分布式缓存
Posted
技术标签:
【中文标题】在节点中设置分布式缓存【英文标题】:Setting up distributed caching in node 【发布时间】:2021-06-22 02:38:00 【问题描述】:我有一个应用程序,我必须在其中获取用户列表。获取列表的 API 需要一个身份验证令牌,该令牌每 1 小时过期一次。因此,为了获取用户,我首先需要进行令牌调用并发布我需要进行获取调用的信息。如何在 Node 中缓存 1 小时有效的令牌?我们有多个 pod,所以我需要一个分布式缓存来确保令牌值在各个 pod 中是相同的。是否可以在node
中实现它以及如何实现它?任何类型的资源/教程都会很有帮助。
【问题讨论】:
你想做什么? Node.js 是在获取令牌后需要凭据才能访问其他服务的客户端吗?为什么所有进程都需要具有相同的令牌 - 它们不能都有自己的单独的同时有效的令牌吗? @RobertKawecki 实际上,我们正在访问一些第三方服务,该服务提供了可用于访问其 API 的令牌。令牌每 1 小时过期一次。因此,为了保存令牌调用并每次发布 API 调用,我正在考虑将令牌存储在节点中,这样可以保存来自每个客户端的令牌调用。 【参考方案1】:所以你正在调用一个外部服务,但你需要一个你必须首先获得的有效令牌。
看看现有软件如何解决这个问题。例如,微软的 Graph API SDK(也使用不记名令牌认证): https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/docs/CustomAuthenticationProvider.md
您注入一个“身份验证提供程序”,在必要时从远程服务中进行身份验证和检索令牌。接下来,当您需要调用 API 时,客户端会检查它是否有内存中的令牌。如果没有(或者过期),它会向身份验证提供者请求一个新的令牌。所以,内存缓存层在客户端对象中。
另一种方法是内存缓存,但在 Authentication Provider 层——然后,客户端每次都可以盲目地向它请求令牌,并让 Provider 决定是使用当前令牌还是请求新令牌。
我会避免将令牌放在网络可访问的缓存中 - 它会为泄漏令牌打开一个潜在的安全漏洞,并且似乎没有任何用途。
【讨论】:
以上是关于在节点中设置分布式缓存的主要内容,如果未能解决你的问题,请参考以下文章