Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python アプリケーションの裏側とその機序 -WSGI, ASGI 編-

Python アプリケーションの裏側とその機序 -WSGI, ASGI 編-

Avatar for himura467

himura467

June 01, 2025
Tweet

More Decks by himura467

Other Decks in Technology

Transcript

  1. 8FCͷ࢓૊Έ How web works 2025.5.31 5 8FCΞϓϦͷཪଆ 6 URL Web

    Server Browser HTTP HTML DB ੩తίϯςϯπΛ഑৴͢Δ৔߹ nginx apache
  2. 8FCͷ࢓૊Έ How web works 2025.5.31 5 8FCΞϓϦͷཪଆ 7 Web Server

    Browser HTTP HTML ಈతίϯςϯπΛ഑৴͢Δ৔߹ Application Server HTTP HTML DB WebSocket Frame WebSocket Frame
  3. $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
  4. ϓϩηεͷத਎ 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  ε λ ο Ϋ ϙΠ ϯ λɺ ϓ ϩ ά ϥϜ Χ ΢ ϯ λ ͳ ͲΧʔωϧͷ࣮ߦ৘ใΛอ࣋͢Δ ɾσʔλྖҬ ɹɾ੩తྖҬ ɹఆ਺΍άϩʔόϧม਺ ɹɾώʔϓྖҬ ɹ௨ৗͷม਺ͳͲ ɾελοΫྖҬ Ҿ਺΍ϩʔΧϧείʔϓͳͲͷҰ࣌σʔλ
  5. Ϛϧνϓϩηε Multi Process 2025.5.31 5 8FCαʔόͷཪଆ 15 Memory ਌Process Text

    Segment Data Segment ࢠProcess Data Segment ෳ਺ͷϓϩηεΛฒྻॲཧ͢Δ͜ͱ ࢠϓϩηεΛෳ਺্ཱͪ͛ͯฒྻʹಈ͔͢ σʔληάϝϯτͷΈίϐʔ͢Δ ίϐʔ ɾϓϩηεؒͷϝϞϦΛ௚઀ࢀরͰ͖ͳ͍
  6. ϚϧνεϨου Multi Thread 2025.5.31 5 8FCαʔόͷཪଆ 16 Memory ਌Process Text

    Segment Data Segment Thread ϓϩηε͔ΒεϨουΛੜ੒͢Δ ਌ϓϩηεͷྖҬ಺ʹεϨουΛෳ਺্ཱͪ͛ͯ ฒྻʹಈ͔͢ Stack Area Stack Area ίϐʔ ɾϝϞϦۭ͕֤ؒεϨουͷؒͰڞ༗Մೳ ɾϝϞϦۭؒͷ੾Γସ͕͑গͳ͍෼ɺϝϞϦফඅྔ΍ ɹίϯςΩετεΠονͷΦʔόʔϔου͕খ͍͞
  7. QSFGPSL prefork 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 18 Web Server BQBDIFͰσϑΥϧτͰ࠾༻ Ϛϧνϓϩηε

    ϦΫΤετͱϓϩηε͕ରͰରԠ ͭͷϓϩηε่͕յͯ͠΋ଞͷϓϩηε͸ແࣄ αʔό͸ৗʹز͔ͭͷΞΠυϧͳαʔόϓϩηεΛҡ͍࣋ͯͯ͠ɺ ͦΕΒ͸ೖ͖ͬͯͨϦΫΤετʹԠ౴Ͱ͖ΔΑ͏ʹ଴ػ͍ͯ͠Δ ͜ͷΑ͏ʹͯ͠ΫϥΠΞϯτ͸ɺϦΫΤετ͕Ԡ౴͞ΕΔલʹ৽͍͠ࢠϓϩηε͕ GPSL͞ΕΔͷΛ଴ͨͳͯ͘΋Α͍Α͏ʹͳ͍ͬͯΔʢQSFGPSLʣ
  8. XPSLFS worker 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 19 Web Server ϚϧνϓϩηεͱϚϧνεϨουͷϋΠϒϦουܕ ֤ࢠϓϩηε಺Ͱෳ਺ͷεϨου͕ฒྻ࣮ߦ

    ϦΫΤετͱεϨου͕ରͰରԠ αʔό͸ৗʹز͔ͭͷΞΠυϧͳαʔόεϨουͷϓʔϧΛৗʹҡ͍࣋ͯͯ͠ ͦΕΒ͸ೖͬͯ͘ΔϦΫΤετʹԠ͑ΒΕΔΑ͏ʹ଴ػ͍ͯ͠Δ ىಈॳظ࣌ͷϓϩηε૯਺͸StartServers σΟϨΫςΟϒͰઃఆ͞ΕΔ Քಇதʹαʔό͸શϓϩηεͷΞΠυϧεϨουͷ߹ܭ਺Λݟੵ΋Γ MinSpareThreads ͱ .BY4QBSF5ISFBET Ͱࢦఆ͞Εͨൣғͷதʹ ͜ͷ਺͕ऩ·ΔΑ͏ʹGPSLͨ͠ΓLJMMͨ͠Γͯ͠͏·͍͜ͱௐ੔͢Δ
  9. FWFOU event 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 21 Web Server OHJOYͰ࠾༻͞Ε͍ͯΔʢBQBDIFͰ΋3)&-͔ΒσϑΥϧτʹʣ ΫϥΠΞϯτ͔ΒͷϦΫΤετΛΠϕϯτͱͯ͠ѻ͍

    ͦΕΛτϦΨʔʹϓϩηε಺ͰϋϯυϦϯά͢Δ ΠϕϯτϧʔϓʹΑΔඇಉظͳΠϕϯτۦಈͱ*0ଟॏԽʹΑΔϦΫΤετͷฒߦॲཧ $L໰୊ʹରॲ ίϯςΩετεΠον͸ൃੜ͠ͳ͍ʢγϯάϧεϨουʣ γϯάϧεϨου͕ނʹϝϞϦϦʔΫΛىͨ͜͠৔߹ʹ શϦΫΤετ͕ר͖ఴ͑ʹͳͬͯ͠·͏ϦεΫͷ͜ͱΛݴ͍ͬͯΔ
  10. ͪͳΈʹ1ZUIPOͰ͸ʁ case Python: 2025.5.31 5 8FCαʔόͷΞʔΩςΫνϟ 22 GIL(Global Interpreter Lock)

    ෳ਺ͷεϨου͕ಉ࣌ʹϝϞϦʹΞΫηε͢Δ͜ͱ͕ͳ͍Α͏ʹɺෳ਺ͷεϨουͰ 1ZUIPOΠϯλʔϓϦλʔΛಉ࣌ʹ࣮ߦ͢Δ͜ͱΛ๷͙ͨΊͷ΋ͷ 1ZUIPOϓϩάϥϜ͸ෳ਺ͷεϨουΛ࡞੒Ͱ͖Δ΋ͷͷɺҰ౓ʹ࣮ࡍͷ1ZUIPO ίʔυΛ࣮ߦͰ͖Δͷ͸ͭͷεϨου͚ͩ ͨͩɺྲྀੴʹϚϧνίΞ$16Λ׆༻Ͱ͖ͳ͍ͷ͸·͍ͣͷͰ ࠷৽ͷ1ZUIPOͰ͸GSFFUISFBEJOHͱ͍͏ػೳʹΑͬͯ(*-Λ ΦϓγϣϯͰແޮԽͰ͖ΔΑ͏ʹͳ͍ͬͯΔʢ·ͩ৮Ε͍ͯͳ͍ʣ
  11. 1ZUIPO੡8FCϑϨʔϜϫʔΫҰཡ Web Application Framework ೝূػߏɺ03.ɺ944ɺ42-JͷରࡦػߏͳͲΛඪ४Ͱ౥ࡌ͍ͯ͠ΔॾʑίϛίϛศརϑϨʔϜϫʔΫ *OTUBHSBN 1JOUFSFTU 'JSFGPYͷ։ൃʹ༻͍ΒΕ͍ͯΔ 2025.5.31 Django

    5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 25 ඞཁ࠷খݶͷػೳͷΈΛඋ͑ͨίϯύΫτͳϑϨʔϜϫʔΫ ֶशίετ͕௿͍ Flask ͱΓ͋͑ͣ଎͘ɺόοΫΤϯυ։ൃʹ͓͍ͯ͸σϑΝΫτελϯμʔυײ͕͋Δ σϑΥϧτͰ"1*υΩϡϝϯτΛੜ੒ͯ͘͠ΕΔ FastAPI
  12. ͜Ε͸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
  13. ͜Ε͸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
  14. 6WJDPSOͱ͸ʁ What is Uvicorn? 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ 30 "4(*ͱ͍͏8FCඪ४ʹ४ڌͨ͠8FCαʔόͷ࣮૷ ɾ"4(*

    ඇಉظରԠͷ1ZUIPO੡8FCαʔόͱ8FCΞϓϦέʔγϣϯؒͷ ൚༻తͳΠϯλʔϑΣʔε 84(*ͷޙܧͱͯ͠࡞ΒΕͨ ୅දతͳ࣮૷ͱͯ͠Uvicorn, NGINX Unit, HypercornͳͲ͕͋Δ ɾ84(* 1ZUIPO੡8FCαʔόͱ8FCΞϓϦέʔγϣϯؒͷ ൚༻తͳΠϯλʔϑΣʔε ୅දతͳ࣮૷ͱͯ͠Gunicorn, uWSGIͳͲ͕͋Δ
  15. ϚϧνίΞΛ׆͔͢ߏ੒ Make use of Multiple CPU core 2025.5.31 5 1ZUIPOͰ8FCΞϓϦΛ࡞Δ

    33 ϚϧνίΞΛ׆͔ͯ͠ฒྻॲཧΛ༻͍ͯϦΫΤετΛࡹ͖͍ͨ৔߹͸ʁ (VOJDPSO ͸ϚϧνϓϩηεͰ΋͍͚ΔͷͰɺ(VOJDPSO ͷϫʔΧʔϓϩηεͱͯ͠ 6WJDPSOΛ༻͍Δߏ੒͕Αͦ͞͏ʢ'BTU"1*͕ਪ঑͍ͯ͠Δʣ ͪͳΈʹ(VOJDPSO͸/HJOYͳͲͷQSPYZTFSWFSͷཪͰಈ͔͢͜ͱΛਪ঑͍ͯ͠Δ ͷͰɺ/HJOY(VOJDPSO6WJDPSOͱ͍͏ߏ੒͕ຊ൪؀ڥͱͯ͠͸Αͦ͞͏