1

わかりました、各メールの処理に重いプロセスを実行しています。受信したメールに自動返信するシステムの AI を作成しているとしますが、どこから始めればよいかまだわかりません。

これが私が考えていることです

アーキテクチャ 1 ここに画像の説明を入力

問題 :

  1. 毎秒1000通のメールがあるとしましょう。メールサーバー、eximまたはsendmail、davecotなどはどのように正確に機能しますか?

  2. parseandsavetomysql.py はパイプを介して 1 秒で 1000 通の電子メールを処理できますか? それもどのように機能しますか?ところで、現在は正常に動作していますが、これについて知る必要があります。

  3. ワーカーについての私の論理は正しいですか? またはキューイングシステム?私はresqueと友達を見ようとしましたが、どうすればセッションをロックできるのか、まだわかりませんまたはより簡単な方法?

アーキテクチャ 2

ここに画像の説明を入力

問題?

  1. 書かれている通り
  2. pop/stmp サーバーが 1 秒あたり 1000 通のメールを受信するにはどうすればよいですか?
  3. imap と pop でメールを受信できますか? 私たちはただ処理しているだけなので、pop3 はパフォーマンスで選択する正しい方法ですか? 現在使用しているphpにimap_openがあります

アドオン

  1. 私と同じ問題を解決する良いリンクやブログ投稿はありますか?
  2. 私の問題を解決するプロジェクト、アプリ、またはサードパーティのリンクを教えてください。
  3. 心に留めていることがあれば、それらを書き留めてください。

助けてくれてありがとう、アダム・ラマダン

現在のアーキテクチャを編集しました

ここに画像の説明を入力

4

1 に答える 1

2

多くの「全体像」アーキテクチャの質問と同様に、最良の解決策は実際にはそれらの1つです...それは依存します。展開環境を制御できますか? つまり、好きな電子メール サーバーを使用できますか? それとも、既にインストールされてホストされているサーバーを使用する必要がありますか? SMTP サービスと同じマシンでコードを実行できますか? (ほぼ) 最適なアーキテクチャを考え出すには、これらの質問と他の多くの質問を検討する必要があります。

それを踏まえて、いくつかの仮定を立て、検討する価値があると思われるいくつかのアイデアを提供します...

高性能のメッセージング システムを検討する必要があります。具体的には、RabbitMQを見てください。RabbitMQ は信頼性が高く効率的であり、非同期の受信イベントに基づくワークロードの分散は、(私の意見では非常に優れた) チュートリアルで特に議論されているパターンです。

このようなメッセージング サーバーでは、着信電子メールを受信するプロセスが 1 つあります。できれば、これは SMTP プロセスの一部として、または少なくともそれに非常に近い形で行われます。特に、あなたが言及した作業負荷を考慮してください。他に選択肢がない場合は、cron を使用して POP または IMAP 経由でメッセージを収集するというアイデアが今のところ機能する必要があります。

電子メール収集プロセスは、メッセージを RabbitMQ キューにプッシュします。(おそらく文字通り電子メール自体ではないかもしれませんが、その可能性はありますが、電子メールが効率的に保存されている場所への参照のように考えていました)。次に、名前付きメッセージ キューにサブスクライブされた複数のワーカー プロセスを実行します。その後、RabbitMQ (またはユーザーが決定した任意のメッセージング サービス) は、これらのメッセージをラウンド ロビン方式で個々のサブスクライバーに配信します。既にロードされている場合、ワーカー プロセスはメッセージに NACK を送信するか、独自の制御フロー メッセージをサービスに送り返すことができます。ワークロードが非常に高い場合 (繰り返しになりますが、提案したように)、分散システムの全体的な状態を監視する何らかの管理プロセスを強くお勧めします。マネージャーは実行時間の統計を収集し (将来の成長計画、最適化、およびシステム全体のリファクタリングに非常に役立ちます)、新しいワーカー プロセスをスピンアップおよびシャットダウンする機能を備えています。非常に高いワークロードに到達する前に、ワーカー プロセスが安定しており、メモリの断片化などを起こさずに長時間存続できると仮定すると、メッセージ サーバーを使用して作業を分散するだけで十分です。

参考までに、私は電子メール プロセッサを作成した経験があります (特にxmail - プロジェクトを始めたばかりで、プロジェクトの初期段階を十分に制御できる場合にお勧めします)。また、私は現在、RabbitMQ を使用して、主要な科学計算グリッド用のマルチエージェント結果キャッシュ システムを構築しています。

とにかく...あなたのプロジェクトで頑張ってください!

于 2012-05-11T16:16:32.650 に答える