AWS Summit 2017にて全部教えます!サーバレスアプリのアンチパターンとチューニングを聴講したのでそのメモです。 かなり詳しい話を聞けて大変参考になりました。 www.awssummit.tokyo
メモ
パフォーマンスをどう上げるか
プログラム側
各言語のベストプラクティス・最適化方法はそのまま当てはまるので、プログラムのパフォーマンスを上げておく
コンピューティングリソース不足
- メモリ設定
- 実際にはリソース全体のパフォーマンスの設定を意味する。
- メモリに比例してcpuのリソースも上がる。
- メモリ設定を上げることで実行時間が減り、パフォーマンスが向上し一方でコストが変わらないこともある。
- 適切なスペックを洗濯することが大事。低スペックからだんだんあげていって、処理時間が変わらなくなるスペックがあるので、そのスペックに決めるのが良い。
コールドスタート
起こる条件
- 利用可能なコンテナがない場合
- そもそも1つもコンテナがない
- 利用可能な数以上に同時に処理すべきリクエストが来た。
- コード・設定の変更をした
- これらの条件にあてはまなければ発生しない。コールドスタートは全体の1%くらい
コールドスタートが許容できないのであればLambdaを使うべきではない
速くするためには
- コンピューティングリソースを上げる
- 言語を変える
javaはコールドスタートが遅い。ウォームスタートの場合、コンパイル言語の方が速い傾向 - VPC接続ははENIの発生を伴うので必要がなければ使わない(VPCアクセスが必要なければ使わない)
これだけでコールドスタート時の10秒程度を削減する可能性 - パッケージサイズを小さくする
コード量の削減、不要な依存関係の削減、最適化ツールを使用するなど
アーキテクチャ
- 同期でinvokeすると同時実行数の制限にひっかかる
- 非同期でinvokeするのがスケーラビリティの観点ではおすすめ
api gatewayと組み合わせる場合、putの場合は直接呼び出すのではなくsqs kinesisに流し、それをイベントソースとして実行するべき。getはキャッシュする。
並列実行できるようにする
アンチパターン
dynamoがおすすめ
ログ
cloudwatchメトリクス、cloudwatchカスタムメトリクス、cloudwatch logsへのログ出力を行う
その他
- 障害を前提に設計する
リトライ、DeadLetterQueueを活用する
その他
スピーカーの西谷さんの著書が発売されているので、こちらを読むとさらに理解が深まりそうです。
実践AWS Lambda ~「サーバレス」を実現する新しいアプリケーションのプラットフォーム~
- 作者: 西谷圭介
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/06/09
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る