Share
Embed
VPCLambda × RDSのデメリットを正しく理解しよう!!
2019/8/1に開催されたServerlessMeetupOsaka#5で発表させて頂いた際の資料です
TomoyaIwata
August 01, 2019
Transcript
52 slides
-
6 アジェンダ 無駄なコスト • Lambdaについて 5分 • VPC Lambda ×
RDSのデメリットについて • VPC Lambdaと⾮VPC Lambdaについて • まとめ 3分 12分 2分 -
7 アジェンダ 無駄なコスト • Lambdaについて 5分 • VPC Lambda ×
RDSのデメリットについて • VPC Lambdaと⾮VPC Lambdaについて • まとめ 3分 12分 2分 -
9 Lambdaについて • コンテナ型の仮装化技術を⽤いてLambda実⾏環境を作成 • Lambda関数はコンテナ上で実⾏される • コンテナは必要に応じて⽣成・破棄される ※説明を簡略化するために⼀部省略 詳細は
AWS公式の資料「 Security Overview of AWS Lambda 」を参照 Micro VM Lambda関数実⾏環境 (コンテナ) Worker -
10 Lambda実⾏環境のライフサイクルについて (ENIの作成) ※詳しくは後述 コンテナの作成 デプロイパッケー ジのロード デプロイパッケー ジの展開 ランタイム
起動・初期化 関数・メソッドの 実⾏ コンテナの破棄 20190402 AWS Black Belt Online Seminar Let's Dive Deep into AWS Lambda Part1 & Part2 https://www.slideshare.net/AmazonWebServicesJapan/20190402-aws-black-belt-online- seminar-lets-dive-deep-into-aws-lambda-part1-part2 -
11 Lambda実⾏環境のライフサイクルについて (ENIの作成) ※VPC Labdaの場合 コンテナの作成 デプロイパッケー ジのロード デプロイパッケー ジの展開
ランタイム 起動・初期化 関数・メソッドの 実⾏ コンテナの破棄 20190402 AWS Black Belt Online Seminar Let's Dive Deep into AWS Lambda Part1 & Part2 https://www.slideshare.net/AmazonWebServicesJapan/20190402-aws-black-belt-online- seminar-lets-dive-deep-into-aws-lambda-part1-part2 コールドスタート -
12 Lambda実⾏環境のライフサイクルについて (ENIの作成) ※VPC Labdaの場合 コンテナの作成 デプロイパッケー ジのロード デプロイパッケー ジの展開
ランタイム 起動・初期化 関数・メソッドの 実⾏ コンテナの破棄 20190402 AWS Black Belt Online Seminar Let's Dive Deep into AWS Lambda Part1 & Part2 https://www.slideshare.net/AmazonWebServicesJapan/20190402-aws-black-belt-online- seminar-lets-dive-deep-into-aws-lambda-part1-part2 ウォーム スタート -
14 無駄なコスト • Lambdaについて 5分 • VPC Lambda × RDSのデメリットについて
• VPC Lambdaと⾮VPC Lambdaについて • まとめ 3分 12分 2分 -
15 VPC Lambdaと⾮VPC Lambdaについて AWSにはVPC(Virtual Private Cloud)という概念がある VPC AWS Cloud
Availability Zone 1 Availability Zone 2 Public subnet Private subnet Private subnet Public subnet -
16 AWSのサービス分類(⼀部抜粋) Amazon Aurora Amazon DocumentDB (with MongoDB compatibility) Amazon
DynamoDB Amazon ElastiCache Amazon RDS Amazon Neptune Amazon Elasticsearch Service Amazon Simple Storage Service (S3) Amazon Cognito VPC内にリソースを作成するサービス VPC外にリソースを作成するサービス AWS IoT Device Management AWS CloudFormation データベース系のサービスがVPCに寄っている Amazon CloudWatch -
17 VPC Lambdaと⾮VPC Lambdaについて • VPC内のリソースにアクセスできるように設定されたLambda関数 = VPC Lambda •
VPC内のリソースにアクセスするためにENI(Elastic Network Interface)を利⽤する -
19 無駄なコスト • Lambdaについて 5分 • VPC Lambda × RDSのデメリットについて
• VPC Lambdaと⾮VPC Lambdaについて • まとめ 3分 12分 2分 -
20 VPC LambdaあるいはVPC Lambda × RDSのデメリット • コネクションプーリングの問題 • 同時接続数の問題
• IPアドレス枯渇問題 • インターネットアクセスにNAT Gatewayが必要 (その分コストが・・・) 今回話しません • コールドスタートの問題 XXX問題という表現は良く聞くけど、具体的に何が問題︖︖ -
22 コネクションプーリングとは︖ プログラムからデータベースへ接続を確⽴する際、 接続要求のたびに接続・切断を繰り返すのではなく、 ⼀度確⽴した接続(コネクション)をプール(保 持)しておき、再利⽤する⼿法 速度⾯のメリット • 接続が早くなる •
Prepared Statementを共有すること で、SQLの実⾏が早くなる 可⽤性のメリット • 接続要求のスパイクを回避しやす い • 同時接続数超過のエラーを避けや すい -
24 ⼀⼝にコネプーといっても⽅式は様々 • 例) PreForkのApache × PHPでxxxx_pconnect • プロセスを跨いでコネクションは共有できない •
永続化であって「プーリング」ではない シングルスレッドのWeb(AP)サーバーで接続を永続化 • 例) Tomcat JDBC Connection Pool • スレッド間で接続を共有することで、物理的な同時接続数を削減できる可能性 がある マルチスレッドのWeb(AP)サーバーでプーリング • 例) pg_pool2 × PostgreSQL • 中間層を設けることで、プロセスを跨いでコネクションを共有できる ミドルウェアでプーリング DBMSの特性によってコネプーの効果もマチマチ... -
25 ⼀⼝にコネプーといっても⽅式は様々 • 例) PreForkのApacheでxxxx_pconnect • プロセスを跨いでコネクションは共有できない • 永続化であって「プーリング」ではない シングルスレッドのWeb(AP)サーバーで接続を永続化
• 例) Tomcat JDBC Connection Pool • スレッド間で接続を共有することで、物理的な同時接続数を削減できる可能性 がある マルチスレッドのWeb(AP)サーバーでプーリング • 例) pg_pool2 • 中間層を設けることで、プロセスを跨いでコネクションを共有できる ミドルウェアでプーリング Lambda実⾏環境でも実現可能 ※明⽰的に接続を閉じるタイミングが無いことに注意 Lambda実⾏環境では実現不可能 Lambda実⾏環境でも実現可能 ※メリットが出せるかどうかは別にして... -
30 同時接続数の問題について • RDBには最⼤同時接続数のパラメータがある • 最⼤同時接続数を超える接続要求はエラーになる 例えばデフォルトの設定値を採⽤したAmazon Aurora PostgreSQLの 場合、最⼤同時接続数は以下のようになる
インスタンスクラス max_connections db.r5.large 1600 db.r5.xlarge 3300 db.r5.2xlarge 5000 db.r5.4xlarge 5000 db.r5.12xlarge 5000 db.r5.24xlarge 5000 上限緩和申請無し状態での Lambdaの同時実⾏数上限 1000を上回っている -
32 コストと同時接続数の関係(RDSの場合) • 最⼤同時接続数を上げるにはインスタンスタイプを変える必要がある • 柔軟にスケールアップできない • コストを最適化できない RDBにおけるコストと同時接続数の関係 処理可能な最⼤同時接続数とコスト
実際の接続数 インスタンスタイプ変更 インスタンスタイプ変更 無駄なコスト -
37 IPアドレスの枯渇について • LambdaがVPC内のリソースにアクセスするためにはENIが必要 • ENIごとにIPアドレスを消費する • 多数のVPC Lambdaが起動するとIPアドレスが枯渇する可能性が・・・ Micro
VM Lambda関数実⾏環境 (コンテナ) Worker VPC Amazon RDS AWS Cloud Elastic network interface -
38 IPアドレスの枯渇について Lambdaのコンテナ1つにつき1つのENIを消費する訳では無い Micro VM Lambda関数 実⾏環境 (コンテナ) Worker Lambda関数
実⾏環境 (コンテナ) Lambda関数 実⾏環境 (コンテナ) Lambda関数 実⾏環境 (コンテナ) ※EC2モデルの場合の例 Projected peak concurrent executions * (Memory in GB / 3GB) ENIキャパシティの計算式 -
41 コールドスタートの問題について (ENIの作成) コンテナの作成 デプロイパッケー ジのロード デプロイパッケー ジの展開 ランタイム 起動・初期化
関数・メソッドの 実⾏ コンテナの破棄 20190402 AWS Black Belt Online Seminar Let's Dive Deep into AWS Lambda Part1 & Part2 https://www.slideshare.net/AmazonWebServicesJapan/20190402-aws-black-belt-online- seminar-lets-dive-deep-into-aws-lambda-part1-part2 VPC Lambdaの コールドスター ト時に発⽣ -
42 コールドスタートの問題について ENIの作成は遅い(10秒~20秒程度) • ※Lambdaのコンテナ1つにつき1つのENIを消費する訳では無い • Lambdaの初期化処理が⾛る = ENI作成処理が⾛る では無い
• Lambda関数へのメモリ割り当てを減らすことでENI作成の頻度を下げられる -
45 コールドスタートの改善について 画像はre:invent2018「 SRV409 A Serverless Journey: AWS Lambda Under
the Hood 」の発表資料より引⽤ https://www.slideshare.net/AmazonWebServices/a-serverless-journey-aws-lambda-under-the-hood-srv409r1-aws-reinvent- 2018?ref=https://dev.classmethod.jp/cloud/aws/reinvent2018-srv409/ • コールドスタート時にENIを作成し てWorkerにアタッチする構成 • WorkerごとにIPアドレスを1つ消費 • Lambda関数作成時にENIを作成 • Worker外のRemoteNATというコン ポーネントでENIとのNAT処理を⾏ • 複数のWorkerで1つのENIを共有 -
46 コールドスタートの問題について • ENI作成を伴わなければ現状でもVPC Lambdaの初 期化処理は⼗分に⾼速 • VPC Lambdaの改善がリリースされれば、コール ドスタート時の⼤幅な遅延が無くなりそう︖︖
• ENI作成を⾼速化するというアプローチでは無い ので、スケールアウト時の挙動は注意(予想です) • スパイクが想定されるワークロードには引き続き要注意︖︖ -
47 アジェンダ 無駄なコスト • Lambdaについて 5分 • VPC Lambda ×
RDSのデメリットについて • VPC Lambdaと⾮VPC Lambdaについて • まとめ 3分 12分 2分