AWS で実行される webapp を作成しています。私のアプリでは、ユーザーが PDF ファイルをアップロードする必要があります。Linuxの「変換」ユーティリティを使用して、それらを画像に変換します。Ubuntu 12.04 でのセットアップは次のとおりです。
- ジャンゴ
- セロリ
- ジャンゴ セロリ
- ボト
Web サーバーとして apache を使用しています。
ワークフローは次のとおりです。3 つは、3 つの非同期タスクと、すべての処理を処理するための 2 つのキュー、および入力ファイルと出力ファイルを格納するための S3 です。ユーザーが pdf をアップロードすると、次のようになります。
accept_file_task が呼び出されます: このタスクは、ユーザーがアップロードした pdf を受け取り、それを S3 ストレージに保存してから、input_queue(SQS) にメッセージを挿入します。
check_queue_and_launch_instance_task: input_queue 内のメッセージ数を監視し続け、キューに Ec2 インスタンスの数よりも多くのメッセージがあるたびにインスタンスを起動する定期的なタスク
インスタンスには、while True: ループであるブートストラップ スクリプトがあります。いずれのインスタンスも、input_queue からメッセージを選択して Subprocess.Popen("convert "+input+output) を実行し、処理済みの状態を output_queue に書き込み、生成された画像を S3 出力バケットにアップロードして、ダウンロードとして利用できるようにすることができます。リンク
output_process_task: output_queue をポーリングし続ける別の定期的なタスクで、メッセージが利用可能になるたびに、以下の表のステータスを更新します。
Document というモデルを使用して、すべてのステータス情報を保存しています。また、ユーザーを登録しているため、すべてのユーザー情報を格納するテーブルがあります。また、Celery はすべてのタスク情報を格納するために多くのテーブルを作成しました。現在、単一のインスタンスと、そのインスタンスで sqlite3 データベース (python に付属) を使用しています。
以下の点が不安です
データベースをスケールアップするにはどうすればよいですか? RDS か、simpleDB か、AmazonDB か。セロリでなければ、simpleDB を簡単に使用できたはずです。私は本当にこれに立ち往生しています
check_queue_and_launch_instance_task と output_process_task という 2 つの定期的なタスクを削除するにはどうすればよいですか。私の考えでは、後の段階で必要に応じて Elastic Load Balancer を使用できるように、Autoscaling を何らかの方法で使用する必要があります。
あなたの誰かが似たようなものを設計した場合は、それをどうやって進めるか教えてください