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.3k
Protocol Buffers Language Server
micnncim
1
3.1k
Build Docker Images with Bazel
micnncim
4
750
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
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
330
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
190
AWS re:Invent 2024 ふりかえり
kongmingstrap
0
130
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
260
KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する
iidaxs
1
260
ハイテク休憩
sat
PRO
2
140
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
250
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
110
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
180
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
re:Invent 2024 Innovation Talks(NET201)で語られた大切なこと
shotashiratori
0
300
CustomCopを使ってMongoidのコーディングルールを整えてみた
jinoketani
0
220
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
The Language of Interfaces
destraynor
154
24k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
510
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.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