KessokuのDIにおけるgoroutineスケジューリング / golang.tokyo #41
by
mazrean
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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