NodeJS记录服务设计

时间:2015-01-19 22:38:43

标签: node.js mongodb

我需要使用NodeJS和Mongo编写日志服务。 它每秒至少获得10,000个http请求,我无法丢失数据。 我正在使用带有负载均衡器的多个服务器,每个服务器也使用集群进行扩展。 有没有人有不丢失数据的想法? 我想也许我可以将请求保存在队列中(sqs),并且每个时间间隔读取消息并向db插入批量,如果失败将其保留在队列中,那么我不会丢失数据。 所有服务器都可以读写同一个队列吗? 有没有人有更好的主意? 感谢。

1 个答案:

答案 0 :(得分:2)

这是一个相当含糊的问题,但你正在考虑正确的思路。

如果您的主要目标是不丢失日志数据并保持高吞吐量,那么总是尝试接收任何传入数据,将其转储到队列中,并尽快返回成功的响应可能的。

这将最大限度地减少处理每个请求所花费的时间,提高应用程序吞吐量,并通常提高可靠性。

一旦你的数据进入像SQS这样的排队系统,你绝对可以运行一个只进行批量数据库插入的后台进程。

如果您的日志数据是< 64kb,您可能需要考虑使用DynamoDB之类的解决方案来存储生成的日志数据。执行INSERTS非常快,具有非常低的延迟(因为它在AWS上运行,就像SQS一样),并且可以扩展以轻松处理吞吐量。