高性能的Web服务器,没有数据库交互性

我准备设置一个服务器,负责跟踪来自高stream量来源的统计数据。 平均每小时6-7米/小时处理请求,所有这些都是小GET。 我所需要的只是一个简单的服务器设置,可以处理get请求的参数并将其写入CSV文件。

我的第一个想法是使用lighttpd + fastcgi + php,因为这是我已经熟悉的configuration。 但是,考虑到我不能每天都做出这样的performance决定,我想探索一些其他的select,看看是否有更好的办法来达到这个目的。

您希望每小时对CSV文件执行6-7百万次写入操作?

认真的说,一个数据库是一个更好的主意。 数据库旨在处理并发写入,并且可以垂直扩展(更大的机器,更快的磁盘)或水平扩展(负载分布在多个服务器上)。 写入单个CSV文件(或任何文件)需要某种forms的locking来处理并发问题,并且随着IO负载和并发性的增加而缩小。

为了解决这个问题,你最终可能会实现自己的caching和缓冲层,然后开始分割多个文件之间的负载等等。从一开始就使用某种types的数据库,为自己节省很多麻烦。

考虑到你将在AVERAGE上做大约2000次请求/秒或500μs/请求(意味着高得多的峰值),由于没有任何东西保证文件中的primefaces写入,所以CSV可能是不合格的,

一个想法是每个进程/每个writer文件在稍后收集,另一个想法是使用数据库大量调整大量的写入。 你也可以看一下消息队列或组通信协议(例如Spread ),但我不知道他们是否达到了这个数量。

不pipe你做什么,把一些快速的想法和基准。 目前的硬件可以做性能奇迹,只有在需要时才进行优化。 至于PHP – 一定要安装一个操作码caching(例如APC ),否则在不必要的重新编译脚本的情况下会烧掉很多周期。

另外请记住,服务的增长是怎样的,几乎没有任何意义的解决scheme将在几个月内被压垮。

什么样的参数通过GET请求传递? 它是否需要在CSV /数据库实时? 或者你认为你可以创build一个虚拟的HTML文件(或PHP),只是使用networking日志得到parsing,并在稍后作为批处理工作转储到CSV? (好吧..这听起来令人费解..但容易处理)..

也许这是你无法控制的,但是Web服务器真的是这个工具的正确工具吗?

我会看看服务器2008年networking版,并使用ADO.net写入CSV文件。 你不应该有一个输出问题,因为ado.net会缓冲写入。

我没有看到如何(甚至是半)可靠地用单个(多less有点便宜的)服务器做到这一点。 如果你所做的只是parsing获取参数,那么最好的方法就是获得一个像gatling这样的高性能的轻量级开源HTTP服务器,然后将它logging到像兔子这样的快速队列中。

然后你可以有一个从这个队列中读取的作者,并且按照紧密的循环顺序写入这个文件。

通过这种方式,您可以确保写入操作是primefaces级的,同时能够水平扩展可能的昂贵部分(parsing和排队)。

“一个请求的CPU周期”肯定比一个服务器只写一个文件要慢,但当stream量压倒一台机器时,它仍然可靠,如果最后的顺序写入器被淹没,甚至不会丢失数据一段时间。

Nota bene:(a)直观上昂贵的代码不必如此,代码探索性和简介性。 (b)你确定你不想问在stackoverflow的精细编程专家吗? 我们大多在这里做系统。

对于Web部分,我会使用Nginx(lighttpd正在变老;)

对于数据:

这种工作的最佳方式是寻找类似于MapReduce的东西。 Hadoop是MapReduce的免费实现。

只需将统计信息存储到简单文件中,然后将其批量存储在HBase(Hadoop的一部分)等键/值系统中。

那么你有一个完全冗余(感谢HDFS)和可扩展的解决scheme,可以处理PB级的数据。