あるスタートアップ企業は、ユーザーから動画ファイルのアップロードを受け付け、EC2インスタンスでトランスコード処理(変換処理)を行うサービスを運営しています。通常時は1時間あたり50件のアップロードですが、イベント開催時には1時間あたり500件に急増します。トランスコード処理は1件あたり3〜10分かかります。急増時にアップロードを損失させず、コストも最適化するにはどのアーキテクチャが最適ですか?
ユーザーのアップロードをS3に直接保存し、S3イベント通知でSQSキューにメッセージを送信する。EC2 Auto ScalingグループがSQSキューの深さ(ApproximateNumberOfMessagesVisible)に基づいてスケールアウト・インしてトランスコード処理を行う。 S3へのアップロードとSQSキューを組み合わせることでアップロードの受付と処理をデカップリング(疎結合化)できます。SQSはメッセージの永続性を保証するため急増時もアップロードは損失しません。キュー深さ(ApproximateNumberOfMessagesVisible)に基づくAuto Scalingで需要に応じたスケールが可能で、アップロード受付とトランスコード処理を独立してスケールできます。 選択肢A は ALBのスケールアウトラグにより急増時にタイムアウトが発生するリスクがあり、アップロードが損失する可能性があります。 選択肢C は Lambdaの最大実行時間が15分であるため、処理時間が10分を超えるトランスコードに対応できない場合があります。 選択肢D は アップロード受付とトランスコード処理を同一インスタンス上で実行する密結合な設計であり、スケーラビリティに欠けます。急増時にボトルネックが発生しやすく、アップロードを損失するリスクがあります。