自分なりに試してみたパフォーマンスアップについて書いていきます。
はじめに(ご注意)
以下の内容は試す際に料金が発生します。(無料範囲で出来るものもありますが)
構成図
以下のようにAPI Gatewayで受けてLambdaでDynamoDBに書き込むor読み込むという構成で試しました。
検証方法
ApacheBenchやJMeterを使って同時接続数とアクセス数を増大させて検証します。
ケース・スタディ
DynamoDBの書き込みに失敗する。
同時接続数や瞬間アクセス数が増大するとDynamoDBの書き込みに失敗するようになります。
対処法
・キャパシティサイズを上げる
・オートスケーリングを有効にする
・書き込み失敗時はSQSに投げておき、後でリトライできるようにする
※オートスケーリングを有効にしておいてもアクセス急増時に瞬時にスケールしてくれるわけではないので、
エラーはゼロにはなりません。ゆえにSQSでのフォローが必要となります。
500エラーになり、Lambdaのコードまで辿り着かない
確認するポイント
・スロットリングサイズ(API Gateway)
・APIキャッシュが有効かどうか(API Gateway)
・同時実行数を他のLambda関数で予約しており、残量僅かになっていないか(Lambda)
対処法
上記の不足している部分を上げる。優先度としては
Lambda同時実行数>スロットリングサイズ>APIキャッシュ
です。
構成図(修正後)
以下のようになりました。
SQSから取得しDynamoDBに書き込む箇所はCloudWatchの定期実行で行います。