助け合いフォーラム
この問題はプレミアムコンテンツです。
デカップリングの実現について
お世話になっております。
以下の問題について質問させていただきます。
"""
問題ID:31223
Q:(問題趣旨)スケーラブルかつデカップリングを実現
A: ユーザーからアップロードされたファイルをS3バケットへ保存するようにWebサーバーを設計する。S3イベント通知からファイル圧縮処理をするLambda関数を呼び出して、別のS3バケットに圧縮後のファイルを保存する
"""
解答では、EC2 → S3イベント通知 → Lambda関数 で スケーラブルかつデカップリングの要件を満たすとしていますが、デカップリングの実現になっているのかが疑問に思いました。
問題30639では、S3イベント通知 → SQS → Lambda関数 の流れで、デカップリングを実現していますが、これと同様に、EC2 → S3イベント通知 → SQS → Lambda関数 と間にSQSをはさむのが適当かと思いましたが、いかがでしょうか。
お忙しい所お手数をおかけしますが、アドバイスいただけますと幸いです。
よろしくお願いいたします。
問題ID:31223の解説にも書いてありますが、
-ユーザーからAWSへファイルのアップロード
-アップロードされたファイルの圧縮
の2つの処理をEC2とLambdaの間にS3イベント通知を挟んで分けているので、デカップリング(疎結合)は実現できていると思います。
デカップリングできていない場合の例は、EC2でファイルのアップロード処理と圧縮処理を続けて実行するような感じになるのではないかと。
おそらく、S3イベント通知は通知を出すだけなので間にSQSがないと続けて処理される=デカップリングができていない?と疑問に思ってらっしゃるのではないかと思いますが、橋渡しの処理が何であれプログラムを分けている時点でデカップリングは実現しているのではないでしょうか。
プッシュ通知機能を持つSNSもデカップリングに適したサービスとされているので、S3イベント通知も同じという認識です。
SQSの有無の違いは、下記のサイトが分かりやすかったです。
https://engineers.fenrir-inc.com/entry/2022/04/20/104220
1 S3イベントをトリガーとしてLambdaを呼び出す(31223の正答)
2 S3からSQSを挟んでLambdaを呼び出す(30639の正答)
30639の場合、処理が遅延するほど大量のリクエストが発生するのと、処理結果をユーザーに返さなければならないという点から、より柔軟な設計にできるSQSを使用しているのではないかなと思いました。
コメント
この投稿に対して返信しませんか?
z zawawakei
2023/01/10 23:55
ご回答ありがとうございます。 確かに、SNSと同様と考えると納得できました。 参考サイトもとても分かりやすかったです。デカップリングにもいろいろなパターンがあるんですね。