2017-04-19 8 views
0

私は複数の「トランザクション」を選択できるアプリケーションを開発しました。これらはそれぞれPDFファイルに直接関連しています。PDF生成にEC2を使用し、ユーザーに公開URLを提供します

ユーザーが複数選択して印刷すると、これらのPDFファイルが1つの長いファイルにマージされ、印刷が容易になります。

現在、「トランザクション」PDFは要求に応じて生成され、PDFも併合されます。

私はこれをAmazonインフラストラクチャ経由で中継しようとしていますが、いくつか質問がありました。

  1. "トランザクション"ごとにPDF生成用のキューを実装する必要がありますか?もしそうなら、私はどのようにユーザーにシームレスな体験を提供できますか?
  2. 私はこれらのPDFファイルを生成するためにEC2を使用できますか?その場合は、リソースを使用する代わりに、ユーザーがAmazonから直接ファイルをダウンロードするための「公開」リンクを提供できますか?

ありがとうございます!

EDIT ----詳細

  1. ユーザー
  2. システムは、文書
  3. によって生成されたPDFのために提供された情報を使用して、要求ごとにPDFを生成する定期的なフォームからいくつかの情報を入力しますシステムはAmazon S3の下に保管されています
  4. 私たちは複数のpdfを一度に「印刷」できるAPIを提供しています.S3の選択したPDFファイルを1つのファイルにまとめて
  5. 文書を複数印刷すると、マージされたファイルである新しいウィンドウが開き、ユーザーは表示するまでに約20秒待つ必要があります。
  6. PDFを生成するために使用されたリソースをAmazonインフラストラクチャに活用することができますが、同じフローを維持する必要があります。つまり、&をダウンロードするためにユーザーにインスタントパブリックリンクを提供する必要があります。
+1

少し広い質問に聞こえます。もっと具体的になりますか?あなたのコードは何をしているのですか、あなたが解決する必要のある規模の問題は何ですか? – apokryfos

+0

私の質問を更新しました。ありがとうございます! –

+0

S3で結果をホストできませんか? –

答えて

1

あなたの理解に基づいて、あなたのリンクがユーザーのファイル要求直後に作成されている必要があると思います。ただし、PDFマージを作成するには、並行して実行する必要があります。私は私の理解に基づいてそれをする考えがあり、それがあなたの状況で働くかもしれないかもしれません。

最初に、独自のpdfファイル名を作成するためのロジックを使用し、ファイル名を表すランダムな文字列で開始します。そして同時にバックグラウンドでPDFを生成しますが、PDFの名前は最初の手順で作成したものと同じでなければなりません。これにより、ダウンロードするリンクがあるファイルのインスタント・ネームが表示されます。ただし、ファイルの作成はまだ進行中です。

Node.JSを使用して両方のステップを同時に実行する場合は、PHPまたはイベントループを使用する場合は必ずスレッドを使用してください。これにより、ファイルが見つからないため404エラーが回避されます。

EC2からS3へファイルを転送すると、レイテンシ遅延も発生します。しかし、将来的に複数のファイルを使用したい場合は、S3を使用してPDFファイルを簡単に配信してより高速に配信することができます。私たちが知っているように、S3は静的メディアストレージに使用されています。それ以外の場合は、単純にすべてを計算し、EC2でファイルを生成してください。

+0

これは主に私がやったものです。 APIエンドポイントに達すると、一連の作業指示IDが要求されます。 1,2,3としましょう。これらのそれぞれを繰り返し、これらのそれぞれについて一時的なPDFファイルを生成します(これは、すべてのドキュメントが異なるヘッダー、フッター、ページカウンター、デザインなどを持つため必要です)。 次に、これら3つの生成ファイルを収集し、1つの大きなPDFファイルにマージします。 すべてのファイルがS3に保存されています。私はPDFコンテンツを直接ダウンロード(コンテンツタイプヘッダー付き)として返します。 –

+0

コメントは私のスタイリングを殺しました、申し訳ありません。私の質問は、これをどのようにスケールするのですか?私は現在EC2を使用していますが、ストレージはS3ですが、ファイルを処理するのに20秒かかるため、10人のクライアントがヒットした場合は大規模に遅れます。 Load Balancer + EC2の使用について読んでいました。 –

+0

はいロードバランサは動作しますが、スレッドを使用すると問題が解決する可能性があります。 –

関連する問題