Slide 1

Slide 1 text

!UTVSVCFF(.01FQBCP *OD ۝भΠϯϑϥަྲྀษڧձ ,JYT 7PM (PMBOHͰֶͿ )PUEFQMPZͷ࢓૊Έ

Slide 2

Slide 2 text

(.0ϖύϘɹΠϯϑϥΤϯδχΞ !UTVSVCFF

Slide 3

Slide 3 text

೥݄(.0ϖύϘೖࣾ ΠϯϑϥΤϯδχΞྺϲ݄

Slide 4

Slide 4 text

໨࣍ w)PUEFQMPZͱ͸ʁͳͥඞཁ͔ʁ w)PUEFQMPZͷ࢓૊Έ w(PMBOHͰ࣮૷ͯ͠Έͨ

Slide 5

Slide 5 text

఻͍͑ͨ͜ͱ wμ΢ϯλΠϜθϩΛࢧ͑Δ)PUEFQMPZͷ࢓૊ΈͷҰྫ w(PMBOHΛ௨ͯ͡௿ϨΠϠʔͷٕज़ΛֶͿ͜ͱͰɺ
 ΤϯδχΞͱͯ͠ͷ෯͕޿͕ΔͷͰ͸ʁ wٕज़ॻಡΜͰ;Ή;Ή͢ΔΑΓ࣮૷ͯ͠Έͨํ͕ཧղ
 ͠΍͍͢

Slide 6

Slide 6 text

)PUEFQMPZͱ͸ʁ ͳͥඞཁ͔ʁ

Slide 7

Slide 7 text

)PUEFQMPZͱ͸ʁ wΞϓϦέʔγϣϯʹϩδοΫ΍ઃఆ౳ͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ಺༰Λ൓ ө͢ΔͨΊͷखஈ

Slide 8

Slide 8 text

)PUEFQMPZͱ͸ʁ wΞϓϦέʔγϣϯʹϩδοΫ΍ઃఆ౳ͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ಺༰Λ൓ ө͢ΔͨΊͷखஈ ҰൠతͳσϓϩΠʢ/05)PUEFQMPZʣ 4PVSDFDPEF DIBOHF (PMBOHͷ৔߹ɺ όΠφϦͷ্ॻ͖

Slide 9

Slide 9 text

)PUEFQMPZͱ͸ʁ wΞϓϦέʔγϣϯʹϩδοΫ΍ઃఆ౳ͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ಺༰Λ൓ ө͢ΔͨΊͷखஈ ҰൠతͳσϓϩΠʢ/05)PUEFQMPZʣ 4PVSDFDPEF DIBOHF "QQMJDBUJPO 4UPQ (PMBOHͷ৔߹ɺ όΠφϦͷ্ॻ͖

Slide 10

Slide 10 text

)PUEFQMPZͱ͸ʁ wΞϓϦέʔγϣϯʹϩδοΫ΍ઃఆ౳ͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ಺༰Λ൓ ө͢ΔͨΊͷखஈ ҰൠతͳσϓϩΠʢ/05)PUEFQMPZʣ 4PVSDFDPEF DIBOHF "QQMJDBUJPO 4UPQ "QQMJDBUJPO 4UBSU (PMBOHͷ৔߹ɺ όΠφϦͷ্ॻ͖ ࠶ىಈ

Slide 11

Slide 11 text

)PUEFQMPZͱ͸ʁ wΞϓϦέʔγϣϯʹϩδοΫ΍ઃఆ౳ͷมߋΛՃ͑ͨࡍ ʹɺϦΫΤετͷॲཧΛଓ͚ଓ͚ͳ͕Βɺมߋͷ಺༰Λ൓ ө͢ΔͨΊͷखஈ ҰൠతͳσϓϩΠʢ/05)PUEFQMPZʣ 4PVSDFDPEF DIBOHF "QQMJDBUJPO 4UPQ "QQMJDBUJPO 4UBSU (PMBOHͷ৔߹ɺ όΠφϦͷ্ॻ͖ ϦΫΤετΛॲཧ Ͱ͖ͳ͍͕࣌ؒൃੜ ࠶ىಈ

Slide 12

Slide 12 text

)PUEFQMPZ͕ͳͥඞཁ͔ʁ wΘ͔ͣͳؒͰ΋Քಇ͍ͯ͠ΔαʔϏεΛࢭΊͨ͘ͳ͍ w)PUEFQMPZΛಋೖ͢Δ͜ͱͰɺγεςϜӡ༻ʹ͓͚Δ
 อकੑ͕޲্͠ɺਝ଎ͳ։ൃαΠΫϧ͕࣮ݱͰ͖Δ

Slide 13

Slide 13 text

)PUEFQMPZͷ࢓૊Έ

Slide 14

Slide 14 text

4FSWFS4UBSUFS w؆୯ʹ)PUEFQMPZͰ͖ΔΑ͏ʹ͢ΔͨΊͷDQBONPEVMF w1FSMͰ࣮૷͞Ε͍ͯΔ͕ɺγάφϧͱ؀ڥม਺Λ࢖ͬͨ
 ൚༻ੑͷߴ͍࢓૊ΈͷͨΊɺ͞·͟·ͳݴޠͰར༻Մೳ

Slide 15

Slide 15 text

4FSWFS4UBSUFS w؆୯ʹ)PUEFQMPZͰ͖ΔΑ͏ʹ͢ΔͨΊͷDQBONPEVMF w1FSMͰ࣮૷͞Ε͍ͯΔ͕ɺγάφϧͱ؀ڥม਺Λ࢖ͬͨ
 ൚༻ੑͷߴ͍࢓૊ΈͷͨΊɺ͞·͟·ͳݴޠͰར༻Մೳ ಈ࡞Λݴ༿Ͱઆ໌͢Δͱɾɾ ʮ৽͍͠ϓϩηεΛىಈͯ͠৽͍͠ϦΫΤετΛͦͪΒʹ ྲྀͭͭ͠ɺݹ͍ϓϩηεͷϦΫΤετ͕׬ྃͨ͠Βਖ਼͘͠ ऴྃͤ͞Δʯ

Slide 16

Slide 16 text

4FSWFS4UBSUFS w؆୯ʹ)PUEFQMPZͰ͖ΔΑ͏ʹ͢ΔͨΊͷDQBONPEVMF w1FSMͰ࣮૷͞Ε͍ͯΔ͕ɺγάφϧͱ؀ڥม਺Λ࢖ͬͨ
 ൚༻ੑͷߴ͍࢓૊ΈͷͨΊɺ͞·͟·ͳݴޠͰར༻Մೳ ಈ࡞Λݴ༿Ͱઆ໌͢Δͱɾɾ ʮ৽͍͠ϓϩηεΛىಈͯ͠৽͍͠ϦΫΤετΛͦͪΒʹ ྲྀͭͭ͠ɺݹ͍ϓϩηεͷϦΫΤετ͕׬ྃͨ͠Βਖ਼͘͠ ऴྃͤ͞Δʯ (SBDFGVM3FTUBSUʢ༏խͳ࠶ىಈʣ

Slide 17

Slide 17 text

)PUEFQMPZͷ࢓૊Έʢ؆қ൛ʣ TUBSU@TFSWFS 1BSFOU start_server —-port 8888 —- ./server TFSWFS $IJME TPDLFU GPSLFYFD TPDLFUΛڞ༗ BDDFQU TUBSU@TFSWFSɿ(SBDFGVMSFTUBSUͷͨΊͷϓϩάϥϜ TFSWFSɿ࣮ߦ͍ͨ͠ϓϩάϥϜ

Slide 18

Slide 18 text

)PUEFQMPZͷ࢓૊Έʢ؆қ൛ʣ TUBSU@TFSWFS 1BSFOU start_server —-port 8888 —- ./server TFSWFS $IJME TPDLFU GPSLFYFD TPDLFUΛڞ༗ BDDFQU TUBSU@TFSWFSɿ(SBDFGVMSFTUBSUͷͨΊͷϓϩάϥϜ TFSWFSɿ࣮ߦ͍ͨ͠ϓϩάϥϜ ᶃϓϩάϥϜʹมߋʂ

Slide 19

Slide 19 text

)PUEFQMPZͷ࢓૊Έʢ؆қ൛ʣ kill -HUP TPDLFU BDDFQU TUBSU@TFSWFS 1BSFOU TFSWFS $IJME TUBSU@TFSWFSɿ(SBDFGVMSFTUBSUͷͨΊͷϓϩάϥϜ TFSWFSɿ࣮ߦ͍ͨ͠ϓϩάϥϜ ᶄ4*()61 ᶃϓϩάϥϜʹมߋʂ

Slide 20

Slide 20 text

)PUEFQMPZͷ࢓૊Έʢ؆қ൛ʣ kill -HUP TPDLFU GPSLFYFD TFSWFS $IJME ᶄ4*()61 BDDFQU BDDFQU TUBSU@TFSWFS 1BSFOU TFSWFS $IJME ᶅ৽ϓϩάϥϜͰىಈ ᶃϓϩάϥϜʹมߋʂ

Slide 21

Slide 21 text

)PUEFQMPZͷ࢓૊Έʢ؆қ൛ʣ kill -HUP TPDLFU ऴྃ͢Δલʹʜ ᶃ৽نϦΫΤεड෇ ɹͷఀࢭ ᶄݱࡏॲཧதͷ ϦΫΤετͷ׬ྃ GPSLFYFD (SBDFGVM4IVUEPXO BDDFQU BDDFQU TUBSU@TFSWFS 1BSFOU TFSWFS $IJME ᶅ৽ϓϩάϥϜͰىಈ ᶄ4*()61 ᶆ4*(5&3. TFSWFS $IJME ᶃϓϩάϥϜʹมߋʂ

Slide 22

Slide 22 text

)PUEFQMPZͷ࢓૊Έʢ؆қ൛ʣ TUBSU@TFSWFS 1BSFOU kill -HUP TPDLFU GPSLFYFD TFSWFS $IJME BDDFQU ᶆ4*(5&3. ᶅ৽ϓϩάϥϜͰىಈ ᶄ4*()61 TFSWFS $IJME ᶃϓϩάϥϜʹมߋʂ ऴྃ͢Δલʹʜ ᶃ৽نϦΫΤεड෇ ɹͷఀࢭ ᶄݱࡏॲཧதͷ ϦΫΤετͷ׬ྃ (SBDFGVM4IVUEPXO

Slide 23

Slide 23 text

࣮૷ͯ͠Έͨ

Slide 24

Slide 24 text

ϛχϚϜͰ࣮૷ͯ͠Έͨ IUUQTHJUIVCDPNUTVSVCFFHSBDFGVMSFTUBSUHP

Slide 25

Slide 25 text

࣮૷ϙΠϯτ̍ʙγάφϧϋϯυϥ 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() } }() } γάφϧͱ͸ϓϩηεؒ௨৴ͷҰछ ϓϩηεʹγάφϧΛૹ৴͢Δͱɺͦͷϓϩηεͷਖ਼ৗॲཧʹׂΓࠐΜͰɺ γάφϧݻ༗ͷॲཧΛ࣮ߦͰ͖Δ ͓खܰʹγάφϧͷϋϯυϦϯά͕ Ͱ͖Δ

Slide 26

Slide 26 text

࣮૷ϙΠϯτ̍ʙγάφϧϋϯυϥ 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ͰγάφϧΛ଴ͪड͚Δ ͓खܰʹγάφϧͷϋϯυϦϯά͕ Ͱ͖Δ

Slide 27

Slide 27 text

࣮૷ϙΠϯτ̎ʙϑΝΠϧσΟεΫϦϓλ 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ͨ͠ࡍ͸ɺ਌ϓϩηεͷϑΝΠϧσΟεΫϦϓλΛҾ͖ܧ͙

Slide 28

Slide 28 text

·ͱΊ w4FSWFS4UBSUFSͷ࢓૊ΈΛֶͼɺ(PMBOHͰϛχϚϜͰ
 ࣮૷ͯ͠Έͨ wγάφϧ΍ϑΝΠϧσΟεΫϦϓλͱ͍ͬͨ֓೦͸ٕज़ॻΛಡ ΜͰ;Ή;Ή͢ΔΑΓɺ࣮૷ͯ͠Έͨ΄͏͕ཧղ͠΍͔ͬͨ͢ w(PMBOH͸ଟ͘ͷ04ͷػೳΛ؆ܿͳίʔυͰѻ͑ΔͨΊɺ
 ࣗ෼ͷؔ৺ྖҬΛΑΓ௿͍ϨΠϠʔʹ޿͍͛ͯͨ͘Ίʹ
 దͨ͠ݴޠͩ

Slide 29

Slide 29 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ʂʂ