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
How Uber "Go"es Recap
Search
micnncim
August 20, 2019
Technology
2
2.4k
How Uber "Go"es Recap
mercari.go #10
https://mercari.connpass.com/event/141122/
micnncim
August 20, 2019
Tweet
Share
More Decks by micnncim
See All by micnncim
Spanner Autoscaler
micnncim
1
490
Accelerate Go development with Bazel
micnncim
9
7.2k
Protocol Buffers Language Server
micnncim
1
3.1k
Build Docker Images with Bazel
micnncim
4
740
We want AWESOME CLI tool & development
micnncim
9
5.1k
GoReleaser: Release and Distribute Go Application
micnncim
9
1.1k
Other Decks in Technology
See All in Technology
Terraform Stacks入門 #HashiTalks
msato
0
360
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
430
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.9k
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
170
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
880
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.2k
組織成長を加速させるオンボーディングの取り組み
sudoakiy
2
220
Adopting Jetpack Compose in Your Existing Project - GDG DevFest Bangkok 2024
akexorcist
0
110
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
3
630
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
300
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.5k
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Adopting Sorbet at Scale
ufuk
73
9.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
A designer walks into a library…
pauljervisheath
204
24k
Facilitating Awesome Meetings
lara
50
6.1k
Optimizing for Happiness
mojombo
376
70k
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Gamification - CAS2011
davidbonilla
80
5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Transcript
MERCARI.GO #10 GOPHERCON 2019 HOW UBER "GO"ES RECAP @micnncim
Table of Contents Topics to be talked About me Uber's
Go Problems Dependency Injection Standardizing Code Structure Switching to Monorepo My Gophercon Recap
About me @micnncim Twitter: @micnncim / GitHub: @micnncim University Student
/ B4 / Computer Science Software Engineer Intern @Merpay Expert Team
HOW UBER "GO"ES @GopherCon 2019 ELENA MOROZOVA @LELENANAM
Problems with Go NEW SERVICE 新しいマイクロサービスをフルスクラッチで作るコストの⾼さ CONTEXT SWITCHING 各マイクロサービスのアーキテクチャの⼤きな相違 GLOBAL
FEATURE 全体に関わる機能の実装の困難さ
Solutions DEPEDENCY INJECTION uber-go/fx の導⼊ CONSISTENT CODE STRUCTURE glue による⼀貫性のあるアーキテクチャ
SWITCHING TO MONOREPO Polyrepo の問題点を解決
uber-go/fx A dependency injection based application framework for Go.
FX
FX
FX
uber-go/fx APPLICATION FRAMEWORK DI 機能を中⼼とする 薄い " アプリケーションフレームワーク" DEPENDENCY INJECTION
Provider からよしなに依存関係を解決 RICH FEATURE Hook, Timeout, Run func などの設定 開発者の依存モジュールへの認知負荷を軽減
Before Consistent Code Structure NOT GOOD ARCHITECTURE "Transport" 層と "Business"
層の混合 INCONSITENCY ⼀貫性が無いため複数サービスの開発の認知負荷が⾼い
glue Inspired by Clean Architecture
GLUE
CONSITENT CODE STRUCTURE WITH GLUE CONSITENT ARCHITECTURE 複数サービス開発の認知負荷が ⼩さくなる LIKE
CLEAN ARCHITECTURE ビジネスロジックの分離 モジュール間の適切な依存
Polyrepo Before Monorepo UPDATE PACKAGES マイクロサービス全体の 1 package のアップデートに 合計数百
commit が必要 DUPLICATE CODE 複数のマイクロサービスが 同じコードを保有する
MONOREPO EASY UPDATE OF PACKAGES 1 commit で全てのマイクロサービスの package をアップデート
バージョン管理もシンプルに SIMPLE CODE 少ない重複コード 共有・再利⽤・変更がしやすい BUILD WITH BAZEL Bazel を利⽤し⾼速・⾼再現性のビルド
Why Bazel? Just my thought FAST AND CORRECT 並列ビルドとキャッシュで⾼速 Go
や protoc のバージョン固定 sandbox 環境 LESS DOCKERFILES Bazel で Docker Image を ビルドするので Dockerfile の管理が 少なくなる GOOD WITH GO gazelle: Go ⽤ Bazel ファイル ⾃動⽣成ツール シングルバイナリ
RECAP OF RECAP DEPENDENCY INJECTION uber-go/fx - DI based application
framework CONSITENT CODE STRUCTURE glue - inspired by Clean Architecture MONOREPO Update a module by 1 commit Bazel