0

非同期に書き込むPHPコマンドはありますか(データがいつ書き込まれるかは気にせず、これは非常に低い優先度です)。

サーバーで 1,300 のドメインをホストしています。私はそれがたくさんあることを知っています。しかし、それぞれが必要とするメモリ、CPU、帯域幅はごくわずかです。ボトルネックはランダム書き込みです。ランダム書き込み (およびランダム読み取り) が多すぎます。サーバーは Linux です。

私はここで読んだ:

したがって、SYNC 読み取りと ASYNC 書き込みは、カーネルが基になる I/O 要求の順序とタイミングを最適化できるため、一般的には適切な方法です。

ほらね。ディスク IO の改善について、プレゼンテーションで多くのことを述べられていると思います。;-)

ほとんどの書き込みは単なるキャッシュ ファイルです。たまに間違っていても、何も失うことはありません。基本的に、ほとんどの読み取りと書き込みがメモリに行われるようにシステムをセットアップし、サーバーがシーケンシャルブロックでディスクにデータを書き込むようにしたいと考えています。

キャッシュとして使用できる大量のメモリがあります。Windows では、スーパーキャッシュを使用してこれを行うと、すべての読み込みが速くなります。そこの人々は、Linux にはすでにブロック キャッシングがあると言っています。まあ、ブロックキャッシングは機能しません。データが時々だけフラッシュされるように、ほとんどの書き込みが最初にメモリに送られるようにする方法をまだ研究しています。

今のところ、PHP プログラムを変更して、データを書き込むときにカーネルに「将来何度か書き込むだけです。待つことができますし、気にしないでください」と伝えるようにしたいだけです。

そのためのオプションはありますか?SSDを使用できますが、小さいです。

4

1 に答える 1

2

書き込みアクティビティのほとんどがキャッシュによるものである場合は、ファイルシステムだけでなく、apcまたはmemcachedをキャッシュへのバックエンドとして使用します。ファイルシステムに永続化する必要のある書き込みは、競合するキャッシュがディスクにヒットすることなく、個別に処理できます。唯一の考慮事項は、キャッシュがメモリ内にあることです。再起動後にキャッシュが空になります。パフォーマンスの問題が発生する場合は、キャッシュウォーミングプロセスを実装することをお勧めします。

主要なPHPフレームワークのほとんどは、キャッシュモジュールに使用可能なストレージアダプターとしてmemcachedとapc(つまり、 Zend Framework )を備えているため、これが私の最初の選択肢になります。memcachedおよびapc拡張機能を直接使用できることに失敗しました。

もう1つのオプションは、保留中の書き込みを送信できるキューの実装を検討することです。そのキューは、許容可能な速度で書き込みを実行するスケジュールされたタスクによって定期的に処理できます。私は過去に同様の目的でZend_Queueを使用しました。

于 2013-01-27T11:33:09.860 に答える