NodeJS日志服务设计
NodeJS logs service design
我需要使用 NodeJS 和 Mongo 编写日志服务。
它每秒至少收到 10,000 个 http 请求,而且我不能丢失数据。
我正在使用带有负载均衡器的多台服务器,每台服务器也使用集群进行横向扩展。
有没有人有不丢失数据的想法?
我想也许我可以将请求保存在队列 (sqs) 中,并且每个间隔读取消息并将批量插入数据库,如果失败则将其保留在队列中,这样我就不会丢失数据。
所有服务器都可以读取和写入同一个队列吗?
有人有更好的主意吗?
谢谢。
这是一个非常模糊的问题,但您的思路是对的。
如果您的主要目标是不丢失日志数据并保持高吞吐量,您应该始终尝试获取任何传入数据,将其转储到队列中,然后return 尽快回复成功。
这将最大限度地减少您处理每个请求所花费的时间,增加您的应用程序吞吐量,并普遍提高可靠性。
一旦您将数据放入像 SQS 这样的排队系统中,您绝对可以 运行 一个简单地执行批量数据库插入的后台进程。
如果您的日志数据小于 64kb,您可能需要考虑使用像 DynamoDB 这样的解决方案来存储生成的日志数据。它执行插入的速度非常快,延迟非常低(因为它在 AWS 上 运行ning,就像 SQS 一样),并且可以扩展以轻松处理吞吐量。
我需要使用 NodeJS 和 Mongo 编写日志服务。 它每秒至少收到 10,000 个 http 请求,而且我不能丢失数据。 我正在使用带有负载均衡器的多台服务器,每台服务器也使用集群进行横向扩展。 有没有人有不丢失数据的想法? 我想也许我可以将请求保存在队列 (sqs) 中,并且每个间隔读取消息并将批量插入数据库,如果失败则将其保留在队列中,这样我就不会丢失数据。 所有服务器都可以读取和写入同一个队列吗? 有人有更好的主意吗? 谢谢。
这是一个非常模糊的问题,但您的思路是对的。
如果您的主要目标是不丢失日志数据并保持高吞吐量,您应该始终尝试获取任何传入数据,将其转储到队列中,然后return 尽快回复成功。
这将最大限度地减少您处理每个请求所花费的时间,增加您的应用程序吞吐量,并普遍提高可靠性。
一旦您将数据放入像 SQS 这样的排队系统中,您绝对可以 运行 一个简单地执行批量数据库插入的后台进程。
如果您的日志数据小于 64kb,您可能需要考虑使用像 DynamoDB 这样的解决方案来存储生成的日志数据。它执行插入的速度非常快,延迟非常低(因为它在 AWS 上 运行ning,就像 SQS 一样),并且可以扩展以轻松处理吞吐量。