$30 off During Our Annual Pro Sale. View Details »

ISUCON8で予選落ちしたので、Swoole(easyswoole)で書き換えて、感想戦でベンチ走らせてみた話

 ISUCON8で予選落ちしたので、Swoole(easyswoole)で書き換えて、感想戦でベンチ走らせてみた話

PHP Conference 2018 LTの発表資料
今年も開催されたISUCON(いいかんじスピードアップコンテスト)へPHPで参加しましたが、
予選落ちして悔しかったので、uzullaさんのPHPerKaigi2018「大統一PHP」(https://speakerdeck.com/uzulla/da-tong-php)で紹介していたSwooleを用いて、ベンチマークを走らせた話です
ISUCONのPHPのソースはSlim3です。Slim3のソースをSwooleを用いたフレームワークの一つ、easyswooleに
書き変えるにあたり、様々な考慮が必要でした。そのノウハウをお伝えします。
そして、最終的なベンチマークの結果は如何に!

CyberAgent SGE Engineer

December 15, 2018
Tweet

More Decks by CyberAgent SGE Engineer

Other Decks in Technology

Transcript

  1. *46$0/Ͱ༧બམͪͨ͠ͷͰɺ 4XPPMFʢFBTZTXPPMFʣͰॻ͖׵ ͑ͯɺײ૝ઓͰϕϯν૸ΒͤͯΈͨ࿩ גࣜձࣾαΠόʔΤʔδΣϯτɹനҪɹӳ  QIQDPOQIQDPO

  2. • גࣜձࣾαΠόʔΤʔδΣϯτ • 4(&౷ׅຊ෦ٕज़౷ׅࣨࣨ௕ • ࢠձࣾࣾ$50 • גࣜձࣾ$SBGU&HH • גࣜձࣾδʔΫϨετ

    • גࣜձࣾαϜβοϓ • നҪɹӳ • ΤϯδχΞ • #MPH IUUQBNFCMPKQHPPEPP ͓લɺ୭Α • 5XJUUFS !HPPEPP • %2 ͙ͪ͢Ή '#  ϓΫϦϙ ཱྀܳਓ
  3. "HFOEB w*46$0/ͱ͸ w4XPPMFͱ͸ wFBTZTXPPMFͱ͸ w4MJNFBTZTXPPMF wϕϯνϚʔΫͷ݁Ռ͸೗Կʹʂ

  4. *46$0/ͱ͸

  5. ͓୊ͱͳΔ8FCαʔϏεΛܾΊΒΕͨϨΪϡ ϨʔγϣϯͷதͰݶք·Ͱߴ଎ԽΛਤΔνϡʔ χϯάότϧɺͦΕ͕*46$0/Ͱ͢ɻաڈͷ ࣮੷΋ॴଐ͍ͯ͠Δձࣾ΋શؔ͘܎ͳ͍ɺ݁Ռ ͕શͯͷΨνϯίότϧͰ͢ ˞ެࣜαΠτ͔ΒͷҾ༻ɿIUUQJTVDPOOFUBSDIJWFTIUNM ೥͸ୈ̔ճ໨

  6. ࠓ೥ͷ༧બ݁ՌҰཡ

  7. None
  8. λΠτϧʹ༧બམͪͬͯ ॻ͍ͯ͋Δͷʹʂʁ

  9. ʢυϥΫΤͷϓϨΠϠʔ໊Λି͠·ͨ͠ʣ ˞ࢲͷνʔϜ͸༧બམͪͰͨ͠ɾɾɾ ಉ྅ͷνʔϜͰͨ͠

  10. ٢ใ ˞༧બऴྃ೔͔Β໿̍िؒ

  11. Ϧϕϯδ

  12. 4XPPMFʹνϟϨϯδ͠Α͏

  13. 4XPPMFͱ͸

  14. 1)1ͰΠϕϯτۦಈͷඇಉظ ˍίϧʔνϯϕʔεͷฒߦॲཧ

  15. 1)1FS,JBHJͷV[VMMB͞ΜͷൃදͰ஌Γ·ͨ͠ https://speakerdeck.com/uzulla/da-tong-php

  16. FBTZXPPMFͱ͸

  17. (JUIVCΑΓ https://github.com/easy-swoole/easyswoole

  18. FBTZTXPPMF͸ɺ4XPPMF4FSWFS Λϕʔεͱͨ͠ৗறܕϝϞϦϕʔεͷ ෼ࢄ1)1ϑϨʔϜϫʔΫ https://speakerdeck.com/uzulla/zui-jin-meruhuomukaitenaimeruhuomaniyoru-tiyotutodakebian-watuta-ying- phpfalsemeruhuomu-falseohua-fu-ti-zui-jin-swoolegatafalsesiidesu V[VMMB͞Μ͕͜ͷ εϥΠυͰΊͬͪΌ ղઆͯ͘͠Εͯ·͢

  19. FBTZTXPPMF͸ 4XPPMFΛ͔͓ͭͬͨखܰͳ ϑϨʔϜϫʔΫʂ ҙ༁ʣ

  20. 1)1Ͱ΋ Πϕϯτۦಈͷඇಉظˍ ίϧʔνϯϕʔεͷฒߦ ॲཧΛ ͓खܰʹ࣮ݱʂ

  21. FBTZTXPPMFͰ *46$0/ Ϧϕϯδ ˞FBTZTXPPMFW͸Ͱ͍ͯ·͕͢ɺࠓճ͸WΛ༻͍ͨ࿩Ͱ͢

  22. 4MJN FBTZTXPPMF

  23. *46$0/ͷ1)1ͷ ॳظ࣮૷͸ 4MJNΛ࠾༻

  24. جຊϑΝΠϧʹ ͢΂ͯͷϩδοΫΛ ॻ͍͍ͯΔ *46$0/ॳظ࣮૷ͷ࢓༷

  25. FBTZTXPPMFͰ ॻ͖׵͑Δ࣌΋ ౿ऻ͠Α͏ʂ ͋ͱͰؒҧʹؾͮ͘ʣ

  26. FBTZTXPPMFͷϑΥϧμߏ੒ Project        ルートディレクトリ  ├ App         App Class │ └ HttpController  │   ├ Index.php 

    コントローラ │   └ Router.php カスタムルーティング ├ Config.php     設定 ├ EasySwooleEvent.php イベント └ easyswoole     easyswooleコマンド ˞FBTZTXPPMFWͷߏ੒
  27. ௨ৗͷίϯτϩʔϥʔͷϚοϐϯά • /{クラス名}/{メソッド名}みたいな形 例) • /api/users�-> \App\HttpController\Api::users() • /admin/api/actions/login 


    -> \App\HttpController\Admin\Api\Action::login() ˣ ̍ϑΝΠϧʹͰ͖ͳ͍ͷͰ 3PVUFSQIQΛ͔ͭ͏
  28. 3PVUFSQIQͷྫ FBTZTXPPMF 4MJNͩͱ

  29. ॻ͖׵͕͑୯७࡞ۀͰ ͍͚ͦ͏ʂ

  30. ͕ɺ໰୊ൃੜʂ ͦͷ̍ʣ

  31. 3PVUFSQIQ͸$POUSPMMFSΛܧঝͯ͠ ͍ͳ͍ͷͰ4FTTJPO͕ਖ਼͘͠ѻ͑ͳ͍ શһಉ͡ηογϣϯʹͳͬͪΌ͏

  32. ϑΝΠϧΛஅ೦ͯ͠ ඪ४ͷίϯτϩʔϥͷ ߏ੒Λ࢖͏͜ͱʹ   App           └ HttpController      ├ Admin     │ └

    Api     │  └ Events     │   └ Index.php     ├ Api     │ └ Events     │  └ Index.php     └ Index.php ͜Μͳײ͡
  33. ͕ɺ໰୊ൃੜʂ ͦͷʣ

  34. FBTZTXPPMFͰఏڙ͞Ε͍ͯΔTFTTJPO ΫϥεʹEFMFUFϝιου͕ͳ͍ ݩͷ*46$0/ͷ࣮૷ʹEFMFUF͕͋ͬͨ

  35. ͭͬͨ͘

  36. ͕ɺ໰୊ൃੜʂ ͦͷʣ

  37. %#ʹCFHJO͕ Ͱ͖ͳ͍ FBTZTXPPMFͰఏڙ͞Ε͍ͯΔ .Z42-ͷϥούʔʹτϥϯβΫ γϣϯ͕࣮૷͞Ε͍ͯͳ͍ʂ ( )

  38. ͭͬͨ͘

  39. ឯ༨ۂંΛܦͯ

  40. ͍ͭʹಈ͍ͨ

  41. ϕϯνϚʔΫͷ ݁Ռ͸೗Կʹʂ

  42. None
  43. None
  44. None
  45. ࢀߟ4MJN̏ͷॳظείΞ໿ 

  46. ॳظ࣮૷ͷϕϯν ͳΜͯ০ΓͰ͢ʂ Ғ͍ਓʹ͸ɺͦΕ͕ ղΒΜͷͰ͢Αʂ

  47.  ࠓճ͸ॳظ࣮૷ͷ4MJNΛ FBTZTXPPMFʹ ׬શҠ২ͯ͠ϕϯνΛ ྲྀͨ͠ͱ͜Ζ·Ͱʂ https://github.com/shirai-suguru/isucon8-easyswoole ؾʹͳΔํ͸ͪ͜ΒΛ

  48.  4XPPMFʹ࠷దͳॻ͖׵͑·Ͱ͸ Ͱ͖ͳ͔ͬͨ ͨͩ͠ɺࠓ೥ͷ*46$0/ͷ໰୊ͷ ੑ্࣭ɺඇಉظॲཧͰ༗རʹͳΔͱ ͜Ζ͸΄΅ͳ͍ɾɾɾ

  49. དྷ೥Ϧϕϯδ

  50. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠