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.2k
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
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
140
コミュニティが変えるキャリアの地平線:コロナ禍新卒入社のエンジニアがAWSコミュニティで見つけた成長の羅針盤
kentosuzuki
0
120
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
180
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
310
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
130
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
260
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.6k
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
620
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
150
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
210
Agent Skils
dip_tech
PRO
0
120
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
360
Featured
See All Featured
Balancing Empowerment & Direction
lara
5
890
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
62
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Bash Introduction
62gerente
615
210k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
HDC tutorial
michielstock
1
390
Designing for Performance
lara
610
70k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
83
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Design in an AI World
tapps
0
140
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
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