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
Cloud Functions in Go at Mercari
Search
@babarot
July 13, 2019
Technology
9
5.9k
Cloud Functions in Go at Mercari
https://fukuoka.gocon.jp/ja/schedule/
@babarot
July 13, 2019
Tweet
Share
More Decks by @babarot
See All by @babarot
SLOをゼロからつくる
babarot
15
6k
Insert an Example of Software Engineer Here
babarot
4
1.9k
Kubernetes manifests management and operation in Mercari
babarot
27
6.9k
Testing with YAML
babarot
5
5.1k
tfnotify - Show Terraform execution plan beautifully on GitHub
babarot
5
14k
Micoservices Platform in Mercari
babarot
3
160
Terraform Ops for Microservices
babarot
16
15k
シェルスクリプトを書く技術
babarot
3
1.1k
Other Decks in Technology
See All in Technology
大規模サーバーレスプロジェクトのリアルな零れ話
maimyyym
3
210
テストって楽しい!開発を加速させるテストの魅力 / Testing is Fun! The Fascinating of Testing to Accelerate Development
aiandrox
0
170
MCP でモノが動くとおもしろい/It is interesting when things move with MCP
bitkey
2
460
AI駆動で進化する開発プロセス ~クラスメソッドでの実践と成功事例~ / aidd-in-classmethod
tomoki10
1
1.1k
Global Azure2025(GitHub Copilot ハンズオン)
tomokusaba
2
730
さくらのクラウド開発の裏側
metakoma
PRO
1
480
問 1:以下のコンパイラを証明せよ(予告編) #kernelvm / Kernel VM Study Kansai 11th
ytaka23
3
490
kernelvm-brain-net
raspython3
0
510
CodeRabbitと過ごした1ヶ月 ─ AIコードレビュー導入で実感したチーム開発の進化
mitohato14
1
240
クラウドネイティブ環境の脅威モデリング
kyohmizu
2
400
MCPが変えるAIとの協働
knishioka
1
150
LangfuseではじめるAIアプリのLLMトレーシング
codenote
0
140
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1031
460k
Embracing the Ebb and Flow
colly
85
4.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.5k
Code Reviewing Like a Champion
maltzj
523
40k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
179
53k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
790
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
600
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
How GitHub (no longer) Works
holman
314
140k
Transcript
マイクロサービスの成果を可視化する @b4b4r07 (Jul 13, 2019) / Go Conference 19 Summer
in Fukuoka Cloud Functions in Go at Mercari
BABAROT / @b4b4r07 Mercari, Inc. SWE @ Microservices Platform Blog
/ tellme.tokyo
None
None
Monolith Microservices Current status Migrating ...
Monolith Microservices Current status Migrating ... Why Microservices?
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
Scaling Organization Solving Technical Issues 組織を再編し組織としてのアウトプットを 最大化するため 技術的な課題を解決するため
Scaling Organization Solving Technical Issues 組織を再編し組織としてのアウトプットを 最大化するため 技術的な課題を解決するため 果たして本当にこれらが解決されているか?
Scaling Organization Solving Technical Issues 組織を再編し組織としてのアウトプットを 最大化するため 技術的な課題を解決するため 果たして本当にこれらが解決されているか? Let's
measure!
Go ✕ Google Cloud Functions
DevStats
Agenda •Cloud Functions Go, DevStats •Cloud Functions How we use
•Cloud Functions Tips
Agenda •Cloud Functions Go, DevStats •Cloud Functions How we use
•Cloud Functions Tips
1. Cloud Functions Go, DevStats
What's DevStats?
•Datadog Dashboard •Go package for building a collector •Collectors DevStats
マイクロサービスの数やそれに関わる人数、 デプロイ数など、マイクロサービスとその 開発者に関わるさまざまなメトリクス (Developer Metrics)を可視化した Datadogのダッシュボード Datadog Dashboard
Go package for building a collector Collector(Developer Metricsとして可 視化するのに必要なデータソースから メトリクスを生成しデータストアに保存する
Cloud Function)を実装するために必要 な機能を抽象化して提供するパッケージ
Go package for building a collector Collector(Developer Metricsとして可 視化するのに必要なデータソースから メトリクスを生成しデータストアに保存する
Cloud Function)を実装するために必要 な機能を抽象化して提供するパッケージ
Collectors devstatsパッケージを使って実装された 各メトリクスの収集器のあつまり。 例えば、deploy collectorであれば、 デプロイに関する情報を収集しタグ付け、 メトリクスを作成し(producer)、 任意の データストア(Datadogなど)に送信する (exporter)。
Collectors devstatsパッケージを使って実装された 各メトリクスの収集器のあつまり。 例えば、deploy collectorであれば、 デプロイに関する情報を収集しタグ付け、 メトリクスを作成し(producer)、 任意の データストア(Datadogなど)に送信する (exporter)。
devstats project collectors data Cloud Functions
Collectors devstatsパッケージを使って実装された 各メトリクスの収集器のあつまり。 例えば、deploy collectorであれば、 デプロイに関する情報を収集しタグ付け、 メトリクスを作成し(producer)、 任意の データストア(Datadogなど)に送信する (exporter)。
devstats project collectors data 1. produce Cloud Functions
Collectors devstatsパッケージを使って実装された 各メトリクスの収集器のあつまり。 例えば、deploy collectorであれば、 デプロイに関する情報を収集しタグ付け、 メトリクスを作成し(producer)、 任意の データストア(Datadogなど)に送信する (exporter)。
devstats project collectors data 1. produce 2. export Cloud Functions
Why DevStats?
マイクロサービスの強みを活かして、 「本当に組織全体としてのAgilityが上がっているのか」 を計測することは重要である。
生産性の高い組織において開発者数とデプロイ数は比例関係にある
Agenda •Cloud Functions Go, DevStats •Cloud Functions How we use
•Cloud Functions Tips
2. Cloud Functions How we use
Event-driven serverless compute platform Cloud Functions ” ”
Event-driven serverless compute platform Cloud Functions ” ”
DC VM/Container Serverless •物理マシン •リソース •アプリケーション 技術の発展による管理・運用対象の変化 •物理マシン •リソース •アプリケーション
•物理マシン •リソース •アプリケーション
VM/Container Serverless •好きなだけ/好きなようにスケールできる •ベンダー依存がなくポータビリティがある •要件に合わせて実行環境を変更できる •実行はベアメタルほど高速に動作しないが ビルド・テスト・デプロイのサイクルを開発者 に移譲できるので高速に開発できる Containers vs
Severless •関数の呼び出しのたびに起動され課金され るのでアイドル時間のコストを抑えられる •インフラやリソースを管理しなくてよく、 コードを書くことだけに集中できる •テクノロジがブラックボックス •ベンダー依存でありロックインされる可能性 もある
Serverless Containers vs Severless •関数の呼び出しのたびに起動され課金され るのでアイドル時間のコストを抑えられる •インフラやリソースを管理しなくてよく、 コードを書くことだけに集中できる •テクノロジがブラックボックス •ベンダー依存でありロックインされる可能性
もある
Containers vs Severless •比較して語られることも多いが別物の技術 •適材適所で使うことで真価を発揮できる •今回のDevStatsではCloud Functionsを 使ったほうがいいと判断した
✕ Cloud Functions
Background function Two ways to Go HTTP function HTTPリクエストによって呼び出される関数 標準ライブラリのhttp.HandlerFunc型に従う
イベントに応答して起動される関数 e.g. Cloud Storageバケットのコンテンツが 変更されたとき
Background function Two ways to Go HTTP function HTTPリクエストによって呼び出される関数 標準ライブラリのhttp.HandlerFunc型に従う
イベントに応答して起動される関数 e.g. Cloud Storageバケットのコンテンツが 変更されたとき
HTTP function HTTP request
HTTP function
Background function Two ways to Go HTTP function HTTPリクエストによって呼び出される関数 標準ライブラリのhttp.HandlerFunc型に従う
イベントに応答して起動される関数 e.g. Cloud Storageバケットのコンテンツが 変更されたとき
Event Background function Trigger Subscribe
Event Background function Trigger Subscribe Cloud SchedulerなどでTriggerすれば 関数の定期実行ができる
Background function
Cloud Functions How we use in DevStats
Go package "devstats" Collector(Developer Metricsとして可 視化するのに必要なデータソースから メトリクスを生成しデータストアに保存する Cloud Function)を実装するために必要 な機能を抽象化して提供するパッケージ
Go package "devstats" devstatsパッケージでここをインターフェースを取り決める producer exporter
Go package "devstats"
HTTP function case
microservices-kubernetes Number of deploys Collector 1. call 2. trigger マイクロサービスごとのKubernetes
マニフェストを管理するリポジトリ
microservices-kubernetes Number of deploys Collector 1. call 2. trigger POST
/deploys HTTP request マイクロサービスごとのKubernetes マニフェストを管理するリポジトリ
microservices-kubernetes Number of deploys Collector 1. call 2. trigger POST
/deploys HTTP request マイクロサービスごとのKubernetes マニフェストを管理するリポジトリ 3. produce
microservices-kubernetes Number of deploys Collector 1. call 2. trigger POST
/deploys HTTP request マイクロサービスごとのKubernetes マニフェストを管理するリポジトリ 3. produce 4. export
microservices-kubernetes Number of deploys Collector 1. call 2. trigger POST
/deploys HTTP request マイクロサービスごとのKubernetes マニフェストを管理するリポジトリ 3. produce 4. export devstats.deploys env service corp tool kubectl
Spinnaker webhook Number of deploys Collector 1. call 2. trigger
POST /deploys HTTP request 3. produce 4. export devstats.deploys env service corp tool Kubernetesリソースを GUI経由で扱えるコンポーネント spinnaker
https://speakerdeck.com/b4b4r07/kubernetes-manifests-management-and-operation-in-mercari
Background function case
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger microservices-terraform マイクロサービスごとの開発者 を定義したTerraformリポジトリ
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger microservices-terraform 3. produce マイクロサービスごとの開発者 を定義したTerraformリポジトリ
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger microservices-terraform 3. produce 4. export マイクロサービスごとの開発者 を定義したTerraformリポジトリ
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger microservices-terraform マイクロサービスごとの開発者 を定義したTerraformリポジトリ 3. produce 4. export devstats.developers env service corp
https://speakerdeck.com/b4b4r07/terraform-ops-for-microservices
Deploys per Day per Developers
devstats.deploys / Day / devstats.developers
devstats.deploys / Day / devstats.developers
Agenda •Cloud Functions Go, DevStats •Cloud Functions How we use
•Cloud Functions Tips
3. Cloud Functions Tips
•Naming policy •Limitations •Dependencies Tips
Naming policy main以外なら自由
Naming policy エントリーポイントとなる関数名も自由なので、 (w, r)のシグネチャーを持つエクスポート関数が他にもある場合、 コードを見ただけではエントリーポイントかどうか分からない...
Naming policy エントリーポイントとなる関数名も自由なので、 (w, r)のシグネチャーを持つエクスポート関数が他にもある場合、 コードを見ただけではエントリーポイントかどうか分からない...
Naming policy エントリーポイントとなる関数名も自由なので、 (w, r)のシグネチャーを持つエクスポート関数が他にもある場合、 コードを見ただけではエントリーポイントかどうか分からない... =決め打ちにすると分かりやすくなる
Naming policy ちなみに、 このスタイルはGoogle/Googlerのコードでよく見られた例
Limitations ✘ Functions が Subscribe できる Pub/Sub は同じプロジェクト
Dependencies •外部パッケージの依存関係解決にはgo mod (dep)が使える •Cloud Functionsの実行環境上でgetするのは面倒なためローカルで取得して エントリーポイントが書かれた関数コードと一緒にアップロードする
Wrap-up!
•マイクロサービスの成果を測るために DevStats という仕組み をCloud Functions ✕ Goで作った •「推測するな、計測せよ」のプラクティスはコードだけでなく アーキテクチャにも Conclusion
We're hiring! @b4b4r07