プロセス間通信にファイルを使用することの長所と短所は何ですか?私がこの質問をしている文脈の背景をいくつか挙げさせてください。
問題は、いくつかの制約がある古典的な生産者/消費者問題です。プロデューサーは、マシンのクラスター上で実行される一連の協調プロセスであり、ブロードキャストを使用して相互に通信します。各プロセスには、それが知っているローカルユーザーがいて、上記のブロードキャストメカニズムによって他のプロセスにもそれらを知らせます。これまで、ブロードキャスト/共有されている状態情報は保持されていませんでしたが、保持する必要があります。
このシステムは何年にもわたって本番環境で実行されており、数千人のユーザーをサポートしており、永続性のサポートを追加するためにこれに依存関係を追加することについて、人々は当然のことながら非常に心配しています。私たちが選択したパスは、ローカルトラフィックをファイルシステム上のファイルに書き込む既存のプロセスに新しいスレッドを生成し、それを新しいプロセス(コンシューマーと呼びます)によって読み取られて永続化することでした。このアプローチで見られる利点は次のとおりです。
- 私たちは無料で永続性を取得します。新しいプロセスに問題がある場合は、ファイルシステムに書き込んでいるときに、ローカルトラフィックを失うことはありません。消費者が中断した場所を知っている限り、消費者はいつでもデータの処理を開始できます。
- キューイングライブラリを使用するための学習曲線はありません。そのプレーンな古いUNIXファイルIOです。
- 最大の利点は、ファイル書き込み用の新しいスレッドを除いて、現在のプロデューサープロセスにまったく影響を与えないことです。
このアプローチに関する懸念事項は次のとおりです。
- ファイルのロックと競合、およびそのパフォーマンスへの影響。
- 書き込みバッファがフラッシュされ、プロデューサーがファイルに完全なイベントが書き込まれた場合にのみファイルロックを解放することを確認してください。消費者は不完全な記録を読む必要があります。
考え?このアプローチはナイーブであり、既成の永続キューライブラリを使用するための立ち上げ時間の初期コストを支払う必要がありますか?ここでの主なポイントは、現在のプロセスへの影響を最小限に抑え、依存関係を追加しないことです。