Amazon SQS 是处理分析日志数据到数据库的好工具吗?
Is Amazon SQS a good tool for handling analytics logging data to a database?
我们有几个 nodejs 服务器,其中每个请求的详细信息和有效负载需要记录到 SQL 服务器以进行报告和其他业务分析。
服务器之间请求的数量和需求的相似性让我想通过集中式日志记录服务来解决这个问题。我的第一直觉是使用 Amazon SQS 之类的东西,让它直接充当 SQL 服务器的缓冲区,或者构建一个小型日志记录服务器,由 SQS 直接调用数据库。
这听起来像是 SQS 的好用处,还是我缺少用于此任务的广泛使用的工具?
解决方案实际上取决于您处理的数据量,因为每项服务都有限制。仅举几例:
SQS
- 首先,因为您正在处理日志,所以您不希望出现重复。考虑到这一点,您需要 FIFO (first in first out) queue.
- SQS 本身并没有真正调用任何东西。您在这里要做的是设置队列,然后调用以通过 AWS JS SDK 提交消息。然后,当您在回调中收到消息时,获取消息 ID 并将该数据传递给调用的 Lambda 函数(您也可以在 NodeJS 中编写这些函数),该函数将您需要的信息存储在数据库中。
- 也就是说,了解 SQS 队列中的消息有大小限制很重要:
The minimum message size is 1 byte (1 character). The maximum is
262,144 bytes (256 KB).
To send messages larger than 256 KB, you can use the Amazon SQS
Extended Client Library for Java. This library allows you to send an
Amazon SQS message that contains a reference to a message payload in
Amazon S3. The maximum payload size is 2 GB.
CloudWatch 日志
(不要与高级云监视服务本身混淆,后者更多的是发送指标)
- 这里的想法是您将事件数据提交到 CloudWatch 日志
- 这里也是有限制的:
Event size: 256 KB (maximum). This limit cannot be changed
- 与 SQS 不同,CloudWatch 日志可以自动将日志数据传递给 Lambda,然后可以将其写入您的 SQL 服务器。 AWS 文档 explain how to set that up.
S3
只需设置一个存储桶,然后让您的服务器向其中写入数据。这里的好处是,由于 S3 用于存储大文件,您真的不必担心前面提到的大小限制。 S3 存储桶也有可以 trigger lambda functions 的事件。然后就可以愉快的继续发送logo数据了。
如果您的日志数据变得足够大,您可以扩展到 AWS Batch 之类的东西,它会为您提供一个可用于处理日志数据的容器集群。最后,您还可以获得数据备份。如果您的数据库出现故障,您已将日志数据存储在 S3 中,并且可以将脚本放在一起以加载所有内容。您还可以使用 Lifecycle Policies 将旧数据迁移到成本较低的存储,或者直接将其全部删除。
我们有几个 nodejs 服务器,其中每个请求的详细信息和有效负载需要记录到 SQL 服务器以进行报告和其他业务分析。
服务器之间请求的数量和需求的相似性让我想通过集中式日志记录服务来解决这个问题。我的第一直觉是使用 Amazon SQS 之类的东西,让它直接充当 SQL 服务器的缓冲区,或者构建一个小型日志记录服务器,由 SQS 直接调用数据库。
这听起来像是 SQS 的好用处,还是我缺少用于此任务的广泛使用的工具?
解决方案实际上取决于您处理的数据量,因为每项服务都有限制。仅举几例:
SQS
- 首先,因为您正在处理日志,所以您不希望出现重复。考虑到这一点,您需要 FIFO (first in first out) queue.
- SQS 本身并没有真正调用任何东西。您在这里要做的是设置队列,然后调用以通过 AWS JS SDK 提交消息。然后,当您在回调中收到消息时,获取消息 ID 并将该数据传递给调用的 Lambda 函数(您也可以在 NodeJS 中编写这些函数),该函数将您需要的信息存储在数据库中。
- 也就是说,了解 SQS 队列中的消息有大小限制很重要:
The minimum message size is 1 byte (1 character). The maximum is 262,144 bytes (256 KB).
To send messages larger than 256 KB, you can use the Amazon SQS Extended Client Library for Java. This library allows you to send an Amazon SQS message that contains a reference to a message payload in Amazon S3. The maximum payload size is 2 GB.
CloudWatch 日志
(不要与高级云监视服务本身混淆,后者更多的是发送指标)
- 这里的想法是您将事件数据提交到 CloudWatch 日志
- 这里也是有限制的:
Event size: 256 KB (maximum). This limit cannot be changed
- 与 SQS 不同,CloudWatch 日志可以自动将日志数据传递给 Lambda,然后可以将其写入您的 SQL 服务器。 AWS 文档 explain how to set that up.
S3
只需设置一个存储桶,然后让您的服务器向其中写入数据。这里的好处是,由于 S3 用于存储大文件,您真的不必担心前面提到的大小限制。 S3 存储桶也有可以 trigger lambda functions 的事件。然后就可以愉快的继续发送logo数据了。
如果您的日志数据变得足够大,您可以扩展到 AWS Batch 之类的东西,它会为您提供一个可用于处理日志数据的容器集群。最后,您还可以获得数据备份。如果您的数据库出现故障,您已将日志数据存储在 S3 中,并且可以将脚本放在一起以加载所有内容。您还可以使用 Lifecycle Policies 将旧数据迁移到成本较低的存储,或者直接将其全部删除。