Slide 1

Slide 1 text

ΠϯϑϥΤϯδχΞͷ WEBΞϓϦೖ໳ 1 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 2

Slide 2 text

ࣗݾ঺հ • খ୔पฏ • @oza_shu • Sler→WEBۀք 2 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 3

Slide 3 text

࿩͢͜ͱ • ࡞੒͍ͯ͠ΔΞϓϦ(Ԍ্த) • ΞϓϦ࡞੒Λ࢝ΊͯΑ͔ͬͨ͜ͱ • ΞϓϦ։ൃ͕ϓϩάϥϛϯάೖ໳ʹ͓͢͢Ίͳཧ༝ ࿩͞ͳ͍͜ͱ • ϓϩάϥϛϯάݴޠ • ϑϨʔϜϫʔΫ 3 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 4

Slide 4 text

ฉ͍ͯ΄͍͠ਓ • ͜Ε͔Βϓϩάϥϛϯάษڧ͍ͨ͠ਓ • ษڧͯ͠Δ͚ͲԿΛ࡞ͬͨΒ͍͍͔Θ͔Βͳ͍ਓ • ίʔυॻ͚ΔΑ͏ʹͳΓ͍ͨΠϯϑϥΤϯδχΞ • ϓϩάϥϛϯάॻ͚ΔΑ͏ʹͳΓ͍ͨͱ૬ஊ͞ΕΔਓ 4 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 5

Slide 5 text

ϓϩάϥϛϯά͕Ͱ͖Δͱ͸ Ҿ༻: 20ࡀΛա͔͗ͯΒϓϩάϥϛϯάΛֶ΅͏ͱܾΊͨਓͨͪ΁ 5 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 6

Slide 6 text

WEBΞϓϦ͕͓͢͢Ίͷཧ༝ • ೲظ΍ٛ຿͕ͳ͍ • ඞཁͳٕज़͕ଟذʹ౉Δ • αʔό্Ͱಈ͍͍ͯΔΞϓϦͷಈ͖͕Θ͔Δ • ো֐ରԠͰΞϓϦͷιʔείʔυΛ௥͑ΔΑ͏ʹͳΔ • ॻ͘ͱಈ͘ʂ͢͝ʔ͍ʂͨͷ͠ʔ͍ʂ 6 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 7

Slide 7 text

࡞͍ͬͯΔ΋ͷ Collect-Qiita ཁ݅ • Qiitaͷ࠷৽هࣄऔಘͱݕࡧ • ϩάΠϯػೳ • ηογϣϯอ࣋ • ͓ؾʹೖΓػೳ(Ԍ্த) 7 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 8

Slide 8 text

DEMO ׬੒ؒʹ߹Θͳ͔ͬͨ! ΞΧ΢ϯτ࡞੒ʙهࣄͷݕࡧ·Ͱ ͏͍ͯ͝! 8 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 9

Slide 9 text

Collect-QiitaͰඞཁͱͳΔٕज़ • Qiitaͷ࠷৽هࣄऔಘͱݕࡧ • GET,POST,ϧʔςΟϯά,ςϯϓϨʔτ,FORMॲཧ • ϩάΠϯػೳ • DB࿈ܞ, ηΩϡϦςΟ • ηογϣϯอ࣋ • Ωϟογϡ, HTTPϓϩτίϧ • ͓ؾʹೖΓػೳ • DB࿈ܞ, Ajax?? 9 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 10

Slide 10 text

ΞϓϦΛ࡞Γ࢝ΊΔͱ ػೳΛ௥Ճͨ͘͠ͳΔ • APIΛୟ͍ͯهࣄΛͱͬͯ͜Εͨʂ • هࣄΛ͓ؾʹೖΓొ࿥͍ͨ͠ʂ • ϩάΠϯೝূ͠ͳ͍ͱͩʂ • ηογϣϯ؅ཧ΋ඞཁͳΜͩɻRedisͰอଘ͍ͨ͠ͳ! • DockerͰίϯςφʹͯ͠Έ͍ͨʂ • ྲྀߦΓͩ͠k8sͰϚΠΫϩαʔϏεʹ͢Δ?? 10 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 11

Slide 11 text

࣍ͷҰา͕Θ͔Δ! Ҿ༻: 20ࡀΛա͔͗ͯΒϓϩάϥϛϯάΛֶ΅͏ͱܾΊͨਓͨͪ΁ 11 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 12

Slide 12 text

WEBΞϓϦ͕͓͢͢Ίͷཧ༝ • ೲظ΍ٛ຿͕ͳ͍ • ػೳ௥Ճͯ͠Ԍ্ͯ͠΋͍͍ • ඞཁͳٕज़͕ଟذʹ౉Δ • ৭Μͳٕज़ֶ͕΂ָ͍ͯ͠ʂ • αʔό্Ͱಈ͍͍ͯΔ෺͕ͳΜͳͷ͔஌ΕΔ • ͲΜͳٕज़͕࢖ΘΕ͍ͯΔͷ͔஌Δͷָ͍͠ʂ • ॻ͘ͱಈ͘ʂ͢͝ʔ͍ʂͨͷ͠ʔ͍ʂ ɹ- ! 12 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 13

Slide 13 text

ࣗ෼ͷ࡞ͬͨΞϓϦ͸Ͳ͏΍ͬͯ ಈ͍͍ͯΔΜͩΖ͏? - ΞϓϦΛಈ͔͍ͯ͠Δϓϩηεʹ͍ͭͯ΋ͬͱ஌Γ͍ͨ - Ͳ͏΍ͬͯΞϓϦʹΞΫηε͍ͯ͠Δͷ͔஌Γ͍ͨ 13 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 14

Slide 14 text

ΞϓϦΛಈ͔͍ͯ͠Δϓϩηεʹ͍ͭ ͯ΋ͬͱ஌Γ͍ͨ • Χʔωϧ͸ϓϩηεΛׂΓৼΒΕͨPIDΛΈͯ਺஋ͱͯ͠ѻ͏ • ࣮ߦதͷϓϩηε͕ϦιʔεΛ։͘ͱϑΝΠϧσΟεΫϦϓλ ׂ͕Γ౰ͯΒΕΔ 14 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 15

Slide 15 text

ίʔυྫ(1) PIDΛΈͯΈΑ͏ # ݱࡏͷϓϩηεΛฦ͢ import os print ("My pid:", os.getpid()) $ python3 3_processes_have_pid.py My pid: 10592 15 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 16

Slide 16 text

ίʔυྫ(2) ϑΝΠϧσΟεΫϦϓλ # ϑΝΠϧσΟεΫϦϓλׂ͕Γ౰ͯΒΕ͍ͯΔ͔ΈͯΈΑ͏ if __name__ == "__main__": with open("/etc/passwd") as passwd: print(passwd.fileno()) passwd.closed try: print(passwd.fileno()) except ValueError: print("The file already has closed") # ϑΝΠϧΛด͡Δͱফ͑Δ $ python3 5_processes_have_file_descriptors_closed_file.2.py 3 The file already has closed 16 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 17

Slide 17 text

ϑΝΠϧσΟεΫϦϓλʹ͸੍ݶ͕͋ Δ ϑΝΠϧ͕։͚ͳͯ͘ো֐ରԠΛͨ͜͠ͱ͕͋ͬͨͳ ιϑτϦϛοτΛ্͛ͨ͜ͱΛࢥ͍ग़ͨ͠ PythonͰopenͰϑΝΠϧΛ։͍ͨΒด͡Α͏ͱॻ͍ͯ͋ͬͨʂ withจΛ࢖͏ͷΛ͓͢͢Ί͞Εͨཧ༝͕Θ͔ͬͨʂ 17 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 18

Slide 18 text

fork()ؾʹͳͬͯ͘Δ ϓϩηε͕Fork͞ΕΔͬͯͲ͏͍͏͜ͱ͚ͩͬ? ࢠϓϩηε͸਌ϓϩηεͰ࢖ΘΕ͍ͯΔશͯͷϝϞϦͷίϐʔΛҾ͖ܧ͙ ϑΝΠϧσΟεΫϦϓλ(ιέοτ)΋ • prefork • ίϐʔɾΦϯɾϥΠτʢCoWɺCopy on Writeʣ • ԿͰκϯϏϓϩηεͬͯͳΔΜ͚ͩͬ • ϓϩηεؒ௨৴ • ύΠϓॲཧ,ετϦʔϜ,ϝοηʔδ • γάφϧॲཧ • ϓϩηεάϧʔϓ,ηογϣϯάϧʔϓ 18 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 19

Slide 19 text

Ͳ͏΍ͬͯΞϓϦʹ ΞΫηε͍ͯ͠Δͷ͔஌Γ͍ͨ • HTTP͸ΞϓϦέʔγϣϯ૚ϓϩτίϧ • HTTP͸TCP(UDP)্Ͱ࢖༻͞Εɺ ΫϥΠΞϯτͱαʔόͰ΍ΓͱΓ͞ΕΔ 19 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 20

Slide 20 text

HTTPϓϩτίϧ • HTTP͸Ͳ͏͍͏ϓϩτίϧʁ • ͲΜͳϔομ͕͋Δʁ • KeepAliveΊͪΌͪ͘ΌศརͰ͸ • HTTPͱHTTP2ͷҧ͍͸? • requestsϞδϡʔϧ͕ศར 20 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 21

Slide 21 text

WEBαʔόͷಈ͖ • αʔό͸WEBϖʔδʹΞΫηε͠ʹ͘ΔΫϥΠΞϯτͷTCPϙʔ τΛLISTEN͢Δ • ΫϥΠΞϯτ͸αʔόʹ઀ଓͯ͠ϦΫΤετΛ౤͛Δ • αʔό͸WEBϖʔδΛϦΫΤετͯ͠ฦ͢ 21 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 22

Slide 22 text

TCPαʔόͷ࣮૷ • echoαʔόͷ࣮૷͸؆୯ • socketϞδϡʔϧ͕ศར • ෳ਺ͷΫϥΠΞϯτ͔Βͷ઀ଓʹରԠͤͯ͘͞ • Ϛϧνϓϩηε΍ϚϧνεϨουɺΠϕϯτۦಈ • I/O(C10K໰୊) • thread,queue,select(),epoll() • GunicornͷίʔϧυϦʔσΟϯά 22 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 23

Slide 23 text

ֶशͷґଘ॥؀ • ಈ͘ͱָ͍͠ • αϯϓϧίʔυ΍ιʔείʔυΛಡΜ Ͱಈ͔ͯ͠ΈΔ • RFC΋ಡΜͰ࢓༷΋ಡΉΑ͏ʹͳΔ • πʔϧʹৼΓճ͞Εͣීวతͳٕज़Λ ௥͑Δ • Կॻ͍͍͍͔ͯͳΜͯ೰·ͳ͘ͳΔ 23 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 24

Slide 24 text

ෳ਺ͷϨΠϠɺ෼໺ʹߦ͚Δ Ҿ༻: 20ࡀΛա͔͗ͯΒϓϩάϥϛϯάΛֶ΅͏ͱܾΊͨਓͨͪ΁ 24 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )

Slide 25

Slide 25 text

·ͱΊ • ϓϩάϥϛϯάͷ࣍ͷҰา͕Θ͔Δ • ো֐ରԠͰιʔείʔυϨϕϧͰಈ࡞Λ௥͑Δ • ϓϩτίϧ΍௿ϨΠϠͳීวతͳٕज़ֶ͕΂Δ • ٕज़Λ௥͏॥؀ • ٕज़Λ௥͏͜ͱ͸ͨͷ͍͠ʂ • ٕज़ͷ࿩୊ͰϑϨϯζ΋Ͱ͖Δʂ • ٕज़ͷ࿩Λ͠ͳ͕Βɺ͓ञΛҿΉͷͨͷ͍͠ʂ 25 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )