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.2k
Golangで学ぶHot deployの仕組み
Server::Starterの仕組みを学び、Golangでミニマムで 実装してみた
tsurubee
June 28, 2018
Tweet
Share
More Decks by tsurubee
See All by tsurubee
AIトップカンファレンスからみるData-Centric AIの研究動向 / Research Trends in Data-Centric AI: Insights from Top AI Conferences
tsurubee
3
1.5k
DeepCrysTet: A Deep Learning Approach Using Tetrahedral Mesh for Predicting Properties of Crystalline Materials
tsurubee
0
830
3次元メッシュで表現した結晶構造を用いた材料物性の予測に向けた深層学習モデルの設計 / Design of Deep Learning Model for Predicting Material Properties Using Crystal Structure Represented by Three-Dimensional Mesh
tsurubee
1
2k
分散システムの性能異常に対する機械学習の解釈性に基づく原因診断手法 / A Method for Diagnosing the Causes of Performance Issues in Distributed Systems Based on the Interpretability of Machine Learning
tsurubee
0
1.3k
機械学習の解釈性に関する研究動向とシステム運用への応用 / A Survey on Interpretable Machine Learning and Its Application for System Operation
tsurubee
0
310
機械学習モデルの局所的な解釈に着目したシステムにおける異常の原因診断手法の構想
tsurubee
0
7.8k
アニーリングマシンを活用したエッジAIにおける 生成モデルの学習効率化のためのアーキテクチャ
tsurubee
0
1.5k
さくらインターネット研究所で研究に再挑戦した私の半年間の取り組み
tsurubee
1
2.9k
さくらインターネット研究所と鶴田の取り組みのご紹介
tsurubee
0
120
Other Decks in Programming
See All in Programming
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
350
楽しく向き合う例外対応
okutsu
0
150
『品質』という言葉が嫌いな理由
korimu
0
160
定理証明プラットフォーム lapisla.net
abap34
1
1.8k
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
230
Unity Android XR入門
sakutama_11
0
160
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1k
Spring gRPC について / About Spring gRPC
mackey0225
0
220
時計仕掛けのCompose
mkeeda
1
300
Pulsar2 を雰囲気で使ってみよう
anoken
0
240
Linux && Docker 研修/Linux && Docker training
forrep
24
4.5k
Ruby on cygwin 2025-02
fd0
0
150
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
The Invisible Side of Design
smashingmag
299
50k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Rails Girls Zürich Keynote
gr2m
94
13k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Designing Experiences People Love
moore
140
23k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Bash Introduction
62gerente
611
210k
Music & Morning Musume
bryan
46
6.3k
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ͷػೳΛ؆ܿͳίʔυͰѻ͑ΔͨΊɺ ࣗͷؔ৺ྖҬΛΑΓ͍ϨΠϠʔʹ͍͛ͯͨ͘Ίʹ దͨ͠ݴޠͩ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂʂ