gpt4 book ai didi

node.js - NodeJS - 动态响应的缓存

转载 作者:搜寻专家 更新时间:2023-11-01 00:07:09 24 4
gpt4 key购买 nike

我面临设计问题,其中我想减少 API 服务器的延迟,因为它根据传递的参数对请求的文件进行大量处理。

此服务器需要将已处理的文件提供给许多 http 客户端。请注意,这些动态内容是原始文件名和其他参数的结果。 在任何一个时间点,许多 http 客户端的原始文件名和其他参数都可能完全匹配。因此,为了节省冗余,此处理必须恰好完成一次。

我目前正在使用基于 Redis 的分布式锁来实现这一点。

  • 避免这种停顿的更好方法是什么?

现在为了降低带宽成本;我处理这些文件并将它们上传到 CDN。并最终将重定向请求中的 processed-final-URL 传递给所有相关方,即 http 客户端。

  • 我怎样才能使它完全非阻塞?

根据一些阅读,我发现 nsq.io 可以通过为文件和参数的每个独特组合创建动态主题来解决这个问题。但是 http 客户端如何以非阻塞方式使用结果。请注意,我对 HTTP 客户端没有任何控制权,即我无法在客户端更改任何内容来解决此问题。

最佳答案

我不确定你是如何使用你的锁的。

这是我会做的,

1. check redis for (file, params) (see if already processed)
1.1 if not check redis for (processing - file, params) (see if processing)
1.1.1 if so, wait for (file, params)
1.1.2 if not, put (processing -file, params) and start making the (file, params) result

(since this is non-atomic, you could process multiple times in the time window, but maybe better than constant locking/unlocking, I think the important idea is that you would want to implement "lock" concept for each resource, so that requests to different requests wouldn't have to acquire the lock.)

  1.2 if so, serve the contents

阻塞/非阻塞是你在服务器端应用的,客户端与它无关。
你让你的服务器套接字(操作)成为非阻塞的。
你如何做取决于你的服务器使用什么框架/库。
现在我看到你正在使用 node.js,node.js 不是已经在使用非阻塞套接字了吗?

关于node.js - NodeJS - 动态响应的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31997099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com