Perl で多層アプリの設計に取り組んでおり、利用可能なさまざまな IPC メカニズムの長所と短所について疑問に思っています。通常は数十キロバイトですが、最大で数メガバイトの適度なサイズのデータを処理しようとしています。負荷は非常に軽く、1 分間にせいぜい数百リクエストです。
私の主な関心事は、保守性とパフォーマンスです (この順序で)。複数のサーバーにスケールアップしたり、メイン プラットフォーム (RHEL) から移植したりする必要はないと思いますが、考慮すべきことだと思います。
次のオプションを考えることができます。
- 一時ファイル - 速度とストレージ要件の点でおそらく最悪のオプションです。
- UNIX ドメイン ソケット - 移植性がなく、スケーラブルでない
- インターネット ソケット - ポータブル、スケーラブル
- パイプ - ポータブル、スケーラブルではない (?)
スケーラビリティと移植性は私の主な関心事ではないことを考えると、もっと学ぶ必要があります。最良の選択は何ですか?その理由は? 追加情報が必要な場合はコメントしてください。
編集: ysth の質問 に応じて、より詳細な情報を提供しようとします(警告、テキストの壁が続きます)。
- リーダー/ライターは 1 対 1 の関係にあるのか、それとももっと複雑な関係にあるのか?
- 読者が不在または多忙な場合、ライターに何をしてもらいたいですか?
- およびその逆?
- 希望する使用法について他にどのような情報がありますか?
現時点では、3 層のアプローチを検討していますが、各層にいくつのプロセスを含めるかはわかりません。左側に向けてプロセスを増やし、右側に向けてプロセスを減らす必要があると思いますが、全体的に同じ数にする必要があるかもしれません。
.--------. ----------。.--------. | | リクエスト | -----> | ビジネス | -----> | データ | データ | | マネージャー | <----- | ロジック | <----- | レイヤー | `---------' `----------' `---------'
これらの名前はまだ一般的なものであり、おそらくこれらの形式での実装にはなりません。
要求マネージャーは、Web 要求や CLI (応答時間が重要な場合) や電子メール (応答時間がそれほど重要でない場合) など、さまざまなインターフェースからの要求をリッスンする役割を果たします。ロギングを実行し、リクエストへのレスポンスを管理します(リクエストのタイプに適した形式でレンダリングされます)。
リクエストに関するデータをビジネス ロジックに送信します。ビジネス ロジックは、ビジネス ルールに応じてロギング、承認などを実行します。
次に、ビジネス ロジック (必要な場合) がデータ レイヤーからデータを要求します。データ レイヤーは、(ほとんどの場合) 内部 MySQL データベースまたはチームの制御外にある他のデータ ソース (たとえば、組織のプライマリ LDAP サーバー、または私たちのDB2 従業員情報データベースなど)。これはほとんどの場合、ビジネス ロジックでより簡単に処理できるようにデータを統一された方法でフォーマットする単純なラッパーです。
その後、情報は提示のために要求マネージャーに戻されます。
データが右に流れているときにリーダーがビジーである場合、インタラクティブなリクエストに対して、適切な時間だけ待機し、その時間内にアクセスできない場合はタイムアウト エラーを返します (例: 「後でもう一度やり直してください」)。非対話的な要求 (電子メールなど) の場合、ポーリング システムは単純に終了し、次の呼び出しで再試行できます (おそらく 1 ~ 3 分に 1 回)。
データが逆方向に流れている場合、待機状況は発生しません。左に戻ろうとしたときにプロセスの 1 つが停止した場合、実際にできることは、ログを記録して終了することだけです。
とにかく、それはかなり冗長でした。私はまだ設計の初期段階にあるので、おそらくまだ混乱したアイデアがいくつか残っています。私が言及したことのいくつかは、おそらく、どの IPC システムを使用するかという問題に接するものです。私は設計に関する他の提案を受け入れていますが、質問の範囲を限定しようとしていました (たとえば、IPC にとってははるかに簡単な 2 つの層に折りたたむことを検討する必要があるかもしれません)。あなたの考えは何ですか?