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
Python アプリケーションの裏側とその機序 -WSGI, ASGI 編-
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
himura467
June 01, 2025
Technology
97
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Python アプリケーションの裏側とその機序 -WSGI, ASGI 編-
himura467
June 01, 2025
More Decks by himura467
See All by himura467
Figma MCP 勉強会
himura
0
21
基盤モデルのアーキテクチャを改造してみよう - 時系列基盤モデルのマルチモーダル拡張事例の紹介 -
himura
1
1.3k
人生における期待効用の最大化について考える
himura
0
120
CA_kube-scheduler
himura
0
23
Other Decks in Technology
See All in Technology
【FinOps】データドリブンな意思決定を目指して
z63d
2
490
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
290
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
120
When Platform Engineering Meets GenAI
sucitw
0
200
はてなのサービス基盤を支える Kubernetes《足腰》
masayoshimaezawa
0
220
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
610
Zenoh on Zephyr on LiteX
takasehideki
2
130
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
260
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
620
次世代ランサムウェア対策の考察 / 20260704 Mitsutoshi Matsuo
shift_evolve
PRO
1
160
從開發到部署全都交給 AI:實作 AI 驅動的自動化流程
appleboy
0
180
初めてのDatabricks勉強会
taka_aki
2
200
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Agile that works and the tools we love
rasmusluckow
331
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Docker and Python
trallard
47
3.9k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Raft: Consensus for Rubyists
vanstee
141
7.6k
We Have a Design System, Now What?
morganepeng
55
8.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Transcript
ͻΉΒ 1ZUIPOΞϓϦέʔγϣϯͷཪଆͱͦͷػং 84(* "4(*ฤ 2025.5.31 1
͓ͼ Gomen 2025.5.31 2 ͓ͼ
%PDLFSͷ·ͰḷΓண͚ͳ͔ͬͨʜ Moushiwakenai 2025.5.31 5 ͓ͼ 3
8FCΞϓϦέʔγϣϯͷཪଆ Web Application Backyard 2025.5.31 4 8FCΞϓϦͷཪଆ
8FCͷΈ How web works 2025.5.31 5 8FCΞϓϦͷཪଆ 5 Ϣʔβʔ͕ϒϥβʹΞΫηε͢Δͱ͖ɺཪଆͰԿ͕ى͍ͬͯ͜Δʁ ૉͳٙ
8FCͷΈ How web works 2025.5.31 5 8FCΞϓϦͷཪଆ 6 URL Web
Server Browser HTTP HTML DB ੩తίϯςϯπΛ৴͢Δ߹ nginx apache
8FCͷΈ How web works 2025.5.31 5 8FCΞϓϦͷཪଆ 7 Web Server
Browser HTTP HTML ಈతίϯςϯπΛ৴͢Δ߹ Application Server HTTP HTML DB WebSocket Frame WebSocket Frame
ίϯϐϡʔλͷཪଆ Computer Backyard 2025.5.31 8 ίϯϐϡʔλͷཪଆ
ύιίϯങ͏࣌ͱ͔ʜ Buying new PC 2025.5.31 5 ίϯϐϡʔλͷཪଆ 9
ύιίϯങ͏࣌ͱ͔ʜ Buying new PC 2025.5.31 5 ίϯϐϡʔλͷཪଆ 10
$16ͷཪଆ CPU backyard 2025.5.31 5 ίϯϐϡʔλͷཪଆ 11 CPU ίΞ ্ͷྫͰίΞ
Web Server εϨου ্ͷྫͰίΞ Memory CPU(non-SMT) Core Core Core ϓϩηε $16࣌ؒ୯ҐͰׂΓৼΒΕΔ ϓϩάϥϜͷ࣮ߦ୯Ґ εϨου $16Λར༻͢ΔͨΊͷ࣮ߦ୯Ґ ࠷খॲཧ୯Ґ Process Thread Thread Thread Process Thread Core
ϓϩηεͷத Process backyard 2025.5.31 5 ίϯϐϡʔλͷཪଆ 12 Memory Process Text
Segment Data Segment Process Text Segment Data Segment Text Segment Data Segment ϓϩάϥϜͷ໋ྩྻ ͪΖΜ໋ྩػցޠ 3FBE0OMZ ɾ11%" 1FS1SPDFTT%BUB"SFB ε λ ο Ϋ ϙΠ ϯ λɺ ϓ ϩ ά ϥϜ Χ ϯ λ ͳ ͲΧʔωϧͷ࣮ߦใΛอ࣋͢Δ ɾσʔλྖҬ ɹɾ੩తྖҬ ɹఆάϩʔόϧม ɹɾώʔϓྖҬ ɹ௨ৗͷมͳͲ ɾελοΫྖҬ ҾϩʔΧϧείʔϓͳͲͷҰ࣌σʔλ
8FCαʔόͷཪଆ Web Server Backyard 2025.5.31 13 8FCαʔόͷཪଆ
8FCͷฒྻॲཧ Parallel Processing 2025.5.31 5 8FCΞϓϦͷཪଆ 14 ʮαʔό͕ෳ্ཱ͕͍ͪͬͯΔʯ ʮϫʔΧ͕ϝϞϦΛ৯͍௵ͯ͠ࢮΜͩʯ ˢԿͷʁʁ
Ϛϧνϓϩηε Multi Process 2025.5.31 5 8FCαʔόͷཪଆ 15 Memory Process Text
Segment Data Segment ࢠProcess Data Segment ෳͷϓϩηεΛฒྻॲཧ͢Δ͜ͱ ࢠϓϩηεΛෳ্ཱͪ͛ͯฒྻʹಈ͔͢ σʔληάϝϯτͷΈίϐʔ͢Δ ίϐʔ ɾϓϩηεؒͷϝϞϦΛࢀরͰ͖ͳ͍
ϚϧνεϨου Multi Thread 2025.5.31 5 8FCαʔόͷཪଆ 16 Memory Process Text
Segment Data Segment Thread ϓϩηε͔ΒεϨουΛੜ͢Δ ϓϩηεͷྖҬʹεϨουΛෳ্ཱͪ͛ͯ ฒྻʹಈ͔͢ Stack Area Stack Area ίϐʔ ɾϝϞϦۭ͕֤ؒεϨουͷؒͰڞ༗Մೳ ɾϝϞϦۭؒͷΓସ͕͑গͳ͍ɺϝϞϦফඅྔ ɹίϯςΩετεΠονͷΦʔόʔϔου͕খ͍͞
8FCαʔόͷΞʔΩςΫνϟ .1. Web Server Architecture 2025.5.31 17 8FCαʔόͷΞʔΩςΫνϟ
QSFGPSL prefork 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 18 Web Server BQBDIFͰσϑΥϧτͰ࠾༻ Ϛϧνϓϩηε
ϦΫΤετͱϓϩηε͕ରͰରԠ ͭͷϓϩηε่͕յͯ͠ଞͷϓϩηεແࣄ αʔόৗʹز͔ͭͷΞΠυϧͳαʔόϓϩηεΛҡ͍࣋ͯͯ͠ɺ ͦΕΒೖ͖ͬͯͨϦΫΤετʹԠͰ͖ΔΑ͏ʹػ͍ͯ͠Δ ͜ͷΑ͏ʹͯ͠ΫϥΠΞϯτɺϦΫΤετ͕Ԡ͞ΕΔલʹ৽͍͠ࢠϓϩηε͕ GPSL͞ΕΔͷΛͨͳͯ͘Α͍Α͏ʹͳ͍ͬͯΔʢQSFGPSLʣ
XPSLFS worker 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 19 Web Server ϚϧνϓϩηεͱϚϧνεϨουͷϋΠϒϦουܕ ֤ࢠϓϩηεͰෳͷεϨου͕ฒྻ࣮ߦ
ϦΫΤετͱεϨου͕ରͰରԠ αʔόৗʹز͔ͭͷΞΠυϧͳαʔόεϨουͷϓʔϧΛৗʹҡ͍࣋ͯͯ͠ ͦΕΒೖͬͯ͘ΔϦΫΤετʹԠ͑ΒΕΔΑ͏ʹػ͍ͯ͠Δ ىಈॳظ࣌ͷϓϩηε૯StartServers σΟϨΫςΟϒͰઃఆ͞ΕΔ ՔಇதʹαʔόશϓϩηεͷΞΠυϧεϨουͷ߹ܭΛݟੵΓ MinSpareThreads ͱ .BY4QBSF5ISFBET Ͱࢦఆ͞Εͨൣғͷதʹ ͜ͷ͕ऩ·ΔΑ͏ʹGPSLͨ͠ΓLJMMͨ͠Γͯ͠͏·͍͜ͱௐ͢Δ
$L C10k Problem 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 20 ϚϧνϓϩηεϚϧνεϨουؔͳ͘ಉ࣌ଓ͕૿͑Δ͜ͱʹΑΓ ϝϞϦ͕ѹഭ͞ΕΔઃܭ prefork,worker
ͩͱ Ͳ͏ͯ͠ಉ࣌ଓͷ૿Ճʹͬͯαʔό͕ࢮ͵
FWFOU event 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 21 Web Server OHJOYͰ࠾༻͞Ε͍ͯΔʢBQBDIFͰ3)&-͔ΒσϑΥϧτʹʣ ΫϥΠΞϯτ͔ΒͷϦΫΤετΛΠϕϯτͱͯ͠ѻ͍
ͦΕΛτϦΨʔʹϓϩηεͰϋϯυϦϯά͢Δ ΠϕϯτϧʔϓʹΑΔඇಉظͳΠϕϯτۦಈͱ*0ଟॏԽʹΑΔϦΫΤετͷฒߦॲཧ $Lʹରॲ ίϯςΩετεΠονൃੜ͠ͳ͍ʢγϯάϧεϨουʣ γϯάϧεϨου͕ނʹϝϞϦϦʔΫΛىͨ͜͠߹ʹ શϦΫΤετ͕ר͖ఴ͑ʹͳͬͯ͠·͏ϦεΫͷ͜ͱΛݴ͍ͬͯΔ
ͪͳΈʹ1ZUIPOͰʁ case Python: 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 22 GIL(Global Interpreter Lock)
ෳͷεϨου͕ಉ࣌ʹϝϞϦʹΞΫηε͢Δ͜ͱ͕ͳ͍Α͏ʹɺෳͷεϨουͰ 1ZUIPOΠϯλʔϓϦλʔΛಉ࣌ʹ࣮ߦ͢Δ͜ͱΛ͙ͨΊͷͷ 1ZUIPOϓϩάϥϜෳͷεϨουΛ࡞Ͱ͖ΔͷͷɺҰʹ࣮ࡍͷ1ZUIPO ίʔυΛ࣮ߦͰ͖ΔͷͭͷεϨου͚ͩ ͨͩɺྲྀੴʹϚϧνίΞ$16Λ׆༻Ͱ͖ͳ͍ͷ·͍ͣͷͰ ࠷৽ͷ1ZUIPOͰGSFFUISFBEJOHͱ͍͏ػೳʹΑͬͯ(*-Λ ΦϓγϣϯͰແޮԽͰ͖ΔΑ͏ʹͳ͍ͬͯΔʢ·ͩ৮Ε͍ͯͳ͍ʣ
༨ஊ Digression 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 23 ಡ*5༻ޠ࢛ఱԦɺ͋ͱҰਓʁ ɾnginx ɾJWT ɾWSGI
1ZUIPOͰ 8FCΞϓϦέʔγϣϯΛ ࡞ͬͯΈΔͧʂ Python Web Application 2025.5.31 24 1ZUIPOͰ8FCΞϓϦΛ࡞Δ
1ZUIPO8FCϑϨʔϜϫʔΫҰཡ Web Application Framework ೝূػߏɺ03.ɺ944ɺ42-JͷରࡦػߏͳͲΛඪ४Ͱࡌ͍ͯ͠ΔॾʑίϛίϛศརϑϨʔϜϫʔΫ *OTUBHSBN 1JOUFSFTU 'JSFGPYͷ։ൃʹ༻͍ΒΕ͍ͯΔ 2025.5.31 Django
5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 25 ඞཁ࠷খݶͷػೳͷΈΛඋ͑ͨίϯύΫτͳϑϨʔϜϫʔΫ ֶशίετ͕͍ Flask ͱΓ͋͑ͣ͘ɺόοΫΤϯυ։ൃʹ͓͍ͯσϑΝΫτελϯμʔυײ͕͋Δ σϑΥϧτͰ"1*υΩϡϝϯτΛੜͯ͘͠ΕΔ FastAPI
ྫ͑ʜ For example 2025.5.31 FastAPI 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 26 GPSFDBTUBUUFOEBODF ͱ͍͏"1*ͷఆٛ
͜Ε8FCͷߏͷͲ͜ʹ͋ͨΔʁ Kore ha Web no kousei no uchi doko ni
ataru? 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 27 Web Server Browser HTTP HTML ಈతίϯςϯπΛ৴͢Δ߹ Application Server HTTP HTML DB WebSocket Frame WebSocket Frame
͜Ε8FCͷߏͷͲ͜ʹ͋ͨΔʁ Kore ha Web no kousei no uchi doko ni
ataru? 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 28 Web Server Browser HTTP HTML ಈతίϯςϯπΛ৴͢Δ߹ Application Server HTTP HTML DB WebSocket Frame WebSocket Frame
'BTU"1*͚ͩͰ)551Λѻ͑ͳ͍ FastAPI cannot handle HTTP 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 29 6WJDPSOͱ͍͏ϥΠϒϥϦΛͬͯݺͿඞཁ͕͋Δ
6WJDPSOͱʁ What is Uvicorn? 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 30 "4(*ͱ͍͏8FCඪ४ʹ४ڌͨ͠8FCαʔόͷ࣮ ɾ"4(*
ඇಉظରԠͷ1ZUIPO8FCαʔόͱ8FCΞϓϦέʔγϣϯؒͷ ൚༻తͳΠϯλʔϑΣʔε 84(*ͷޙܧͱͯ͠࡞ΒΕͨ දతͳ࣮ͱͯ͠Uvicorn, NGINX Unit, HypercornͳͲ͕͋Δ ɾ84(* 1ZUIPO8FCαʔόͱ8FCΞϓϦέʔγϣϯؒͷ ൚༻తͳΠϯλʔϑΣʔε දతͳ࣮ͱͯ͠Gunicorn, uWSGIͳͲ͕͋Δ
1ZUIPO8FCϑϨʔϜϫʔΫͷରԠඪ४ Web Application Framework and Interface mapping 84(* "4(*ʢ࠷ۙରԠͨ͠ʣ 2025.5.31
Django 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 31 84(* Flask "4(* FastAPI
6WJDPSOͷཪଆ Uvicorn backyard 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 32 ࣮6WJDPSOγϯάϧϓϩηεͰ͔͠ಈ͔ͳ͍ ͦͷͨΊɺૉʹσϓϩΠ͢ΔͱϚϧνίΞͷϚγϯϦιʔεΛेશʹ׆͔͖͠Εͳ͍
ϚϧνίΞΛ׆͔͢ߏ Make use of Multiple CPU core 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ
33 ϚϧνίΞΛ׆͔ͯ͠ฒྻॲཧΛ༻͍ͯϦΫΤετΛࡹ͖͍ͨ߹ʁ (VOJDPSO ϚϧνϓϩηεͰ͍͚ΔͷͰɺ(VOJDPSO ͷϫʔΧʔϓϩηεͱͯ͠ 6WJDPSOΛ༻͍Δߏ͕Αͦ͞͏ʢ'BTU"1*͕ਪ͍ͯ͠Δʣ ͪͳΈʹ(VOJDPSO/HJOYͳͲͷQSPYZTFSWFSͷཪͰಈ͔͢͜ͱΛਪ͍ͯ͠Δ ͷͰɺ/HJOY(VOJDPSO6WJDPSOͱ͍͏ߏ͕ຊ൪ڥͱͯ͠Αͦ͞͏
ͻΉΒ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ Α͖1ZUIPOϥΠϑΛʂ 2025.5.31 34