我在节点js中构建了一个API服务器,它应该在高负载下工作。我基本上希望以小批量累积传入的插入请求(每个约10个项目),并且一旦批次填充,将项目插入数据库。目前我正在使用Amazon SQS作为我的队列服务,以及我设计的单独的队列使用者应用程序。但是,我想也许我可以在本地累积消息,然后直接从API插入批处理。这将消除与远程队列服务通信的开销,并且由于批处理很小,API服务器的内存不会膨胀。你怎么看?利弊?
答案 0 :(得分:0)
您提到您的服务器负载很重。如果您尝试实现队列来收集传入的请求,那么最终可能会占用服务器上的大量内存。在你具有自我扩展能力之前,它总是存在风险。您应该考虑以下事项: - 总批量 - 每个请求的最大大小 这有助于您防止内存不足问题。
其他考虑应该是: - 它是分布式/集群环境吗?如果是,那么考虑一下2个请求是否相关,你想在一个服务器上联合起来吗? - timer:你的队列有没有任何计时器机制。我可以看到我没有db插入,所以有一种情况是插入不能等待批处理完成写入db。如果是,则执行计时器以保持(无论批次是否已满) - 检查服务器是否有尖峰攻击,你的排队机制是否能够很好地处理它?任何像飙升政策的东西。 - 系统故障是否会导致丢失部分批量插入数据? - 我可以看到,通过这样做,你试图节省远程呼叫的传输时间。但是如果你阻止请求被持久化(批量),你真的关心传输时间(真正关注)吗?如果没有那么SQS更可靠&有效的解决方案。
除此之外,尝试防止系统遭受SQL注入攻击。