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

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

现在我想通过普通的HTTP POST来接受这些日志条目。 在这一点上,Web服务将logging到数据库中。

我在Node.jsAkka之间的栅栏上。 主要是因为我有Java和JavaScript的经验。 但是我对Akka的演员模式是新的,我读过Node并不是真正的并行,除非你运行多个节点服务器?

我的逻辑是这样的:

1)应用程序POST日志条目到服务器

2)服务器采取HTTP请求,并创build一个Amazon SQS条目(或Azure服务总线…没有决定)

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

我认为这将允许真正快速的input,但调用SQS操作将是一个长期的IO过程。

我的另一个想法是接受POST请求,将其存储在memcached或Redis中,然后让工作人员从caching中拉出,发送到SQS,然后清除队列中的数据库插入。 这将具有HTTP请求尽可能快地传递数据的优点,并让其他工作人员处理logging。

这听起来像Akka的工作,因为我可以不分配每个请求的演员,然后让它产生其他演员来处理它进/出caching?

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

所以我的问题是如何最好地处理我将得到的海量数据。 我关心线程locking,http阻塞等

从结构上讲,将入站日志数据卸载到队列以进行下游处理(过滤,分析,推送到数据库,无论如何)是正确的方法。 如果您关心音量和缩放比例,那么您将需要一个较轻的基于TCP协议的入站端。 HTTP,虽然方便,但对于直接的数据传输来说,这是非常可怕的。 (至less处理入站数据的服务器端组件应直接从套接字连接中读取,这在HTTP POST处理过程中通常不会发生。)