KessokuのDIにおけるgoroutineスケジューリング / golang.tokyo #41
by
mazrean
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
KessokuのDIにおけるgoroutineスケジューリング @mazrean golang.tokyo #41
Slide 2
Slide 2 text
mazrean ■ Goでツール等を作っている ● SQL Builder GenORM ● DIツールKessoku ■ SRE @DeNA @mazrean22 マズリーン 2
Slide 3
Slide 3 text
mazrean ■ Goでツール等を作っている ● SQL Builder GenORM ● DIツールKessoku ■ SRE @DeNA @mazrean22 マズリーン 今日はこの話 3
Slide 4
Slide 4 text
目次 1 GoのDIとgoogle/wire 2 並行DIツールKessoku 3 goroutineのスケジューリング 4 まとめ
Slide 5
Slide 5 text
目次 1 GoのDIとgoogle/wire 2 並行DIツールKessoku 3 goroutineのスケジューリング 4 まとめ
Slide 6
Slide 6 text
Dependency Injection(DI) ■ 依存を外部から注入する設計パターン ■ ツール・ライブラリで自動化可能 ● uber-go/dig ● google/wire 6
Slide 7
Slide 7 text
google/wire DIコードを生成するツール ■ 実行時のオーバーヘッドがない ■ コンパイル前 にミスがわかる 7
Slide 8
Slide 8 text
google/wireがアーカイブされた リポジトリがアーカイブ ■ 8月7日 ■ かなり前から開発は停止していた ● 最後の機能追加は2021年1月 8
Slide 9
Slide 9 text
google/wireは完成した? 9
Slide 10
Slide 10 text
本当に?
Slide 11
Slide 11 text
google/wireの課題 11 The Power of PowerPoint - thepopp.com ■ buildタグが必要 → 補完が効かない ■ go toolが使えない 開発体験の悪さ 割と初期化では通信が多い (例:DBコネクション) → goroutine使いたい goroutineが使えない 11
Slide 12
Slide 12 text
目次 1 GoのDIとgoogle/wire 2 並行DIツールKessoku 3 goroutineのスケジューリング 4 まとめ
Slide 13
Slide 13 text
mazrean/kessoku 次世代のgoogle/wire ■ buildタグ不要 ■ 並行処理が可能 13
Slide 14
Slide 14 text
設定記述 ■ wireとほぼ同じ ■ buildタグは不要 14
Slide 15
Slide 15 text
コード生成 並行処理でDIするコードを生成 Cache DB App 15
Slide 16
Slide 16 text
並行処理の効果 起動時の処理の高速化に繋がる → コールドスタートの高速化 起動時間短縮! 16
Slide 17
Slide 17 text
目次 1 GoのDIとgoogle/wire 2 並行DIツールKessoku 3 goroutineのスケジューリング 4 まとめ
Slide 18
Slide 18 text
DIの仕組み(従来) ■ 依存関係をグラフ化 ● 有向非巡回グラフ(DAG) ■ トポロジカルソート 18
Slide 19
Slide 19 text
Kessokuの要件 ■ 依存のないAsyncは別goroutine ■ 最小限のgoroutine数 ● 必須ではない ■ Asyncなしならwireと同一挙動 → 難易度が段違い! 19
Slide 20
Slide 20 text
Kessokuのスケジューリング 20 goroutine G2 DB G1 ①goroutine数導出 ②実行goroutine決定
Slide 21
Slide 21 text
goroutine数導出 21 最大の非同期数を導出する ■ Asyncは考慮しない ● 緩い制約で十分 ■ グラフ理論的には最小パス被覆数 ● 最大マッチング問題に帰着可能
Slide 22
Slide 22 text
Async・非Asyncそれぞれ優先度で決定 ■ Async a. 直前で依存が揃ったgoroutine b. 空のgoroutine c. 依存が最も揃ったgoroutine ■ 非Async a. 依存が最も揃ったgoroutine 実行goroutine決定 22 b a c
Slide 23
Slide 23 text
目次 1 GoのDIとgoogle/wire 2 並行DIツールKessoku 3 goroutineのスケジューリング 4 まとめ
Slide 24
Slide 24 text
まとめ ■ google/wireはアーカイブされた ■ mazrean/kessokuを作った ● google/wireと使い方は類似 ● 並行初期化が可能 24
Slide 25
Slide 25 text
mazrean/kessoku 使ってみてください! ■ starよろしくお願いします 25 https://github.com/mazrean/kessoku