我正在编写一个用于绘制和分析大量日志数据的应用程序。基本上,我们的应用程序(Web、Tomcat、控制台等)将具有自定义log4j
附加程序,将日志条目发送到我们的远程服务器。
现在我想通过普通的 HTTP POST 接受这些日志条目。此时,Web 服务会将条目记录到数据库中。
我在 和 之间的栅栏Node.js
上Akka
。主要是因为我在 Java 和 JavaScript 方面都有经验。但是我是 Akka 的演员模式的新手,我读过 Node 不是真正并行的,除非你运行多个 Node 服务器?
我的逻辑是这样的:
1) 应用程序 POST 日志条目到服务器
2)服务器接受 HTTP 请求并创建一个 Amazon SQS 条目(或 Azure 服务总线..尚未决定)
3)工人清理队列并将条目存储在数据库中。
我认为这将允许非常快速的输入,但调用 SQS 操作将是一个漫长的 IO 过程。
我的另一个想法是接受 POST 请求,将其存储在 memcached 或 Redis 中,然后让工作人员从缓存中提取,发送到 SQS,然后清理数据库插入队列。这将具有 HTTP 请求尽可能快地传递数据并让其他工作人员处理记录的优势。
这显然听起来像是 Akka 的工作,因为我不能为每个请求分配一个 Actor,然后让它产生其他 Actor 来处理将其移入/移出缓存吗?
在测试阶段,我可以很容易地看到一次有 20 到 500 个请求。取决于我们在测试中打开了多少应用程序。但是一旦完全运行,我可以看到每秒有数千个请求来自我们拥有的所有应用程序。
所以我的问题是如何最好地处理我将获得的大量数据。我关心线程锁定、http阻塞等。