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
6k
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.1k
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
会社員しながら本を書いてきた知見の共有
sat
PRO
3
680
Houtou.pm #1
papix
0
630
Swiftは最高だよの話
yuukiw00w
2
280
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
37k
Azure Developer CLI と Azure Deployment Environment / Azure Developer CLI and Azure Deployment Environment
nnstt1
1
110
Streamline Cloud-Native App Development Using CDEs
saeedzf
0
680
Node−RED で Ollama を使ったローカルLLM(node-red-contrib-ollamaを利用) / ビジュアルプログラミングIoTLT vol.20
you
PRO
0
130
S3 Tables を図解でやさしくおさらい~基本から QuickSight 連携まで/s3-tables-illustrated-basics-quicksight
emiki
1
310
初めてのGoogle Cloud by AWS出身者
harukasakihara
1
730
Oracle Cloud Infrastructure:2025年5月度サービス・アップデート
oracle4engineer
PRO
0
330
FastMCPでSQLをチェックしてくれるMCPサーバーを自作してCursorから動かしてみた
nayuts
1
180
Cloud Run を解剖して コンテナ監視を考える / Breaking Down Cloud Run to Rethink Container Monitoring
aoto
PRO
0
110
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
The World Runs on Bad Software
bkeepers
PRO
68
11k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
BBQ
matthewcrist
88
9.7k
Music & Morning Musume
bryan
47
6.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.4k
How to Ace a Technical Interview
jacobian
276
23k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
KATA
mclloyd
29
14k
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