Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Goで実現するGraceful Shutdown ~実運用での課題と解決策~ / Go Co...
Search
uhzz
September 26, 2025
2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで実現するGraceful Shutdown ~実運用での課題と解決策~ / Go Conference 2025
uhzz
September 26, 2025
More Decks by uhzz
See All by uhzz
DI コンテナ自動生成ツールを実装してみた / intro-autodi
uhzz
0
990
MCP調べてみました! / Exploring MCP
uhzz
2
4.2k
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
uhzz
1
3.1k
Enablement Bootcampを終えて -Enablement Bootcamp for Gopherizing 〜業務で使えるGoを学ぼう〜
uhzz
0
370
安全にQAを行える環境が整いました!- Kyash TechTalk #6 - Kyashの開発をチラ見せ
uhzz
0
900
Goのローカル開発をWorkspacesではじめよう
uhzz
1
1.2k
【Go:パッケージ管理】DepからGo Modulesへ
uhzz
0
1.2k
コードレビューで泣かないためのintSize = 32 << (^uint(0) >> 63)
uhzz
0
280
「ウチも、gRPC使えますか?」
uhzz
0
360
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
740
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
490
Why Our Code Smells
bkeepers
PRO
340
58k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Facilitating Awesome Meetings
lara
57
7.2k
Docker and Python
trallard
47
4.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
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