PHPerが ISUCONでやるべき事
by
uzulla
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
PHPer͕ ISUCONͰΔ͖ࣄ » at: PHPer Tea Night 2023/11/13 » speaker: uzulla » (ҰԠ)PHPͰຊઓग़ܦݧऀ » TSɺGoͰͷग़ܦݧ͍ͯ͠·͢ » ͳ͓ɺࠓGoͰग़·͢ʂʂʂʂ » (ۙʹPHPerͷISUCONer͕͍ͳ͍)
Slide 2
Slide 2 text
ϙΠϯτ »8ׂஈऔΓͰܾ·Δ ͬͨ͜ͱ͕ͳ͍͜ͱͰ͖ͳ͍ »തଧͨΒͳ͍ »νʔϜϫʔΫ »ޮՌతͳՕॴ ΄ͱΜͲ PHPؔͳ͍ »ސ٬͕ʮϕϯνϚʔΧʔʯ
Slide 3
Slide 3 text
ஈऔΓീׂ »యܕతͳύϥϝʔλʔνϡʔχϯά༻ҙ͓ͯ͘͠ » ϛυϧΣΞɺΧʔωϧͷνϡʔχϯά » ISUCONҎ֎ͰΘͳ͍Α͏ͳΩϨͨઃఆ » ulimit, write cache, memoryपΓ » πʔϧΠϯετʔϧɺϝϯόʔͷssh伴 alp, pt-query-digest, xhprof(or xdebug), dstat »άάΓͳ͕Β࣌ؒͷແବ(࿅शͰͳ͍)
Slide 4
Slide 4 text
ૉৼΓ »ͬͨ͜ͱ͕ͳ͍͜ͱͰ͖ͳ͍ɺ࠷ͰΧϯϖ »N+1ͷղফɺීஈ͔Βͬͯ·͔͢ʁ Ωϟογϡʁ »APCuͱ͔ͷΠϯετʔϧར༻ɺීஈ͔Βͬͯ·͔͢ʁ »RewriteCache controlΛීஈ͔Βॻ͍ͯ·͔͢ʁ »EXPLAINͷಡΈํALTERΛ(େମ)͓΅͑ͯ·͔͢ʁ »ෳσϓϩΠͷࣗಈԽɺDBͷଓํ๏ͳͲ
Slide 5
Slide 5 text
തଧͨΒͳ͍ »ʮIndexΛுΕউͯΔʂʯʮΩϟογϡ͢ΕউͯΔʂʯ (ͱ͍͏࣌͋Γ·ͨ͠ɺࠓඞਢՊ) »ܭଌ͠ɺͬΆ͍ՕॴΛͪΌΜͱݟ͚ͭͯɺṌ͚ΔॴΛܾΊΔ »উͪͷ͋ΔॴʹBet͠ɺ༗ݶ࣌ؒʹ͖͠ΕΔ͔͕ISUCON »ͯ͠ಘ্͕Βͳ͍͜ͱଟ͍ʮٸॴΛಡΈղ͘ʯͷ͕͍͠
Slide 6
Slide 6 text
ޮՌతͳՕॴݴޠͱ͕ؔͳ͍ »৭ʑͳ࣮ྫrepoΛݟΔͱɺΞϓϦͷίʔυมߋશମͷˋҐ »N+1ղফͱ͔ɺదͳΩϟογϡઃܭϛυϧΣΞνϡʔϯ͕ॏཁ »΄΅ݴޠͷػೳͱؔͳ͍Օॴ͕ಘͷ8ׂΛ͖ͨͨग़͢ »N+1ͳͲΛ௵͢ఔͷPHPࣝඞཁ »PHPͷษڧ͢ΔΑΓɺSQLɺHTTPDɺKVSͷษڧͨ͠ํ͕ྑ͍ »(ͱ͍͑ɺPHPJSONͱ͔γϦΞϥΠζૣ͍͕ɺ ReqຖʹίωΫγϣϯுΓ͠ɺγϯάϧτϯ͕ແ͍͋Δ)
Slide 7
Slide 7 text
νʔϜϫʔΫ »աڈ͠ΒͨΒ…ʮಉ྅νʔϜʯͷউߴ͍ʂʂ »ಘҙΛ૬ޓʹཧղ͍ͯ͠Δͱ ୲ΛܾΊΔɺതଧΛଧͭͷʹ໎Θͳ͍ͷ͔ »ଉ͕͍͋ͬͯΔͱɺίϯϑϦΫτͨ͠ͱ͖ͷղফ͕͍ »য૩ײ͔Βίϛϡχέʔγϣϯ৺ཧత҆શੑͷܽ ϋΠίϯςΩετͳίϛϡχέʔγϣϯ(ແݴूதʁࠔʁ)
Slide 8
Slide 8 text
ʮϢʔβʔʯϕϯνϚʔΧʔ »PASS͢Εྑ͍ FAIL͢Δͱ0 »ʮ͜Εɺී௨ڐ͞ΕΔͩΖʯ ʮ͜Εɺී௨͋Γ͑ͳ͍ͩΖʯ=> ߟ͑ͳ͍Α͏ʹ »FAIL͠ͳ͍Α͏ʹमਖ਼͢Δ is ͍͠ॴ »શ෦͕͍ඞཁͳ͍ɺಘͷՕॴ͕͋Δ(໌ه͞Ε͍ͯΔࣄ͕ଟ͍) ͦΕҎ֎վળ͞Εͳ͍ͱɺෛՙ(=ಘ)͕͕͋Βͳ͍͜ͱ͋Δ »࠷ॳʹ͔ͬ͠ΓϧʔϧϒοΫΛݟ·͠ΐ͏
Slide 9
Slide 9 text
·ͱΊ »ࠓ͙͢ɺશһͰ࿅शΛ͢Δɻ࣮ʮૉৼΓ͢Β͍͠ʯࣄ »ʮ୭Βͳ͍ຐ๏ʯ΄΅ͳ͍ɺେମৗࣝͷൣᙝ »্ҐΛૂ͏ͳΒɺ࠷ݶʮ͑ʯΛΈͳ͕Βɺ લ༏উऀείΞ͑ΒΕΔΑ͏ʹ͠Α͏ »ϓϩҎ֎ɺϓϩϑΝΠϥ(PHPɺDBɺaccess log…)͕ඞਢ »͜·ΊʹσϓϩΠˍϕϯν͕٢ɺյΕΔͱ͢ͷେม »࠶ىಈࢼݧͱɺෳߏઃఆૣΊʹΔ
Slide 10
Slide 10 text
͓·͚
Slide 11
Slide 11 text
Կ͕ʮॏ͍ʯͷ͔ʁ »ܭࢉɾregex »ϑΝΠϧͷΦʔϓϯɾΫϩʔζ »γϦΞϥΠζɾσγϦΞϥΠζɾύʔε(jsonؚ) »ผαʔόͱͷଓɾ௨৴ɾసૹ »Fork(ผϓϩηεͷىಈ) »ഉଞతॲཧ »ݕࡧ(B-treeΛআ͘)ɺσʔλΛFilterɺScan͢ΔΑ͏ͳ͜ͱ
Slide 12
Slide 12 text
ͷͰ… »ઃఆΛίʔυ(Ωϟογϡ͞ΕΔ)ڥมʹ͢Δ(ྫ dotenv͍) »௨৴ͤ͞ͳ͍(Cache ControlɺhttpdͰฦ͢) »ܭࢉ݁Ռ(αϚϦ)ΛΩϟογϡ͢Δ »B-treeΛ͏(ϧʔϓͰ୳ࡧ͠ͳ͍ɺindexΛ͔ͭ͏) »RedisΑΓAPCuͳͲΛ͔ͭ͏(γϦΞϥΠζ͕ͳ͍) » (fcgi+redis+pconnectͱ͔͋Δ͕) »ϩοΫ͕ෆཁͳΑ͏ʹϩδοΫʹॻ͖͑Δ
Slide 13
Slide 13 text
యܕతͳଧͪख »Ұਓ͕ڥߏங(λϨɺσϓϩΠɺgit)ͱϓϩϑΝΠϧΛऔΔ ଞೋਓ͕ϧʔϧϒοΫͱίʔυΛಡΈɺѲ͢Δ »ͱΓ͋͑ͣṌ͚ΒΕͦ͏ͳՕॴΛ͖ΊɺṌ͚ΔॴΛܾΊΔ »ʮ؆୯ʹͤΔʯॴॳख͢ʮ؆୯ʹͤͦ͏ʯޙͰͤΔ »վળτϥΠɺ݁ՌͱͬͯޮՌΛ֬ೝ͢Δ »গ͢͢͠ΊͨΒཱͪࢭ·ΓɺṌ͚ΔॴΛௐ͢Δ ʮͦ͠͏ͳॴʯΛආ͚ͯେείΞ্͕Βͳ͍ɺ͕ΜΕ
Slide 14
Slide 14 text
PHPͷڧΈ »࣮1req͋ͨΓͷॲཧ͍ɺjsonɺregex͕͍ »֤छσʔλΛ͜ͶΔͷָ(ྻ࠷ߴʂʂʂ) »ඇৗʹϓϩϑΝΠϦϯά͕͍͢͠ »σόοάίʔυΛಥͬࠐΈ͍͢(ҰॠσόοάίʔυೖΕΔͱ͔) »ૉͳOOPͳͷͰɺ࣮ίʔυ͕ಡΈ͍͢ (͕ɺٯʹॳظ࣮νϡʔϯ͢Δ༨͕ଟ͗͢Δ͔)
Slide 15
Slide 15 text
PHPͷऑΈ »σϓϩΠࣗಈԽ͕एׯෳࡶ »PHPerීஈνϡʔχϯάͤͣɺDB͕FWͤͳࣄ͕ଟ͍ »(উͭͳΒ)Ωϟογϡ࣮͕໘ɾऑ͍ »(উͭͳΒ)γϯάϧτϯ͕ͳ͍ » DBͷଓΛڞ༗Ͱ͖ͳ͍ ϩΨʔςϯϓϨʔτͳͲͷॳظԽ͕ຖճΔ »php.inihttpdͳͲͰνϡʔχϯάඞਢՕॴ͕ଞݴޠΑΓଟ͍
Slide 16
Slide 16 text
νϡʔϯϨϕϧ »֤छϓϩϑΝΠϦϯά(εϩʔΫΤϦɺॏ͍End pointͷಛఆ) »php.ini(Opcache)ͷௐɺdump-autoload --optimize »DB indexͷՃɺWhereͷௐ(ͱʹ͔͘indexޮ͔ͤΔ) »ϛυϧΣΞɺOSͷయܕύϥϝʔλνϡʔϯ(ൿͷλϨ) »Cache Controlɺgzip༗ޮԽͳͲ(࣮ޮՌݟΔࣄʂ) »3ߏͳͲͷόϥϯεɺϫʔΧʔͳͲͷνϡʔϯ »֎෦ίϚϯυىಈΛPHPωΠςΟϒʹ
Slide 17
Slide 17 text
νϡʔϯϨϕϧத »ΫΤϦΛݟͯN+1ղফɺLIMIT OFFSETͷվળ »σʔλͷඇਖ਼نԽ »redisAPCuͳͲͰαϚϦσʔλΩϟογϡ »Pure PHP࣮ΛC֦ுͳͲʹมߋ(ྫ:markdownɺredis driver) »Մೳͳ͔͗ΓUnixDomainSocketͷར༻ »DBߏͷվֵɺSQLͷશॻ͖͑
Slide 18
Slide 18 text
νϡʔϯϨϕϧߴ »ϓϦϩʔυϓϦΩϟογϡɺ(σʔλ)ϓϦϓϩηε »ϫʔΧʔʹΑΔαϚϦੜɺTTLΛߟྀͨ͠ظؒΩϟογϡ »σʔλετΞͷมߋ(Redisࡌͤସ͑) »Ҿͱ͔ͷܕఆٛΛશ෦ফ͢ɺΫϥεΛࣺͯͯྻԽ »ΞϧΰϦζϜͷվળɾ׆༻ʹΑΔॲཧͷࢬΓ »httpd(or Vanish,etc)ɺPHPΑΓલͰॲཧͰ͖Δ͜ͱΛ͢Δ
Slide 19
Slide 19 text
νϡʔϯϨϕϧതଧ »fastcgi_finish_requestͳͲͷීஈΘͳ͍ॲཧ »mod_phpphp-fpmΛࣺͯΔ »mysqlͳͲͰPersistentଓ༗ޮԽ »ʮϕϯνͷൈ͚݀Λ୳͢ʯ »PHPΛࣺͯΔ
Slide 20
Slide 20 text
ͱ͜ΖͰɺChatGPT()ཱ͔ͭʁ »ӕΛӕͱݟൈ͚ΔͳΒɺͱͯग़ͭ ӕʹϋϝΒΕΔ͜ͱ͕·Εʹ͋Δ »ChatGPTͷίʔυΛಈ͘ίʔυʹͤΔఔʹ͕ࣝ͋ΔͳΒ༗༻ »ʮ͜ͷใ͕΄͍͠ʯͱݴ͏ͱ͖άάͬͯ୳͢ΑΓૣ͍߹ଟ͍ »ʮλϨʯͷੜʹ͋·Γཱͨͳ͍ؾ͕͢Δ (ISUCONͰΘΕΔઃఆۃա͗ΔͷͰɺҰൠతͰͳ͍) »ීஈ͔Β͍ͬͯͳ͍ͳΒɺͦ͜·Ͱ͓קΊ͠·ͤΜ
Slide 21
Slide 21 text
ͦͷଞॳ৺ऀ͚Ϧιʔε »ʮISUCON λϨʯʮISUCON ༏উ͠·ͨ͠ʯͰάάΕɻ ͨͩ͠ɺಡΉ͚ͩͰͳ͘ɺૉৼΓ͠ɺλϨͬͯΈΔ͜ͱ »GitHubΛISUCONͰݕࡧͯ͠ΈΑ͏ »https://speakerdeck.com/soudai/web-tuningperformance (soudai) »https://speakerdeck.com/seike460/introduction-to- measurement-to-know-the-application (seike460) »https://slideshare.net/techblogyahoo/mysql-58540246