【问题标题】:Server constantly running a function to update a cache, will it block all other server functions?服务器不断运行更新缓存的功能,它会阻塞所有其他服务器功能吗?
【发布时间】:2018-10-20 00:36:13
【问题描述】:

大约每分钟一次,我需要缓存来自各种加密货币交易所的所有订单。有数百个订单簿,因此此更新功能可能永远不会停止运行。

我的问题是:如果我的服务器一直在运行这个订单簿更新功能,它会阻止所有其他服务器功能吗?用户将能够与我的服务器交互吗?

我是否需要创建一个单独的服务来执行更新,或者 Node 可以以某种方式优先处理 API 请求并暂停缓存功能?

【问题讨论】:

    标签: node.js service redis architecture microservices


    【解决方案1】:

    这是一个非常开放的问题,很大程度上取决于您的系统。一般来说,您的服务器应该能够处理并发请求,但有一些事情需要注意。

    性能成本。如果检索和存储数据的操作需要过多的计算能力,那么这将对服务器处理的所有请求造成压力。

    数据库连接。服务器花费大量时间等待数据库查询完成。如果整个应用程序有一个数据库连接,并且这个连接很忙,他们将不得不等到数据库连接空闲。您可能想查看数据库连接“池”。

    【讨论】:

      【解决方案2】:

      我的问题是:如果我的服务器一直在运行这个订单簿 更新功能,它会阻止所有其他服务器功能吗?将要 用户可以与我的服务器交互吗?

      如果您正在异步编写,这些操作将进入您的事件循环,并且您的节点服务器将在执行这些操作时从事件循环中选择下一个事件。如果你有太多这样的事件,你的事件队列会很长,用户会面临非常慢的响应,甚至可能会超时

      我是否需要创建一个单独的服务来执行更新,或者可以 Node 以某种方式优先处理 API 请求并暂停缓存功能?

      节点只使用事件队列中的事件。没有优先事项。

      从设计的角度来看,您应该寻找可以减少这种写入负载的选项,例如 bulkCreate/edit,或者如果您使用 redis 进行缓存,请考虑 redis pipeline

      【讨论】:

      • 你能帮我了解一下 redis 管道有什么帮助吗?似乎我会进行所有 API 调用,将响应写入内存中的 javascript 对象,然后使用 redis 管道将它们批量写入我的 redis db。所以看起来写作的数量并没有改变,只是在写的时候。对吗?
      • amount 将保持不变,但编写它的时间会大大减少。
      猜你喜欢
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多