0

是否有一个异步写入的 PHP 命令(因为我不在乎何时写入数据,这具有非常低的优先级。)

我在服务器上托管 1,300 个域。我知道很多。但是每个都占用很少的内存,很少的 CPU,很少的带宽。瓶颈是随机写入。太多随机写入(和随机读取)。服务器是Linux。

我在这里读到:

因此,SYNC-reads 和 ASYNC-writes 通常是一个很好的方法,因为它们允许内核优化底层 I/O 请求的顺序和时间。

你去吧。我敢打赌,您现在在演讲中关于改进磁盘 IO 有很多话要说。;-)

大多数写入只是缓存文件。如果偶尔出错,我什么也不会丢失。基本上我想设置我的系统,以便大多数读写都进入内存,然后当我希望我的服务器以顺序块将数据写入我的磁盘时。

我有大量的内存可以用作缓存。在 Windows 中,我使用超级缓存来执行此操作,并且一切加载速度更快。那里的人说 Linux 已经有了块缓存。好吧,块缓存不起作用,我仍在研究如何使大多数写入首先进入内存,以便仅偶尔刷新数据。

现在,我只想修改我的 PHP 程序,这样当它写入数据时,它会告诉内核“以后再写几次,我可以等待,我不介意”。

有选择吗?我可以使用 SSD,但它们很小。

4

1 回答 1

2

如果大部分写入活动是由于缓存造成的,那么我将使用 apc 或 memcached 作为缓存的后端,而不仅仅是文件系统。任何必须持久化到文件系统的写入都可以单独处理,而不会发生竞争缓存 io 撞击磁盘。唯一需要考虑的是您的缓存现在在内存中,它将在重新启动后清空,如果这会导致性能问题,您可能需要实施缓存预热过程。

大多数主要的 PHP 框架都将 memcached 和 apc(即Zend 框架)作为其缓存模块的可用存储适配器,因此这将是我的首选。如果你不能直接使用memcachedapc扩展。

另一种选择是考虑实现一个队列,您可以将待处理的写入发送到该队列。然后,该队列可以由以可接受的速率执行写入的计划任务定期处理。我过去曾出于类似目的使用Zend_Queue

于 2013-01-27T11:33:09.860 回答