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
6.1k
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
6.3k
Insert an Example of Software Engineer Here
babarot
4
2k
Kubernetes manifests management and operation in Mercari
babarot
27
7k
Testing with YAML
babarot
5
5.2k
tfnotify - Show Terraform execution plan beautifully on GitHub
babarot
5
14k
Micoservices Platform in Mercari
babarot
3
180
Terraform Ops for Microservices
babarot
16
15k
シェルスクリプトを書く技術
babarot
3
1.1k
Other Decks in Technology
See All in Technology
LINEヤフー バックエンド組織・体制の紹介
lycorptech_jp
PRO
0
850
自然言語でAPI作業を片付ける!「Postman Agent Mode」
nagix
0
130
TypeScript×CASLでつくるSaaSの認可 / Authz with CASL
saka2jp
2
120
生成AI時代に若手エンジニアが最初に覚えるべき内容と、その学習法
starfish719
2
600
リアーキテクティングのその先へ 〜品質と開発生産性の壁を越えるプラットフォーム戦略〜 / architecture-con2025
visional_engineering_and_design
0
6.4k
AI × クラウドで シイタケの収穫時期を判定してみた
lamaglama39
1
390
なぜブラウザで帳票を生成したいのか どのようにブラウザで帳票を生成するのか
yagisanreports
1
190
アジャイル社内普及ご近所さんマップを作ろう / Let's create an agile neighborhood map
psj59129
1
140
AI エージェント活用のベストプラクティスと今後の課題
asei
1
250
.NET 10のASP. NET Core注目の新機能
tomokusaba
0
100
入社したばかりでもできる、 アクセシビリティ改善の第一歩
unachang113
2
350
[CV勉強会@関東 ICCV2025] WoTE: End-to-End Driving with Online Trajectory Evaluation via BEV World Model
shinkyoto
0
340
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
A better future with KSS
kneath
239
18k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Rails Girls Zürich Keynote
gr2m
95
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
118
20k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Making Projects Easy
brettharned
120
6.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
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