Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
インフラエンジニアのWEBアプリ入門
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shuhei Ozawa
May 26, 2017
Programming
8.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
インフラエンジニアのWEBアプリ入門
y8c 2017の発表資料です。
Shuhei Ozawa
May 26, 2017
More Decks by Shuhei Ozawa
See All by Shuhei Ozawa
Amebaアフィリエイト基盤の GKEアーキテクチャと マイクロサービス
ozashu
0
280
production_ready_envoy
ozashu
2
1.2k
ログ・係数集約と可視化・分析
ozashu
0
170
Python for web architectures
ozashu
0
1k
PyQではじめるPython
ozashu
0
490
Other Decks in Programming
See All in Programming
一人だけ、Kiroが静止する日
hideg
0
120
速習iPhone Duo対応
yuukiw00w
1
590
iOSDC2026登壇資料.pdf
riofujimon
0
170
Security issues being discussed on Web Platforms
petamoriken
0
960
What We Talk About When We Talk About XP
m_seki
2
650
アクセシビリティから考える情報設計
high_g_engineer
0
380
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
150
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.3k
AIエージェント時代のコードレビューを設計する
nogu66
6
2.7k
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
280
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
170
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
350
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Site-Speed That Sticks
csswizardry
13
1.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
How to build a perfect <img>
jonoalderson
1
6k
Making the Leap to Tech Lead
cromwellryan
135
10k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Faster Mobile Websites
deanohume
310
32k
Transcript
ΠϯϑϥΤϯδχΞͷ WEBΞϓϦೖ 1 Y8 2017 2017/05/27 - Ozawa Shuhei (
@oza_shu )
ࣗݾհ • খपฏ • @oza_shu • Sler→WEBۀք 2 Y8 2017
2017/05/27 - Ozawa Shuhei ( @oza_shu )
͢͜ͱ • ࡞͍ͯ͠ΔΞϓϦ(Ԍ্த) • ΞϓϦ࡞Λ࢝ΊͯΑ͔ͬͨ͜ͱ • ΞϓϦ։ൃ͕ϓϩάϥϛϯάೖʹ͓͢͢Ίͳཧ༝ ͞ͳ͍͜ͱ • ϓϩάϥϛϯάݴޠ
• ϑϨʔϜϫʔΫ 3 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
ฉ͍ͯ΄͍͠ਓ • ͜Ε͔Βϓϩάϥϛϯάษڧ͍ͨ͠ਓ • ษڧͯ͠Δ͚ͲԿΛ࡞ͬͨΒ͍͍͔Θ͔Βͳ͍ਓ • ίʔυॻ͚ΔΑ͏ʹͳΓ͍ͨΠϯϑϥΤϯδχΞ • ϓϩάϥϛϯάॻ͚ΔΑ͏ʹͳΓ͍ͨͱ૬ஊ͞ΕΔਓ 4
Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
ϓϩάϥϛϯά͕Ͱ͖Δͱ Ҿ༻: 20ࡀΛա͔͗ͯΒϓϩάϥϛϯάΛֶ΅͏ͱܾΊͨਓͨͪ 5 Y8 2017 2017/05/27 - Ozawa Shuhei
( @oza_shu )
WEBΞϓϦ͕͓͢͢Ίͷཧ༝ • ೲظ͕ٛͳ͍ • ඞཁͳٕज़͕ଟذʹΔ • αʔό্Ͱಈ͍͍ͯΔΞϓϦͷಈ͖͕Θ͔Δ • োରԠͰΞϓϦͷιʔείʔυΛ͑ΔΑ͏ʹͳΔ •
ॻ͘ͱಈ͘ʂ͢͝ʔ͍ʂͨͷ͠ʔ͍ʂ 6 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
࡞͍ͬͯΔͷ Collect-Qiita ཁ݅ • Qiitaͷ࠷৽هࣄऔಘͱݕࡧ • ϩάΠϯػೳ • ηογϣϯอ࣋ •
͓ؾʹೖΓػೳ(Ԍ্த) 7 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
DEMO ؒʹ߹Θͳ͔ͬͨ! ΞΧϯτ࡞ʙهࣄͷݕࡧ·Ͱ ͏͍ͯ͝! 8 Y8 2017 2017/05/27 - Ozawa
Shuhei ( @oza_shu )
Collect-QiitaͰඞཁͱͳΔٕज़ • Qiitaͷ࠷৽هࣄऔಘͱݕࡧ • GET,POST,ϧʔςΟϯά,ςϯϓϨʔτ,FORMॲཧ • ϩάΠϯػೳ • DB࿈ܞ, ηΩϡϦςΟ
• ηογϣϯอ࣋ • Ωϟογϡ, HTTPϓϩτίϧ • ͓ؾʹೖΓػೳ • DB࿈ܞ, Ajax?? 9 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
ΞϓϦΛ࡞Γ࢝ΊΔͱ ػೳΛՃͨ͘͠ͳΔ • APIΛୟ͍ͯهࣄΛͱͬͯ͜Εͨʂ • هࣄΛ͓ؾʹೖΓొ͍ͨ͠ʂ • ϩάΠϯೝূ͠ͳ͍ͱͩʂ • ηογϣϯཧඞཁͳΜͩɻRedisͰอଘ͍ͨ͠ͳ!
• DockerͰίϯςφʹͯ͠Έ͍ͨʂ • ྲྀߦΓͩ͠k8sͰϚΠΫϩαʔϏεʹ͢Δ?? 10 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
࣍ͷҰา͕Θ͔Δ! Ҿ༻: 20ࡀΛա͔͗ͯΒϓϩάϥϛϯάΛֶ΅͏ͱܾΊͨਓͨͪ 11 Y8 2017 2017/05/27 - Ozawa Shuhei
( @oza_shu )
WEBΞϓϦ͕͓͢͢Ίͷཧ༝ • ೲظ͕ٛͳ͍ • ػೳՃͯ͠Ԍ্͍͍ͯ͠ • ඞཁͳٕज़͕ଟذʹΔ • ৭Μͳٕज़ֶָ͕͍ͯ͠ʂ •
αʔό্Ͱಈ͍͍ͯΔ͕ͳΜͳͷ͔ΕΔ • ͲΜͳٕज़͕ΘΕ͍ͯΔͷ͔Δͷָ͍͠ʂ • ॻ͘ͱಈ͘ʂ͢͝ʔ͍ʂͨͷ͠ʔ͍ʂ ɹ- ! 12 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
ࣗͷ࡞ͬͨΞϓϦͲ͏ͬͯ ಈ͍͍ͯΔΜͩΖ͏? - ΞϓϦΛಈ͔͍ͯ͠Δϓϩηεʹ͍ͭͯͬͱΓ͍ͨ - Ͳ͏ͬͯΞϓϦʹΞΫηε͍ͯ͠Δͷ͔Γ͍ͨ 13 Y8 2017 2017/05/27
- Ozawa Shuhei ( @oza_shu )
ΞϓϦΛಈ͔͍ͯ͠Δϓϩηεʹ͍ͭ ͯͬͱΓ͍ͨ • ΧʔωϧϓϩηεΛׂΓৼΒΕͨPIDΛΈͯͱͯ͠ѻ͏ • ࣮ߦதͷϓϩηε͕ϦιʔεΛ։͘ͱϑΝΠϧσΟεΫϦϓλ ׂ͕ΓͯΒΕΔ 14 Y8 2017
2017/05/27 - Ozawa Shuhei ( @oza_shu )
ίʔυྫ(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 )
ίʔυྫ(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 )
ϑΝΠϧσΟεΫϦϓλʹ੍ݶ͕͋ Δ ϑΝΠϧ͕։͚ͳͯ͘োରԠΛͨ͜͠ͱ͕͋ͬͨͳ ιϑτϦϛοτΛ্͛ͨ͜ͱΛࢥ͍ग़ͨ͠ PythonͰopenͰϑΝΠϧΛ։͍ͨΒด͡Α͏ͱॻ͍ͯ͋ͬͨʂ withจΛ͏ͷΛ͓͢͢Ί͞Εͨཧ༝͕Θ͔ͬͨʂ 17 Y8 2017 2017/05/27
- Ozawa Shuhei ( @oza_shu )
fork()ؾʹͳͬͯ͘Δ ϓϩηε͕Fork͞ΕΔͬͯͲ͏͍͏͜ͱ͚ͩͬ? ࢠϓϩηεϓϩηεͰΘΕ͍ͯΔશͯͷϝϞϦͷίϐʔΛҾ͖ܧ͙ ϑΝΠϧσΟεΫϦϓλ(ιέοτ) • prefork • ίϐʔɾΦϯɾϥΠτʢCoWɺCopy on Writeʣ
• ԿͰκϯϏϓϩηεͬͯͳΔΜ͚ͩͬ • ϓϩηεؒ௨৴ • ύΠϓॲཧ,ετϦʔϜ,ϝοηʔδ • γάφϧॲཧ • ϓϩηεάϧʔϓ,ηογϣϯάϧʔϓ 18 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
Ͳ͏ͬͯΞϓϦʹ ΞΫηε͍ͯ͠Δͷ͔Γ͍ͨ • HTTPΞϓϦέʔγϣϯϓϩτίϧ • HTTPTCP(UDP)্Ͱ༻͞Εɺ ΫϥΠΞϯτͱαʔόͰΓͱΓ͞ΕΔ 19 Y8 2017
2017/05/27 - Ozawa Shuhei ( @oza_shu )
HTTPϓϩτίϧ • HTTPͲ͏͍͏ϓϩτίϧʁ • ͲΜͳϔομ͕͋Δʁ • KeepAliveΊͪΌͪ͘ΌศརͰ • HTTPͱHTTP2ͷҧ͍? •
requestsϞδϡʔϧ͕ศར 20 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
WEBαʔόͷಈ͖ • αʔόWEBϖʔδʹΞΫηε͠ʹ͘ΔΫϥΠΞϯτͷTCPϙʔ τΛLISTEN͢Δ • ΫϥΠΞϯταʔόʹଓͯ͠ϦΫΤετΛ͛Δ • αʔόWEBϖʔδΛϦΫΤετͯ͠ฦ͢ 21 Y8
2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
TCPαʔόͷ࣮ • echoαʔόͷ࣮؆୯ • socketϞδϡʔϧ͕ศར • ෳͷΫϥΠΞϯτ͔ΒͷଓʹରԠͤͯ͘͞ • ϚϧνϓϩηεϚϧνεϨουɺΠϕϯτۦಈ •
I/O(C10K) • thread,queue,select(),epoll() • GunicornͷίʔϧυϦʔσΟϯά 22 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
ֶशͷґଘ॥ • ಈ͘ͱָ͍͠ • αϯϓϧίʔυιʔείʔυΛಡΜ Ͱಈ͔ͯ͠ΈΔ • RFCಡΜͰ༷ಡΉΑ͏ʹͳΔ • πʔϧʹৼΓճ͞Εͣීวతͳٕज़Λ
͑Δ • Կॻ͍͍͍͔ͯͳΜͯ·ͳ͘ͳΔ 23 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )
ෳͷϨΠϠɺʹߦ͚Δ Ҿ༻: 20ࡀΛա͔͗ͯΒϓϩάϥϛϯάΛֶ΅͏ͱܾΊͨਓͨͪ 24 Y8 2017 2017/05/27 - Ozawa Shuhei
( @oza_shu )
·ͱΊ • ϓϩάϥϛϯάͷ࣍ͷҰา͕Θ͔Δ • োରԠͰιʔείʔυϨϕϧͰಈ࡞Λ͑Δ • ϓϩτίϧϨΠϠͳීวతͳٕज़ֶ͕Δ • ٕज़Λ͏॥ •
ٕज़Λ͏͜ͱͨͷ͍͠ʂ • ٕज़ͷͰϑϨϯζͰ͖Δʂ • ٕज़ͷΛ͠ͳ͕Βɺ͓ञΛҿΉͷͨͷ͍͠ʂ 25 Y8 2017 2017/05/27 - Ozawa Shuhei ( @oza_shu )