Upgrade to Pro — share decks privately, control downloads, hide ads and more …

知っているようで知らないWebサーバアーキテクチャ

 知っているようで知らないWebサーバアーキテクチャ

第6回ゲームサーバ勉強会用資料です。
Webの技術の根幹となるHTTPやTCP/IPを軽くおさらいしたあと、
マルチプロセス、マルチスレッド、イベント駆動といったサーバアーキテクチャについて解析し、
さらにイベント駆動を実現するための非ブロッキングI/OとI/Oの多重化について解説します。

Yuki Tamura

May 21, 2017
Tweet

More Decks by Yuki Tamura

Other Decks in Technology

Transcript

  1. GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com

    Accept-Language: en, mi HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain Hello World! My payload includes a trailing CRLF. (&5ʹΑΔΫϥΠΞϯτͷཁ੥ (&5ͷཁ੥ʹର͢Δαʔό͔ΒͷԠ౴
  2. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ΫϥΠΞϯτ αʔόʔ TPDLFU DPOOFDUʢϒϩοΫʣ
 ʢΞΫςΟϒΦʔϓϯʣ TPDLFU CJOE MJTUFOʢύογϒΦʔϓϯʣ BDDFQUʢϒϩοΫʣ

    DPOOFDU͔Β໭Δ BDDFQU͔Β໭Δ
 SFBEʢϒϩοΫʣ 4:/+ 4:/, BDL+  BDL,   αʔόʔ͸ίωΫγϣϯΛड͚෇͚Δ༻ҙΛ͢Δ
 ͜Ε͸௨ৗTPDLFUɺCJOEɺMJTUFOΛݺͼग़͢ʹύογϒΦʔϓϯ  ΫϥΠΞϯτ͸DPOOFDUΛݺͼग़͠ΞΫςΟϒΦʔϓϯΛ࣮ߦ͢Δ
 γʔέϯε൪߸ͷॳظ஋Λ4:/ηάϝϯτͰૹ৴͢Δ  αʔό͸4:/ʹର͢ΔԠ౴Λૹ৴͢ΔͨΊʹࣗ਎ͷ4:/ͱɺ
 ΫϥΠΞϯτͷ4:/ʹର͢ΔԠ౴ͱͳΔ"$,Λ୯Ұͷηάϝϯτͱͯ͠ૹ৴͢Δ  ΫϥΠΞϯτ͸αʔόͷ4:/ʹԠ౴͢Δ     BDL֬ೝԠ౴൪߸
  3. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ΫϥΠΞϯτPSαʔόʔ αʔόʔPSΫϥΠΞϯτ DMPTF
 ʢΞΫςΟϒΫϩʔζʣ '*/. BDL.  BDL/ 

     ऴྃ͢Δଆ͕DMPTFΛݺͼग़͢ʹΞΫςΟϒΫϩʔζ
 σʔλͷૹ৴͕ऴྃͨ͜͠ͱΛҙຯ͢Δ'*/ηάϝϯτΛૹ৴͢Δ  '*/Λड৴ͨ͠ଆ͸ɺύογϒΫϩʔζΛ࣮ߦɺड৴ͨ͠'*/͸5$1ʹΑͬͯ
 Ԡ౴͕ૹ৴͞ΕɺͦΕҎ্σʔλ͸ड৴͠ͳ͍ͷͰ&0'ͱͯ͠ΞϓϦʹ௨஌  &0'ΛಡΈग़ͨ͠ΞϓϦ͕ιέοτͷDMPTFΛߦ͏
 ͜ΕʹΑΓɺ5$1͸'*/ηάϝϯτΛૹ৴͢Δ  ࠷ޙͷ'*/Λड৴ͨ͠ଆ͸͜ͷ'*/ʹର͢ΔԠ౴Λߦ͏     ʢύογϒΫϩʔζʣ SFBE͕Λฦ͢ '*// DMPTF
  4. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ΫϥΠΞϯτ αʔόʔ TPDLFU DPOOFDUʢϒϩοΫʣ TPDLFU CJOE MJTUFO BDDFQUʢϒϩοΫʣ 4:/@3$7%

    &45"#-*4)&% DPOOFDU͔Β໭Δ &45"#-*4)&% BDDFQU͔Β໭ΔɺSFBEʢϒϩοΫʣ XSJUFɺSFBEʢϒϩοΫʣ ˝σʔλʢཁٻʣ ʻαʔό͕ཁٻΛॲཧʼ XSJUFɺSFBEʢϒϩοΫʣ ˝σʔλʢԠ౴ʣ ɹཁٻͷBDL SFBE͔Β໭Δ DMPTF '*/@8"*5@ SFBE͔Β໭Δ BDL֬ೝԠ౴൪߸ Ԡ౴ͷBDL $-04&@8"*5 DMPTF 5*.&@8"*5 $-04&% ͱ ͋ Δ ̩ ̘ ̥ ί ω Ϋ γ ϣ ϯ -"45@"$, '*/@8"*5@ SFBE͕Λฦ͢ 4:/@4&/5 -*45&/ ͔͜͜͠ ݟͯͳ͍
  5. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ΫϥΠΞϯτ αʔό 5$1ϙʔτΛCJOEͯ͠ MJTUFO͢Δ (&5)551 )5510, 5$1XBZIBOETIBLF BDDFQUͯ͠ ৽͍͠઀ଓΛड͚ೖΕΔ

    SFBE SFDW Ͱ )551ϦΫΤετΛड͚औΔ ϦΫΤετΛॲཧ͢Δ XSJUF TFOE Ͱ )551ϨεϙϯεΛฦ͢ DMPTFͯ͠5$1઀ଓΛ੾Δ ج ຊ త ͳ ϓ ϩ η ε ॲ ཧ
  6. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Ϛϧνϓϩηε SP PC hoge::i
 foo::tmp main() hoge() foo() globalHoges;

    ελοΫ ςΩετ σʔλ new bar[]; ώʔϓ SP PC hoge::i
 foo::tmp main() hoge() foo() globalHoges; new bar[]; GPSL ϓϩηεͷίϐʔ Ծ૝ΞυϨεۭؒ Ծ૝ΞυϨεۭؒ Ϩδελ Ϩδελ 1$ϓϩάϥϜΧ΢ϯλ 41ελοΫϙΠϯλ
  7. ਌ϓϩηε ࢠϓϩηε ࢠϓϩηε ࢠϓϩηε ࢠϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ ΫϥΠΞϯτ ΫϥΠΞϯτ ˛

    GPSLͯ͠ ࢠϓϩηεΛ૿΍͢ ͦΕͧΕ͕ɺ਌ͱ ಉ͡Α͏ʹड͚෇͚Δ Ϛϧνϓϩηεͷ࢓૊Έ
  8. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ϚϧνεϨου SP PC foo::i
 foo::j main() hoge() foo() globalHoges;

    ελοΫ ςΩετ σʔλ new bar[]; ώʔϓ hoge::x
 hoge::y εϨου̍ SP PC ελοΫ εϨου̎ Ϩδελ Ϩδελ 1$ϓϩάϥϜΧ΢ϯλ 41ελοΫϙΠϯλ Ծ૝ΞυϨεۭؒ
  9. ϒϩοΩϯά*0 ΞϓϦ Χʔωϧ γεςϜίʔϧΛݺͿͱ ΧʔωϧʹεΠον͢Δ JOJUJBUF SFBE*0 SFBE SFTQPOTF σʔλΛ

    Χʔωϧۭ͔ؒΒ Ϣʔβʔۭؒ΁ 3FBE ϓϩηε͸γεςϜίʔϧͷ ฦ౴଴ͪʹͳΓுΓ෇͘ɻ ͦͷؒɺϓϩάϥϜͷॲཧ͕ ਐΉ͜ͱ͸Ͱ͖ͳ͍ɻ CMPDLFE
  10. ඇϒϩοΩϯά*0 ΞϓϦ Χʔωϧ γεςϜίʔϧΛݺͿͱ ΧʔωϧʹεΠον͢Δ JOJUJBUF SFBE*0 SFBE SFTQPOTF 3FBE

    ϑΝΠϧσΟεΫϦϓλͷ ४උ͕׬͍ྃͯ͠ͳ͚Ε͹ ଈ࠲ʹΤϥʔΛฦ͢ɻ ϓϩηε͸ϒϩοΫ͞Εͣɺ ͦͷؒʹଞͷॲཧΛ͢Δ͜ͱ͕ Ͱ͖Δɻ ଈ࠲ʹΤϥʔΛฦ͢ ଈ࠲ʹΤϥʔΛฦ͢ γεςϜίʔϧΛݺͿͱ ΧʔωϧʹεΠον͢Δ γεςϜίʔϧΛݺͿͱ ΧʔωϧʹεΠον͢Δ σʔλΛ Χʔωϧۭ͔ؒΒ Ϣʔβʔۭؒ΁
  11. *0ͷଟॏԽ QPMM ɺTFMFDU ɺFQPMM  γεςϜίʔϧΛར༻͠ɺ ෳ਺ͷσΟεΫϦϓλΛ ̍ͭͷϓϩηεͰ؅ཧ͢Δ͜ͱɻ ೖग़ྗՄೳʹͳͬͨ৔߹ɺ Χʔωϧ͔Β௨஌͞ΕΔɻ

    ΞϓϦ Χʔωϧ γεςϜίʔϧΛݺͿͱ ΧʔωϧʹεΠον͢Δ JOJUJBUF SFBE*0 SFBE SFTQPOTF 4FMFDU ଈ࠲ʹΤϥʔΛฦ͢ γεςϜίʔϧΛݺͿͱ ΧʔωϧʹεΠον͢Δ σʔλΛ Χʔωϧۭ͔ؒΒ Ϣʔβʔۭؒ΁ SFBE 4FMFDUͰ σʔλ͕ಡΊΔΑ͏ʹͳΔ SFBE CMPDLFE
  12. ඇಉظ*0 ΞϓϦ Χʔωϧ γεςϜίʔϧΛݺͿͱ ΧʔωϧʹεΠον͢Δ JOJUJBUF SFBE*0 SFBE SFTQPOTF σʔλΛ

    Χʔωϧۭ͔ؒΒ Ϣʔβʔۭؒ΁ ଞ ͷ ॲ ཧ ͕ Մ ೳ *0ॲཧ͕׬ྃͨ͠λΠϛϯάͰ ௨஌Λߦ͏ɻ ௨஌͸γάφϧ͔ίʔϧόοΫʹ ΑͬͯߦΘΕɺ௨஌͕͘Δ·Ͱ͸ ଞͷॲཧΛ͢Δ͜ͱ͕Ͱ͖Δɻ BJP@SFBE *0 QSPDFTTJOH
  13. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE w "QBDIF.1.QSFGPSLʢϚϧνϓϩηεʣ w "QBDIF.1.XPSLFSʢϚϧνϓϩηεʴϚϧνεϨουʣ w "QBDIF.1.FWFOUʢϚϧνϓϩηεʴΠϕϯτۦಈʣ w **4ʢϚϧνϓϩηεʴϚϧνεϨουʣ w

    OHJOYʢϚϧνϓϩηεʴΠϕϯτۦಈʣ ࣮ࡍͷ)551αʔόͰ͸ɺεέʔϧ͢ΔͨΊʹ ඇৗʹߴ౓ͳ͜ͱ͕ߦΘΕ͍ͯ·͢ɻ ૊Έ߹ΘͤʹΑΔ࢓૊Έ NQNNVMUJQSPDFTTJOHNPEVMF