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
Golangで学ぶHot deployの仕組み
Search
tsurubee
June 28, 2018
Programming
2
1.3k
Golangで学ぶHot deployの仕組み
Server::Starterの仕組みを学び、Golangでミニマムで 実装してみた
tsurubee
June 28, 2018
Tweet
Share
More Decks by tsurubee
See All by tsurubee
言語モデルによるAI創薬の進展 / Advancements in AI-Driven Drug Discovery Using Language Models
tsurubee
2
340
AIトップカンファレンスからみるData-Centric AIの研究動向 / Research Trends in Data-Centric AI: Insights from Top AI Conferences
tsurubee
3
2.4k
DeepCrysTet: A Deep Learning Approach Using Tetrahedral Mesh for Predicting Properties of Crystalline Materials
tsurubee
0
960
3次元メッシュで表現した結晶構造を用いた材料物性の予測に向けた深層学習モデルの設計 / Design of Deep Learning Model for Predicting Material Properties Using Crystal Structure Represented by Three-Dimensional Mesh
tsurubee
1
2.2k
分散システムの性能異常に対する機械学習の解釈性に基づく原因診断手法 / A Method for Diagnosing the Causes of Performance Issues in Distributed Systems Based on the Interpretability of Machine Learning
tsurubee
0
1.4k
機械学習の解釈性に関する研究動向とシステム運用への応用 / A Survey on Interpretable Machine Learning and Its Application for System Operation
tsurubee
0
340
機械学習モデルの局所的な解釈に着目したシステムにおける異常の原因診断手法の構想
tsurubee
0
7.8k
アニーリングマシンを活用したエッジAIにおける 生成モデルの学習効率化のためのアーキテクチャ
tsurubee
0
1.5k
さくらインターネット研究所で研究に再挑戦した私の半年間の取り組み
tsurubee
1
3k
Other Decks in Programming
See All in Programming
Cache Strategies with Redisson & Exposed
debop
0
110
クラシルリワードにおける iOSアプリ開発の取り組み
funzin
1
670
Digging into the Matrix: Practicing Code Archaeology
arthurdoler
PRO
0
180
AWS Summit Hong Kong 2025: Reinventing Programming - How AI Transforms Our Enterprise Coding Approach
dwchiang
0
150
2025年のz-index設計を考える
tak_dcxi
13
5.1k
ビカム・ア・コパイロット
ymd65536
1
180
Embracing Ruby magic
vinistock
2
310
ユーザーにサブドメインの ECサイトを提供したい (あるいは) 2026年函館で一番熱くなるかもしれない言語の話
uvb_76
0
140
Rethinking Data Access: The New httpResource in Angular
manfredsteyer
PRO
0
170
M5UnitUnified 最新動向 2025/05
gob
0
150
TypeScript だけを書いて Tauri でデスクトップアプリを作ろう / Tauri with only TypeScript
tris5572
2
420
TVer iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
550
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
The Pragmatic Product Professional
lauravandoore
33
6.6k
Side Projects
sachag
453
42k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
Become a Pro
speakerdeck
PRO
28
5.3k
Building Adaptive Systems
keathley
41
2.5k
Automating Front-end Workflow
addyosmani
1370
200k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.2k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
630
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
33k
Transcript
!UTVSVCFF(.01FQBCP *OD भΠϯϑϥަྲྀษڧձ ,JYT 7PM (PMBOHͰֶͿ )PUEFQMPZͷΈ
(.0ϖύϘɹΠϯϑϥΤϯδχΞ !UTVSVCFF
݄(.0ϖύϘೖࣾ ΠϯϑϥΤϯδχΞྺϲ݄
࣍ w)PUEFQMPZͱʁͳͥඞཁ͔ʁ w)PUEFQMPZͷΈ w(PMBOHͰ࣮ͯ͠Έͨ
͍͑ͨ͜ͱ wμϯλΠϜθϩΛࢧ͑Δ)PUEFQMPZͷΈͷҰྫ w(PMBOHΛ௨ͯ͡ϨΠϠʔͷٕज़ΛֶͿ͜ͱͰɺ ΤϯδχΞͱͯ͠ͷ෯͕͕ΔͷͰʁ wٕज़ॻಡΜͰ;Ή;Ή͢ΔΑΓ࣮ͯ͠Έͨํ͕ཧղ ͍͢͠
)PUEFQMPZͱʁ ͳͥඞཁ͔ʁ
)PUEFQMPZͱʁ wΞϓϦέʔγϣϯʹϩδοΫઃఆͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ༰Λ ө͢ΔͨΊͷखஈ
)PUEFQMPZͱʁ wΞϓϦέʔγϣϯʹϩδοΫઃఆͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ༰Λ ө͢ΔͨΊͷखஈ ҰൠతͳσϓϩΠʢ/05)PUEFQMPZʣ 4PVSDFDPEF DIBOHF (PMBOHͷ߹ɺ όΠφϦͷ্ॻ͖
)PUEFQMPZͱʁ wΞϓϦέʔγϣϯʹϩδοΫઃఆͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ༰Λ ө͢ΔͨΊͷखஈ ҰൠతͳσϓϩΠʢ/05)PUEFQMPZʣ 4PVSDFDPEF DIBOHF "QQMJDBUJPO 4UPQ (PMBOHͷ߹ɺ
όΠφϦͷ্ॻ͖
)PUEFQMPZͱʁ wΞϓϦέʔγϣϯʹϩδοΫઃఆͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ༰Λ ө͢ΔͨΊͷखஈ ҰൠతͳσϓϩΠʢ/05)PUEFQMPZʣ 4PVSDFDPEF DIBOHF "QQMJDBUJPO 4UPQ "QQMJDBUJPO
4UBSU (PMBOHͷ߹ɺ όΠφϦͷ্ॻ͖ ࠶ىಈ
)PUEFQMPZͱʁ wΞϓϦέʔγϣϯʹϩδοΫઃఆͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ༰Λ ө͢ΔͨΊͷखஈ ҰൠతͳσϓϩΠʢ/05)PUEFQMPZʣ 4PVSDFDPEF DIBOHF "QQMJDBUJPO 4UPQ "QQMJDBUJPO
4UBSU (PMBOHͷ߹ɺ όΠφϦͷ্ॻ͖ ϦΫΤετΛॲཧ Ͱ͖ͳ͍͕࣌ؒൃੜ ࠶ىಈ
)PUEFQMPZ͕ͳͥඞཁ͔ʁ wΘ͔ͣͳؒͰՔಇ͍ͯ͠ΔαʔϏεΛࢭΊͨ͘ͳ͍ w)PUEFQMPZΛಋೖ͢Δ͜ͱͰɺγεςϜӡ༻ʹ͓͚Δ อकੑ্͕͠ɺਝͳ։ൃαΠΫϧ͕࣮ݱͰ͖Δ
)PUEFQMPZͷΈ
4FSWFS4UBSUFS w؆୯ʹ)PUEFQMPZͰ͖ΔΑ͏ʹ͢ΔͨΊͷDQBONPEVMF w1FSMͰ࣮͞Ε͍ͯΔ͕ɺγάφϧͱڥมΛͬͨ ൚༻ੑͷߴ͍ΈͷͨΊɺ͞·͟·ͳݴޠͰར༻Մೳ
4FSWFS4UBSUFS w؆୯ʹ)PUEFQMPZͰ͖ΔΑ͏ʹ͢ΔͨΊͷDQBONPEVMF w1FSMͰ࣮͞Ε͍ͯΔ͕ɺγάφϧͱڥมΛͬͨ ൚༻ੑͷߴ͍ΈͷͨΊɺ͞·͟·ͳݴޠͰར༻Մೳ ಈ࡞Λݴ༿Ͱઆ໌͢Δͱɾɾ ʮ৽͍͠ϓϩηεΛىಈͯ͠৽͍͠ϦΫΤετΛͦͪΒʹ ྲྀͭͭ͠ɺݹ͍ϓϩηεͷϦΫΤετ͕ྃͨ͠Βਖ਼͘͠ ऴྃͤ͞Δʯ
4FSWFS4UBSUFS w؆୯ʹ)PUEFQMPZͰ͖ΔΑ͏ʹ͢ΔͨΊͷDQBONPEVMF w1FSMͰ࣮͞Ε͍ͯΔ͕ɺγάφϧͱڥมΛͬͨ ൚༻ੑͷߴ͍ΈͷͨΊɺ͞·͟·ͳݴޠͰར༻Մೳ ಈ࡞Λݴ༿Ͱઆ໌͢Δͱɾɾ ʮ৽͍͠ϓϩηεΛىಈͯ͠৽͍͠ϦΫΤετΛͦͪΒʹ ྲྀͭͭ͠ɺݹ͍ϓϩηεͷϦΫΤετ͕ྃͨ͠Βਖ਼͘͠ ऴྃͤ͞Δʯ (SBDFGVM3FTUBSUʢ༏խͳ࠶ىಈʣ
)PUEFQMPZͷΈʢ؆қ൛ʣ TUBSU@TFSWFS 1BSFOU start_server —-port 8888 —- ./server TFSWFS $IJME
TPDLFU GPSLFYFD TPDLFUΛڞ༗ BDDFQU TUBSU@TFSWFSɿ(SBDFGVMSFTUBSUͷͨΊͷϓϩάϥϜ TFSWFSɿ࣮ߦ͍ͨ͠ϓϩάϥϜ
)PUEFQMPZͷΈʢ؆қ൛ʣ TUBSU@TFSWFS 1BSFOU start_server —-port 8888 —- ./server TFSWFS $IJME
TPDLFU GPSLFYFD TPDLFUΛڞ༗ BDDFQU TUBSU@TFSWFSɿ(SBDFGVMSFTUBSUͷͨΊͷϓϩάϥϜ TFSWFSɿ࣮ߦ͍ͨ͠ϓϩάϥϜ ᶃϓϩάϥϜʹมߋʂ
)PUEFQMPZͷΈʢ؆қ൛ʣ kill -HUP <master pid> TPDLFU BDDFQU TUBSU@TFSWFS 1BSFOU TFSWFS
$IJME TUBSU@TFSWFSɿ(SBDFGVMSFTUBSUͷͨΊͷϓϩάϥϜ TFSWFSɿ࣮ߦ͍ͨ͠ϓϩάϥϜ ᶄ4*()61 ᶃϓϩάϥϜʹมߋʂ
)PUEFQMPZͷΈʢ؆қ൛ʣ kill -HUP <master pid> TPDLFU GPSLFYFD TFSWFS $IJME ᶄ4*()61
BDDFQU BDDFQU TUBSU@TFSWFS 1BSFOU TFSWFS $IJME ᶅ৽ϓϩάϥϜͰىಈ ᶃϓϩάϥϜʹมߋʂ
)PUEFQMPZͷΈʢ؆қ൛ʣ kill -HUP <master pid> TPDLFU ऴྃ͢Δલʹʜ ᶃ৽نϦΫΤεड ɹͷఀࢭ ᶄݱࡏॲཧதͷ
ϦΫΤετͷྃ GPSLFYFD (SBDFGVM4IVUEPXO BDDFQU BDDFQU TUBSU@TFSWFS 1BSFOU TFSWFS $IJME ᶅ৽ϓϩάϥϜͰىಈ ᶄ4*()61 ᶆ4*(5&3. TFSWFS $IJME ᶃϓϩάϥϜʹมߋʂ
)PUEFQMPZͷΈʢ؆қ൛ʣ TUBSU@TFSWFS 1BSFOU kill -HUP <master pid> TPDLFU GPSLFYFD TFSWFS
$IJME BDDFQU ᶆ4*(5&3. ᶅ৽ϓϩάϥϜͰىಈ ᶄ4*()61 TFSWFS $IJME ᶃϓϩάϥϜʹมߋʂ ऴྃ͢Δલʹʜ ᶃ৽نϦΫΤεड ɹͷఀࢭ ᶄݱࡏॲཧதͷ ϦΫΤετͷྃ (SBDFGVM4IVUEPXO
࣮ͯ͠Έͨ
ϛχϚϜͰ࣮ͯ͠Έͨ IUUQTHJUIVCDPNUTVSVCFFHSBDFGVMSFTUBSUHP
࣮ϙΠϯτ̍ʙγάφϧϋϯυϥ func waitSignal(l net.Listener) { c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGTERM) go func() { sig := <-c switch sig { case syscall.SIGTERM: signal.Stop(c) l.Close() } }() } γάφϧͱϓϩηεؒ௨৴ͷҰछ ϓϩηεʹγάφϧΛૹ৴͢Δͱɺͦͷϓϩηεͷਖ਼ৗॲཧʹׂΓࠐΜͰɺ γάφϧݻ༗ͷॲཧΛ࣮ߦͰ͖Δ ͓खܰʹγάφϧͷϋϯυϦϯά͕ Ͱ͖Δ
࣮ϙΠϯτ̍ʙγάφϧϋϯυϥ func waitSignal(l net.Listener) { c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGTERM) go func() { sig := <-c switch sig { case syscall.SIGTERM: signal.Stop(c) l.Close() } }() } γάφϧͱϓϩηεؒ௨৴ͷҰछ ϓϩηεʹγάφϧΛૹ৴͢Δͱɺͦͷϓϩηεͷਖ਼ৗॲཧʹׂΓࠐΜͰɺ γάφϧݻ༗ͷॲཧΛ࣮ߦͰ͖Δ HPSPVUJOFͰγάφϧΛͪड͚Δ ͓खܰʹγάφϧͷϋϯυϦϯά͕ Ͱ͖Δ
࣮ϙΠϯτ̎ʙϑΝΠϧσΟεΫϦϓλ func forkExec(l *net.TCPListener) (*os.Process, error) { progName, _ :=
exec.LookPath(os.Args[0]) pwd, _ := os.Getwd() f, _ := l.File() defer f.Close() files := []*os.File{os.Stdin, os.Stdout, os.Stderr, f} fdEnv := fmt.Sprintf("%s=%d", "FD_KEY", len(files)-1) return os.StartProcess(progName, os.Args, &os.ProcAttr{ Dir: pwd, Env: append(os.Environ(), fdEnv), Files: files, }) } ϑΝΠϧσΟεΫϓϦΫλɺϑΝΠϧιέοτͳͲΛநԽͨ͠Έ ϓϩηεΛGPSLͨ͠ࡍɺϓϩηεͷϑΝΠϧσΟεΫϦϓλΛҾ͖ܧ͙
·ͱΊ w4FSWFS4UBSUFSͷΈΛֶͼɺ(PMBOHͰϛχϚϜͰ ࣮ͯ͠Έͨ wγάφϧϑΝΠϧσΟεΫϦϓλͱ͍ͬͨ֓೦ٕज़ॻΛಡ ΜͰ;Ή;Ή͢ΔΑΓɺ࣮ͯ͠Έͨ΄͏͕ཧղ͔ͬͨ͢͠ w(PMBOHଟ͘ͷ04ͷػೳΛ؆ܿͳίʔυͰѻ͑ΔͨΊɺ ࣗͷؔ৺ྖҬΛΑΓ͍ϨΠϠʔʹ͍͛ͯͨ͘Ίʹ దͨ͠ݴޠͩ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂʂ