2017-09-15 6 views
2

スケールすることができるシステムを適切に構築する方法に関するガイダンスが必要です。私はあなたが何をしようとしているのかについていくつかの情報を与え、次に私の特定の質問をします。スケーラブルなシステムを構築する方法を理解していない

私は訪問者に処理するデータを送信させたいサイトがあります。テキストエリアにデータを入力するか、ファイルにアップロードします。シンプル。データは、POST要求がRESTエンドポイントに行われる前に、クライアント側でいくらか前処理されます。

私が悩んでいるのは、この投稿されたデータを保存して、それをユーザーに参照するのにIDを関連付けるのが良い方法です。合理的な時間ですか?

この質問は少し漠然としていて、意見がありませんが、私はそれを認めます。私は移動を続けるために正しい方向へのプッシュが必要です。私が検討してきたことは、データをメッセージキューに投げ込んで、一部のワーカーにデータを処理させ、データが処理されたときに、ユーザーにS3バケットへのリンクやURLファイルに。もう1つのアイデアは、処理される各アイテムのリクエストを、ある種のループクライアント側の個々のレコードをすでに処理している別のエンドポイントに対して実行することでした。

データを処理するには、処理したい量に応じて30分から2時間かかることがあります。彼らがただそこに座って、処理が必要なレコードの量に応じてそれが終わるのを待つのは理想的ではないので、私はこれを主に排除しました。

私は何かを跳ね返す同僚がいなくても、私が自由に尋ねることができるドメイン知識を持つ多くの人を知っていないので、どんな指導も大変ありがたいです。これが適切な場所でない場合は、質問する必要がある場所を正しい方向に向けることができますか?

クリス

答えて

4

私は右のあなたを持っていれば、あなたのパイプラインは次のとおりです。(?)

  1. は、ユーザー

  2. おそらく前処理/それを検証

  3. からアイテムを受け入れますキューに入れる

  4. プロセスデータ

  5. 戻りました。

あなたはステージ(3)で1つまたは複数のキューを使用します。ユーザーからのエンティティがキューの1つに追加されます。十分な大きさであれば、S3やストレージにも同様に格納することができ、その情報をリンクに追加するだけでリンク、日付、ユーザーID(または類似の電子メール)を追加できます。プロセッサは、キューからアイテムを引き出し、ユーザにフィードバックを与えることができます。

注文に関する厳しい要件がない場合は、操作がはるかに簡単になります。それらの間に同期は必要ありません。プロセスの独立したプールとしてアクセプタ、キュー、ストレージ、プロセッサをアップロードするすべてのコンポーネントを処理します。各プールを個別に監視します。ボトルネックがある場合は、マシンをそのプールに追加します。

+1

Ah nifty!これは私にそれについてどうやって行くかに関するいくつかのアイデアを与えてくれました。 – ozfive

関連する問題