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
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
270
production_ready_envoy
ozashu
2
1.2k
ログ・係数集約と可視化・分析
ozashu
0
160
Python for web architectures
ozashu
0
1k
PyQではじめるPython
ozashu
0
490
Other Decks in Programming
See All in Programming
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
130
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
170
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.7k
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
140
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
170
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
440
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
110
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
140
えっ!!コードを読まずに開発を!?
hananouchi
0
220
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
220
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
140
symfony/aiとlaravel/boost
77web
0
130
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.5k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Side Projects
sachag
455
43k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
Building Flexible Design Systems
yeseniaperezcruz
330
40k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
260
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
640
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Building Applications with DynamoDB
mza
96
7.1k
Utilizing Notion as your number one productivity tool
mfonobong
4
430
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
A Tale of Four Properties
chriscoyier
163
24k
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 )