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
Goで実現するGraceful Shutdown ~実運用での課題と解決策~ / Go Co...
Search
uhzz
September 26, 2025
2
930
Goで実現するGraceful Shutdown ~実運用での課題と解決策~ / Go Conference 2025
uhzz
September 26, 2025
Tweet
Share
More Decks by uhzz
See All by uhzz
MCP調べてみました! / Exploring MCP
uhzz
2
2.5k
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
uhzz
1
2.7k
Enablement Bootcampを終えて -Enablement Bootcamp for Gopherizing 〜業務で使えるGoを学ぼう〜
uhzz
0
300
安全にQAを行える環境が整いました!- Kyash TechTalk #6 - Kyashの開発をチラ見せ
uhzz
0
810
Goのローカル開発をWorkspacesではじめよう
uhzz
1
1k
【Go:パッケージ管理】DepからGo Modulesへ
uhzz
0
1.1k
コードレビューで泣かないためのintSize = 32 << (^uint(0) >> 63)
uhzz
0
240
「ウチも、gRPC使えますか?」
uhzz
0
300
「インタフェースデザインの心理学」を読んで話したい3つのこと
uhzz
0
21k
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
192
56k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
BBQ
matthewcrist
89
9.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
640
We Have a Design System, Now What?
morganepeng
54
7.9k
How to Ace a Technical Interview
jacobian
280
24k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Practical Orchestrator
shlominoach
190
11k
Building Applications with DynamoDB
mza
96
6.7k
Balancing Empowerment & Direction
lara
5
710
The Cult of Friendly URLs
andyhume
79
6.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Transcript
© Finatext Holdings Ltd. Goで実現する Graceful Shutdown ~実運用での課題と解決策 ~ Reo
Uehara / 株式会社Finatext 2025/09/27(土) Go Conference 2025
© Finatext Holdings Ltd. • Graceful Shutdown の基本概念 • net/httpパッケージの
Graceful Shutdown • 実運用の課題 • 実運用の応用例 • まとめ 1 アジェンダ
© Finatext Holdings Ltd. 2 自己紹介 X:@_uhzz_ GitHub:uh-zz 好きなパッケージ: net/http
Reo Uehara / 株式会社Finatext
© Finatext Holdings Ltd. 3 Graceful Shutdown の基本概念 処理中タスクのリソースを適切に開放した後に、アプリケーション自身を終了すること Graceful
Shutdownなし 処理中 SIGTERM (終了要求) SIGKILL (強制終了) 処理中 処理中タスクを適切に開放 アプリケーションも安全に終了 SIGTERM (終了要求) SIGKILL (強制終了) Graceful Shutdownあり
© Finatext Holdings Ltd. signal.NotifyContext • OSから終了要求(SIGTERM)を受信 →ctx.Done() で検知 context.WithTimeout
• context にタイムアウト時間を設定 • タイムアウト付き context を Shutdownメソッドに渡す。 →時間内に、シャットダウン処理を 安全に終了させることが目的 4 Graceful Shutdown の基本概念 Graceful Shutdownの具体例
© Finatext Holdings Ltd. 5 net/httpパッケージの Graceful Shutdown HTTP サーバ内部の流れ
Shutdown メソッドをおさらい • 全37行のコード • やっていること ◦ 全リスナーの受付停止 ◦ コールバック処理 ◦ アイドル接続をクローズ 順を追ってコードを見ていきます https://cs.opensource.google/go/go/+/refs/tags/go1.25.1:src/net/http/server.go;l=3179
© Finatext Holdings Ltd. 6 net/httpパッケージの Graceful Shutdown HTTP サーバ内部の流れ
https://cs.opensource.google/go/go/+/refs/tags/go1.25.1:src/net/http/server.go;l=3179 Shutdown メソッドをおさらい • 全37行のコード • やっていること ◦ 全リスナーの受付停止 ◦ コールバック処理 ◦ アイドル接続をクローズ
© Finatext Holdings Ltd. 7 net/httpパッケージの Graceful Shutdown HTTP サーバ内部の流れ
https://cs.opensource.google/go/go/+/refs/tags/go1.25.1:src/net/http/server.go;l=3179 Shutdown メソッドをおさらい • 全37行のコード • やっていること ◦ 全リスナーの受付停止 ◦ コールバック処理 ◦ アイドル接続をクローズ
© Finatext Holdings Ltd. 8 HTTP サーバ内部の流れ net/httpパッケージの Graceful Shutdown
https://cs.opensource.google/go/go/+/refs/tags/go1.25.1:src/net/http/server.go;l=3179 Shutdown メソッドをおさらい • 全37行のコード • やっていること ◦ 全リスナーの受付停止 ◦ コールバック処理 ◦ アイドル接続をクローズ アイドル接続のクローズが完了 (またはタイムアウト)した時点で シャットダウン処理は終了
© Finatext Holdings Ltd. 9 実運用の課題 課題: メール一括送信リクエスト後に開始した非同期の送信処理が、デプロイに巻き込まれて終了してしまう 原因: 非同期タスクの
Graceful Shutdown ができていなかった 同じサーバー上で処理 1. デプロイによる アプリケーションの終了 2. 送信中に強制終了
© Finatext Holdings Ltd. GracefulWorker • 非同期タスクは、GracefulWorker経由で実行 • 登録した非同期タスクが完了するまでシャットダウンを待機する アプローチ:
非同期タスクマネージャーを実装 10 実運用の応用例
© Finatext Holdings Ltd. 11 実運用の応用例 1. メール送信専用ワーカーを別で起動する 2. GracefulWorker
で非同期にリクエスト&安全にリクエスト処理を完了できる仕組みにした 別々のサーバー上で処理 1.SIGTERM 2.Graceful Shutdown 3. 送信処理完了
© Finatext Holdings Ltd. • HTTPサーバのシグナルハンドリングはすぐに始められるので導入しておこう • デプロイ時の強制終了で非同期タスクが巻き込まれないように Graceful Shutdownの仕組みを導入しよう
12 まとめ Happy smart shutdown together!
None
© Finatext Holdings Ltd. graceful shutdown可能な非同期リトライするGoライブラリをOSSとして作った話 https://qiita.com/behiron/items/b224a68e8c3d8b9de89d Cleanup handling in
Go / Go Conference 2024 https://speakerdeck.com/k1low/go-conference-2024 Go MachineryでGraceful shutdownできてないバグを直した話 https://tech.layerx.co.jp/entry/2022/12/13/201832 14 Appendix