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
500
Accelerate Go development with Bazel
micnncim
9
7.3k
Protocol Buffers Language Server
micnncim
1
3.2k
Build Docker Images with Bazel
micnncim
4
760
We want AWESOME CLI tool & development
micnncim
9
5.2k
GoReleaser: Release and Distribute Go Application
micnncim
9
1.1k
Other Decks in Technology
See All in Technology
【JAWS-UG大阪 reInvent reCap LT大会 サンバが始まったら強制終了】“1分”で初めてのソロ参戦reInventを数字で振り返りながら反省する
ttelltte
0
140
いま現場PMのあなたが、 経営と向き合うPMになるために 必要なこと、腹をくくること
hiro93n
9
7.7k
2025年に挑戦したいこと
molmolken
0
160
Evolving Architecture
rainerhahnekamp
3
260
iPadOS18でフローティングタブバーを解除してみた
sansantech
PRO
1
150
Reactフレームワークプロダクトを モバイルアプリにして、もっと便利に。 ユーザに価値を届けよう。/React Framework with Capacitor
rdlabo
0
130
Copilotの力を実感!3ヶ月間の生成AI研修の試行錯誤&成功事例をご紹介。果たして得たものとは・・?
ktc_shiori
0
350
AWS Community Builderのススメ - みんなもCommunity Builderに応募しよう! -
smt7174
0
180
新卒1年目、はじめてのアプリケーションサーバー【IBM WebSphere Liberty】
ktgrryt
0
130
あなたの人生も変わるかも?AWS認定2つで始まったウソみたいな話
iwamot
3
860
【Oracle Cloud ウェビナー】2025年のセキュリティ脅威を読み解く:リスクに備えるためのレジリエンスとデータ保護
oracle4engineer
PRO
1
100
今年一年で頑張ること / What I will do my best this year
pauli
1
220
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
KATA
mclloyd
29
14k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7.1k
Building Applications with DynamoDB
mza
93
6.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
What's in a price? How to price your products and services
michaelherold
244
12k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Code Review Best Practice
trishagee
65
17k
Unsuck your backbone
ammeep
669
57k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
210
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