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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
uhzz
September 26, 2025
2
1.3k
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.6k
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
uhzz
1
2.8k
Enablement Bootcampを終えて -Enablement Bootcamp for Gopherizing 〜業務で使えるGoを学ぼう〜
uhzz
0
320
安全にQAを行える環境が整いました!- Kyash TechTalk #6 - Kyashの開発をチラ見せ
uhzz
0
830
Goのローカル開発をWorkspacesではじめよう
uhzz
1
1.1k
【Go:パッケージ管理】DepからGo Modulesへ
uhzz
0
1.1k
コードレビューで泣かないためのintSize = 32 << (^uint(0) >> 63)
uhzz
0
250
「ウチも、gRPC使えますか?」
uhzz
0
310
「インタフェースデザインの心理学」を読んで話したい3つのこと
uhzz
0
21k
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
770
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2k
Music & Morning Musume
bryan
47
7.1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2k
AI: The stuff that nobody shows you
jnunemaker
PRO
2
240
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
430
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The SEO Collaboration Effect
kristinabergwall1
0
350
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