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
himura467
June 01, 2025
Technology
0
70
Python アプリケーションの裏側とその機序 -WSGI, ASGI 編-
himura467
June 01, 2025
Tweet
Share
More Decks by himura467
See All by himura467
Bun もすなる Zig といふものをしてみむとてするなり
himura
0
1
人生における期待効用の最大化について考える
himura
0
92
CA_kube-scheduler
himura
0
10
Improving Language Understanding by Generative Pre-Training
himura
0
76
Other Decks in Technology
See All in Technology
Observability — Extending Into Incident Response
nari_ex
1
270
AI-Readyを目指した非構造化データのメダリオンアーキテクチャ
r_miura
1
310
HonoとJSXを使って管理画面をサクッと型安全に作ろう
diggymo
0
180
知覚とデザイン
rinchoku
1
570
SRE × マネジメントレイヤーが挑戦した組織・会社のオブザーバビリティ改革 ― ビジネス価値と信頼性を両立するリアルな挑戦
coconala_engineer
0
220
SCONE - 動画配信の帯域を最適化する新プロトコル
kazuho
1
370
MCP ✖️ Apps SDKを触ってみた
hisuzuya
0
360
AI時代におけるデータの重要性 ~データマネジメントの第一歩~
ryoichi_ota
0
710
Behind Postgres 18: The People, the Code, & the Invisible Work | Claire Giordano | PGConfEU 2025
clairegiordano
0
130
AIとともに歩んでいくデザイナーの役割の変化
lycorptech_jp
PRO
0
870
オブザーバビリティと育てた ID管理・認証認可基盤の歩み / The Journey of an ID Management, Authentication, and Authorization Platform Nurtured with Observability
kaminashi
1
650
「タコピーの原罪」から学ぶ間違った”支援” / the bad support of Takopii
piyonakajima
0
140
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Balancing Empowerment & Direction
lara
5
700
Side Projects
sachag
455
43k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
What's in a price? How to price your products and services
michaelherold
246
12k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
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