インフラエンジニアのWEBアプリ入門

 インフラエンジニアのWEBアプリ入門

y8c 2017の発表資料です。

519c71549708fd89c02c3aca573acfde?s=128

Shuhei Ozawa

May 26, 2017
Tweet

Transcript

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

    @oza_shu )
  2. ࣗݾ঺հ • খ୔पฏ • @oza_shu • Sler→WEBۀք 2 Y8 2017

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

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

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

    ( @oza_shu )
  6. WEBΞϓϦ͕͓͢͢Ίͷཧ༝ • ೲظ΍ٛ຿͕ͳ͍ • ඞཁͳٕज़͕ଟذʹ౉Δ • αʔό্Ͱಈ͍͍ͯΔΞϓϦͷಈ͖͕Θ͔Δ • ো֐ରԠͰΞϓϦͷιʔείʔυΛ௥͑ΔΑ͏ʹͳΔ •

    ॻ͘ͱಈ͘ʂ͢͝ʔ͍ʂͨͷ͠ʔ͍ʂ 6 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
  7. ࡞͍ͬͯΔ΋ͷ Collect-Qiita ཁ݅ • Qiitaͷ࠷৽هࣄऔಘͱݕࡧ • ϩάΠϯػೳ • ηογϣϯอ࣋ •

    ͓ؾʹೖΓػೳ(Ԍ্த) 7 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
  8. DEMO ׬੒ؒʹ߹Θͳ͔ͬͨ! ΞΧ΢ϯτ࡞੒ʙهࣄͷݕࡧ·Ͱ ͏͍ͯ͝! 8 Y8 2017 2017/05/27 - Ozawa

    Shuhei ( @oza_shu )
  9. Collect-QiitaͰඞཁͱͳΔٕज़ • Qiitaͷ࠷৽هࣄऔಘͱݕࡧ • GET,POST,ϧʔςΟϯά,ςϯϓϨʔτ,FORMॲཧ • ϩάΠϯػೳ • DB࿈ܞ, ηΩϡϦςΟ

    • ηογϣϯอ࣋ • Ωϟογϡ, HTTPϓϩτίϧ • ͓ؾʹೖΓػೳ • DB࿈ܞ, Ajax?? 9 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
  10. ΞϓϦΛ࡞Γ࢝ΊΔͱ ػೳΛ௥Ճͨ͘͠ͳΔ • APIΛୟ͍ͯهࣄΛͱͬͯ͜Εͨʂ • هࣄΛ͓ؾʹೖΓొ࿥͍ͨ͠ʂ • ϩάΠϯೝূ͠ͳ͍ͱͩʂ • ηογϣϯ؅ཧ΋ඞཁͳΜͩɻRedisͰอଘ͍ͨ͠ͳ!

    • DockerͰίϯςφʹͯ͠Έ͍ͨʂ • ྲྀߦΓͩ͠k8sͰϚΠΫϩαʔϏεʹ͢Δ?? 10 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
  11. ࣍ͷҰา͕Θ͔Δ! Ҿ༻: 20ࡀΛա͔͗ͯΒϓϩάϥϛϯάΛֶ΅͏ͱܾΊͨਓͨͪ΁ 11 Y8 2017 2017/05/27 - Ozawa Shuhei

    ( @oza_shu )
  12. WEBΞϓϦ͕͓͢͢Ίͷཧ༝ • ೲظ΍ٛ຿͕ͳ͍ • ػೳ௥Ճͯ͠Ԍ্ͯ͠΋͍͍ • ඞཁͳٕज़͕ଟذʹ౉Δ • ৭Μͳٕज़ֶ͕΂ָ͍ͯ͠ʂ •

    αʔό্Ͱಈ͍͍ͯΔ෺͕ͳΜͳͷ͔஌ΕΔ • ͲΜͳٕज़͕࢖ΘΕ͍ͯΔͷ͔஌Δͷָ͍͠ʂ • ॻ͘ͱಈ͘ʂ͢͝ʔ͍ʂͨͷ͠ʔ͍ʂ ɹ- ! 12 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
  13. ࣗ෼ͷ࡞ͬͨΞϓϦ͸Ͳ͏΍ͬͯ ಈ͍͍ͯΔΜͩΖ͏? - ΞϓϦΛಈ͔͍ͯ͠Δϓϩηεʹ͍ͭͯ΋ͬͱ஌Γ͍ͨ - Ͳ͏΍ͬͯΞϓϦʹΞΫηε͍ͯ͠Δͷ͔஌Γ͍ͨ 13 Y8 2017 2017/05/27

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

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

    - Ozawa Shuhei ( @oza_shu )
  18. fork()ؾʹͳͬͯ͘Δ ϓϩηε͕Fork͞ΕΔͬͯͲ͏͍͏͜ͱ͚ͩͬ? ࢠϓϩηε͸਌ϓϩηεͰ࢖ΘΕ͍ͯΔશͯͷϝϞϦͷίϐʔΛҾ͖ܧ͙ ϑΝΠϧσΟεΫϦϓλ(ιέοτ)΋ • prefork • ίϐʔɾΦϯɾϥΠτʢCoWɺCopy on Writeʣ

    • ԿͰκϯϏϓϩηεͬͯͳΔΜ͚ͩͬ • ϓϩηεؒ௨৴ • ύΠϓॲཧ,ετϦʔϜ,ϝοηʔδ • γάφϧॲཧ • ϓϩηεάϧʔϓ,ηογϣϯάϧʔϓ 18 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
  19. Ͳ͏΍ͬͯΞϓϦʹ ΞΫηε͍ͯ͠Δͷ͔஌Γ͍ͨ • HTTP͸ΞϓϦέʔγϣϯ૚ϓϩτίϧ • HTTP͸TCP(UDP)্Ͱ࢖༻͞Εɺ ΫϥΠΞϯτͱαʔόͰ΍ΓͱΓ͞ΕΔ 19 Y8 2017

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

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

    2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
  22. TCPαʔόͷ࣮૷ • echoαʔόͷ࣮૷͸؆୯ • socketϞδϡʔϧ͕ศར • ෳ਺ͷΫϥΠΞϯτ͔Βͷ઀ଓʹରԠͤͯ͘͞ • Ϛϧνϓϩηε΍ϚϧνεϨουɺΠϕϯτۦಈ •

    I/O(C10K໰୊) • thread,queue,select(),epoll() • GunicornͷίʔϧυϦʔσΟϯά 22 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
  23. ֶशͷґଘ॥؀ • ಈ͘ͱָ͍͠ • αϯϓϧίʔυ΍ιʔείʔυΛಡΜ Ͱಈ͔ͯ͠ΈΔ • RFC΋ಡΜͰ࢓༷΋ಡΉΑ͏ʹͳΔ • πʔϧʹৼΓճ͞Εͣීวతͳٕज़Λ

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

    ( @oza_shu )
  25. ·ͱΊ • ϓϩάϥϛϯάͷ࣍ͷҰา͕Θ͔Δ • ো֐ରԠͰιʔείʔυϨϕϧͰಈ࡞Λ௥͑Δ • ϓϩτίϧ΍௿ϨΠϠͳීวతͳٕज़ֶ͕΂Δ • ٕज़Λ௥͏॥؀ •

    ٕज़Λ௥͏͜ͱ͸ͨͷ͍͠ʂ • ٕज़ͷ࿩୊ͰϑϨϯζ΋Ͱ͖Δʂ • ٕज़ͷ࿩Λ͠ͳ͕Βɺ͓ञΛҿΉͷͨͷ͍͠ʂ 25 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )