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
Shuhei Ozawa
May 26, 2017
Programming
8.2k
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
290
production_ready_envoy
ozashu
2
1.2k
ログ・係数集約と可視化・分析
ozashu
0
170
Python for web architectures
ozashu
0
1k
PyQではじめるPython
ozashu
0
500
Other Decks in Programming
See All in Programming
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
120
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
650
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.7k
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
140
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
180
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
3
1.3k
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
140
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.4k
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
140
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
1
270
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
190
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
300
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Believing is Seeing
oripsolob
1
260
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
We Are The Robots
honzajavorek
0
410
The Cost Of JavaScript in 2023
addyosmani
55
10k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
730
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
470
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
570
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
770
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
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 )