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
470
Accelerate Go development with Bazel
micnncim
9
7.1k
Protocol Buffers Language Server
micnncim
1
3.1k
Build Docker Images with Bazel
micnncim
4
720
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
SORACOMで実現するIoTのマルチクラウド対応 - IoTでのクリーンアーキテクチャの実現 -
kenichirokimura
0
350
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
0
3.2k
疎通2024
sadnessojisan
5
1k
プロダクトエンジニアを支えるための開発生産性向上施策
tsukakei
0
140
スタッフエンジニアの道: The Staff Engineer’s Path
snoozer05
PRO
38
13k
自作Cコンパイラ 8時間の奮闘
soukouki
0
310
Tricentisにおけるテスト自動化へのAI活用ご紹介/20240910Shunsuke Katakura
shift_evolve
0
180
「自動テストのプラクティスを効果的に学ぶためのカードゲーム」 ( #sqip2024 )
teyamagu
PRO
1
140
contenteditableと向き合う
kikuchikakeru
2
290
Datadog を使ったプロダクトとクラウドの セキュリティモニタリング
mrtc0
0
620
自社開発した大規模言語モデルをどうプロダクションに乗せて運用していくか〜インフラ編〜
pfn
PRO
24
6.9k
Creative UIs with Compose: DroidKaigi 2024
chrishorner
1
210
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1029
450k
The Brand Is Dead. Long Live the Brand.
mthomps
53
37k
Build The Right Thing And Hit Your Dates
maggiecrowley
30
2.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Building Applications with DynamoDB
mza
89
6k
Done Done
chrislema
180
16k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
41
6.5k
Navigating Team Friction
lara
183
13k
Faster Mobile Websites
deanohume
304
30k
Visualization
eitanlees
142
15k
Writing Fast Ruby
sferik
623
60k
Optimising Largest Contentful Paint
csswizardry
29
2.8k
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