gpt4 book ai didi

java - 通过 HTTP POST 处理大量数据的有效方法是什么?

转载 作者:行者123 更新时间:2023-12-02 07:22:59 25 4
gpt4 key购买 nike

我正在编写一个应用程序,用于绘制和分析大量日志数据。基本上,我们的应用程序(Web、Tomcat、控制台等)将具有自定义 log4j将日志条目发送到我们的远程服务器的附加程序。

现在我想通过普通的 HTTP POST 接受这些日志条目。此时,Web 服务会将条目记录到数据库中。

我在 Node.js 之间犹豫不决和Akka 。主要是因为我在Java和JavaScript方面都有经验。但我对 Akka 的 actor 模式很陌生,并且我读到,除非运行多个 Node 服务器,否则 Node 并不是真正的并行?

我的逻辑是这样的:

1) 应用程序将日志条目发送到服务器

2) 服务器接受 HTTP 请求并创建 Amazon SQS 条目(或 Azure 服务总线..尚未决定)

3)工作人员清理队列并将条目存储在数据库中。

我认为这将允许非常快的输入,但调用 SQS 操作将是一个很长的 IO 过程。

我的另一个想法是接受 POST 请求,将其存储在 memcached 或 Redis 中,然后让工作人员从缓存中提取数据,发送到 SQS,然后清理数据库插入队列。这样做的优点是 HTTP 请求可以尽快传递数据,并让其他工作人员处理记录数据。

这显然听起来像是 Akka 的工作,因为我不能为每个请求分配一个 actor,然后让它生成其他 actor 来处理将其移入/移出缓存吗?

在测试阶段,我可以轻松看到一次收到 20 - 500 个请求。取决于我们在测试中打开了多少个应用程序。但一旦完全运行,我可以看到每秒有数千个请求来 self 们拥有的所有应用程序。

所以我的问题是如何最好地处理我将获得的大量数据。我关心线程锁定、http 阻塞等。

最佳答案

从架构上来说,将入站日志数据卸载到队列以进行下游处理(过滤、分析、推送到数据库等)是正确的方法。如果您担心容量和扩展,那么您将需要在入站端使用更轻量级的基于 TCP 的协议(protocol)。 HTTP 虽然方便,但对于直接数据传输来说却过于严厉。 (处理入站数据的服务器端组件至少应该直接从套接字连接读取,这在 HTTP POST 处理中通常不会发生。)

关于java - 通过 HTTP POST 处理大量数据的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com