Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[Go Conference 2022 Spring] GoとLambdaを使用した高パフォー...
Search
Satoru Mikami
April 23, 2022
Technology
0
840
[Go Conference 2022 Spring] GoとLambdaを使用した高パフォーマンスでサーバレスな マイクロサービスの開発と運用
Go Conference 2022 Spring 発表資料
https://gocon.jp/2022spring/sessions/a11-s/
Satoru Mikami
April 23, 2022
Tweet
Share
More Decks by Satoru Mikami
See All by Satoru Mikami
Offers スタッフエンジニア経験者に聞く 技術だけじゃない スタッフエンジニアに求められるリーダーシップとは
saicologic
0
350
CustomMiddlewareのテストをする方法
saicologic
0
40
Goのアプリケーションをトレース して劇的に改善した話
saicologic
0
190
スタートアップで エンジニアのマネージメントをする心得_短縮版
saicologic
0
590
組織文化に根ざしたデータ活用の取り組み
saicologic
0
410
業務が効率よく進む コミュニケーションから生じる信頼性
saicologic
0
930
アンケートの回答データに機械学習(感情分析)を活用した事例紹介
saicologic
0
3.2k
Other Decks in Technology
See All in Technology
プロダクト開発、インフラ、コーポレート、そしてAIとの共通言語としての Terraform / Terraform as a Common Language for Product Development, Infrastructure, Corporate Engineering, and AI
yuyatakeyama
6
1.6k
20250125_Agent for Amazon Bedrock試してみた
riz3f7
2
110
攻撃者の視点で社内リソースはどう見えるのかを ASMで実現する
hikaruegashira
4
2.1k
消し忘れリソースゼロへ!私のResource Explorer活用法
cuorain
0
140
ChatGPTを使ったブログ執筆と校正の実践テクニック/登壇資料(井田 献一朗)
hacobu
1
160
Oracle Cloud Infrastructure:2025年1月度サービス・アップデート
oracle4engineer
PRO
0
180
Microsoft Ignite 2024 最新情報!Microsoft 365 Agents SDK 概要 / Microsoft Ignite 2024 latest news Microsoft 365 Agents SDK overview
karamem0
0
190
カスタムインストラクションでGitHub Copilotをカスタマイズ!
07jp27
4
290
あなたはJVMの気持ちを理解できるか?
skrb
5
2k
第27回クラウド女子会 ~re:Invent 振り返りLT会~ 宣言型ポリシー、使ってみたらこうだった!
itkr2305
0
290
RevOpsへ至る道 データ活用による事業革新への挑戦 / path-to-revops
pei0804
3
800
2週に1度のビッグバンリリースをデイリーリリース化するまでの苦悩 ~急成長するスタートアップのリアルな裏側~
kworkdev
PRO
8
6.5k
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Building Adaptive Systems
keathley
39
2.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
600
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Automating Front-end Workflow
addyosmani
1367
200k
Optimizing for Happiness
mojombo
376
70k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Visualization
eitanlees
146
15k
Mobile First: as difficult as doing things right
swwweet
222
9.2k
Transcript
GoとLambdaを使用した高パフォーマンスでサーバレスな マイクロサービスの開発と運用 ©tottie / Renée French
三上 悟 Tech Lead at Voicy saicologic Goの開発は2021年〜 PHP =>
Ruby => Node.js => Python => Go 自己紹介
Go x AWS Lambda
・ユースケース ・他のランタイムと違い:ベンチマーク ・開発の始め方
ユースケース:メール配信の不達調査 メール送信 ・メールアドレスによる会員登録、アクティベーション ・パスワード再発行 ・パスワード更新 さまざまな理由によってメールが届かないという問い合わせがある
SendGrid メール配信プラットフォーム(SaaS) Web APIメール送信する Webhookを使ってメールのイベントを受け取れる SendGrid Client SendGrid SendGrid Webhook
API Gateway メール送信 HTTP POST Lambda DynamoDB
どんなイベントが受け取るか? https://sendgrid.kke.co.jp/docs/API_Reference/Webhooks/event.html
・管理画面からイベントデータがダウンロードできない ・管理画面から数千件までしか見ることができない ・どのメールがどういう理由でエラーになったか見つけるのが大変 なぜ、Webhookが必要?
AWS Lambdaはイベントの発生に応じてプログラムを実行する環境を提供する クラウドコンピューティングサービス ・AWSを利用している ・スパイクする ・必要なときだけイベントのログが見たい ・常時サーバー不要。コストを抑えたい なぜ、AWS Lambdaを選定したのか?
なぜ、他のランタイムに比べてGoを使うのか? 背景 ・LambdaはメインでNode.jsが使われています。LambdaといえばNode.js ・開発のメイン言語は99%がGo言語 ・Goはランタイムが1.xのみ (重要) ・ランタイム比較のベンチマーク結果が良好だった
Goはランタイムが1つ
None
None
Goは高パフォーマンスなのか?
ランタイム比較のベンチマーク OSSのベンチマークプログラムを試しました https://github.com/Aleksandr-Filichkin/aws-lambda-runtimes-performance 複数のランタイムをサポートしてますが、 Python3.9/Node.js14.x/Goを選択 参考にした記事 https://filia-aleks.medium.com/benchmarking-all-aws-lambda-runtimes-in-2021-cold-start-par t-1-e4146fe89385 ベンチマーク計測には、JMeterを使いました。 同時10ユーザー
3回リクエスト
None
ランタイム比較のベンチマーク結果 Node.jsよりは良い。Pythonは同等
ランタイム比較のベンチマーク 128MBより256MBのほうが良い
実際に運用してみた結果
SendGrid Client SendGrid SendGrid Webhook API Gateway メール送信 HTTP POST
Lambda DynamoDB ベンチマークの時と同じ構成
None
None
None
まとめ ・Node.jsに比べれば高パフォーマンス ・50ms or die の世界では使えない ・128MBより256MBのほうが良い傾向 さらにメモリ割り当て別で見たい場合は AWS公式で紹介されている「 aws-lambda-power-tuning」
Operating Lambda: パフォーマンスの最適化 – Part 2 ・コールドスタート対策はLambdaのProvisionedCouncurrencyを設定しだい
開発の始め方
公式ドキュメント:はじめの一歩 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-golang.html
Github https://github.com/aws/aws-lambda-go eventsフォルダに豊富にサンプルがあります!
API-Gateway x Lambda: 最初の一歩 aws-lambda-go/events/README_ApiGatewayEvent.md
API-Gateway x Lambda aws-lambda-go/events/apigw.go でRequest/Responseを知る
他のランタイムと同じ
その他:M1 Macを使っている人は注意
まとめ ・当分、Goはランタイムが1つのためメンテナンスが楽です ・他のランタイムに比べてもGoのパフォーマンスは良いです ・最初は、AWSの公式ドキュメントを読みましょう ・次に、Githubにあるソースコードのサンプルを読みましょう ・Request/Responseの構造体を読みましょう
ご清聴ありがとうございました