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.5k
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
770
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
The Future of SEO: The Impact of AI on Search
badams
0
190
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
11
3k
Culture Deck
optfit
0
420
あれは良かった、あれは苦労したB2B2C型SaaSの新規開発におけるCloud Spanner
hirohito1108
2
570
急成長する企業で作った、エンジニアが輝ける制度/ 20250214 Rinto Ikenoue
shift_evolve
3
1.3k
自動テストの世界に、この5年間で起きたこと
autifyhq
10
8.5k
Tech Blogを書きやすい環境づくり
lycorptech_jp
PRO
1
240
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
710
N=1から解き明かすAWS ソリューションアーキテクトの魅力
kiiwami
0
130
白金鉱業Meetup Vol.17_あるデータサイエンティストのデータマネジメントとの向き合い方
brainpadpr
5
740
データマネジメントのトレードオフに立ち向かう
ikkimiyazaki
6
960
トラシューアニマルになろう ~開発者だからこそできる、安定したサービス作りの秘訣~
jacopen
2
2k
Featured
See All Featured
Docker and Python
trallard
44
3.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Practical Orchestrator
shlominoach
186
10k
Faster Mobile Websites
deanohume
306
31k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Agile that works and the tools we love
rasmusluckow
328
21k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Speed Design
sergeychernyshev
27
790
Music & Morning Musume
bryan
46
6.3k
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