Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
インフラエンジニアの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
260
production_ready_envoy
ozashu
2
1.2k
ログ・係数集約と可視化・分析
ozashu
0
160
Python for web architectures
ozashu
0
1k
PyQではじめるPython
ozashu
0
480
Other Decks in Programming
See All in Programming
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
260
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.4k
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
260
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.8k
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
120
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
13k
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.5k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
230
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.5k
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
Agentic UI
manfredsteyer
PRO
0
190
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
570
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.6k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
170
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
エンジニアに許された特別な時間の終わり
watany
107
250k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
220
Ethics towards AI in product and experience design
skipperchong
2
310
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Designing for humans not robots
tammielis
254
26k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
330
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 )