運用、追加開発しづらいPHPアプリケーションに未来を与える方法

5b49296bfab71be8f7c21ef68a56fae6?s=47 ara_ta3
October 08, 2017

 運用、追加開発しづらいPHPアプリケーションに未来を与える方法

PHPカンファレンス2017でお話したスライドです。

動画: https://youtu.be/13YpGav4DBw?t=4h41m8s

5b49296bfab71be8f7c21ef68a56fae6?s=128

ara_ta3

October 08, 2017
Tweet

Transcript

  1. ӡ༻ɺ௥Ճ։ൃͮ͠Β ͍PHPΞϓϦέʔγϣ ϯʹະདྷΛ༩͑Δํ๏ VOYAGE GROUP ాத վ (ara_ta3) PHP ΧϯϑΝϨϯε

    2017 #phpcon2017_3
  2. ࣗݾ঺հ • VOYAGE GROUP ৽ଔ4೥໨ • fluct(޿ࠂ) -> Zucks(޿ࠂ) ->

    HR Tech Studio(ਓࡐ) • ओʹαϙʔλʔζ։ൃ • Twitter(@ara_ta3) • ޷͖ͳݴޠ • Scala, Go, PHP7.x • Splatoon2 ΢σϚΤ S+0
  3. VOYAGE GROUP

  4. VOYAGE GROUP

  5. None
  6. None
  7. • ӡ༻ɺ௥Ճ։ൃͮ͠Β͍ΞϓϦέʔγϣϯ ΛͲ͏վળ͍͔ͯ͘͠ • ୈҰา໨ΛͲ͏΍ͬͯ౿Έग़ͯ͠ະདྷʹ޲ ͔͏͔ ࠓ೔఻͍͑ͨ͜ͱ

  8. Agenda • ӡ༻ɺ௥Ճ։ൃͮ͠Β͍ͱ͸ʁ • αϙʔλʔζͷ౰࣌ͷ؀ڥ͸ʁ • ӡ༻ɺ௥Ճ։ൃ͠΍͍͢؀ڥʹ͍ͯ͘͠ • ΞϓϦέʔγϣϯϞχλϦϯάͷ௥Ճ •

    ςετΛ௥Ճͭͭ͠ػೳ΋௥Ճ • ·ͱΊ
  9. ӡ༻ɺ௥Ճ։ൃͮ͠Β͍ʁ

  10. ӡ༻ɺ௥Ճ։ൃ͠΍͍͢ʁ

  11. ӡ༻ɺ௥Ճ։ൃ͠΍͍͢ʁ • ผνʔϜ͔Βͷҟಈલ͸͠΍͔ͬͨ͢ • ͳͷͰɺผνʔϜͱൺֱͯ͠ߟ͑ͯΈ·ͨ͠

  12. ͠΍͍͢ ςετίʔυ͕͋Δ σϓϩΠલʹΤϥʔʹ ؾ͕͚ͭΔ ΞϓϦέʔγϣϯ ϞχλϦϯά͕͋Δ σϓϩΠޙʹΤϥʔʹ ؾ͕͚ͭΔ σϓϩΠ͕༰қ $*αʔόɾίϚϯυ

    σϓϩΠޙʹԿ͔͕͋ͬͯ΋ ͙͢ʹ໭ͤΔ
  13. ͮ͠Β͍ ςετίʔυ͕ͳ͍ σϓϩΠલʹΤϥʔʹ ؾ͕͚ͭΔ ΞϓϦέʔγϣϯ ϞχλϦϯά͕ͳ͍ σϓϩΠޙʹΤϥʔʹ ؾ͕͚ͭΔ σϓϩΠ͕ෳࡶ σϓϩΠޙʹԿ͔͕͋ͬͯ΋

    ͙͢ʹ໭ͤΔ
  14. αϙʔλʔζվળલ͸ ςετίʔυ͕ͳ͍ σϓϩΠલʹΤϥʔʹ ؾ͕͚ͭΔ ΞϓϦέʔγϣϯ ϞχλϦϯά͕ͳ͍ σϓϩΠޙʹΤϥʔʹ ؾ͕͚ͭΔ σϓϩΠ͕༰қʁ σϓϩΠޙʹԿ͔͕͋ͬͯ΋

    ͙͢ʹ໭ͤΔ
  15. Agenda • ӡ༻ɺ௥Ճ։ൃͮ͠Β͍ͱ͸ʁ • αϙʔλʔζͷ౰࣌ͷ؀ڥ͸ʁ • ӡ༻ɺ௥Ճ։ൃ͠΍͍͢؀ڥʹ͍ͯ͘͠ • ΞϓϦέʔγϣϯϞχλϦϯάͷ௥Ճ •

    ςετΛ௥Ճͭͭ͠ػೳ΋௥Ճ • ·ͱΊ
  16. • New Relic APM • PHP 5.3Ҏ্αϙʔτ

  17. ΤϯυϙΠϯτຖʹ͔͔Δ͕࣌ؒΘ͔Δ

  18. Ͳͷॲཧ͕ͲΕ͘Β͍͔͔͍ͬͯΔ͔͕Θ͔Δ

  19. None
  20. None
  21. ΍ͬͯΑ͔ͬͨ͜ͱ

  22. ΤϥʔΊͬͪΌग़ͯͨ

  23. None
  24. Error Rate 30% ※ ΄ͱΜͲ͕404

  25. None
  26. ΊͬͪΌ஗͍ ΤϯυϙΠϯτ͋ͬͨ

  27. None
  28. 761 sec ≒ 13 min

  29. Ͳͷॲཧ͕ͲΕ͘Β͍͔͔͍ͬͯΔ͔͕Θ͔Δ

  30. ΍ͬͯΑ͔ͬͨ͜ͱ • Τϥʔ͕ͨ͘͞Μग़ͯͨ • ࣮͸΄ͱΜͲ͕404ͰΑ͔ͬͨ • ΋ͷ͍͕͔͔࣌ؒͬͯ͢͝Δ৔ॴ͕Θ͔ͬͨ • Կ΋Θ͔Βͳ͍ঢ়ଶ͔Βɺྑ͘ͳ͍͜ͱ͕Θ ͔Δͱ͜Ζ·ͰਐΜͩ

  31. αϙʔλʔζվળલ ςετίʔυ͕ͳ͍ σϓϩΠલʹΤϥʔʹ ؾ͕͚ͭΔ ΞϓϦέʔγϣϯ ϞχλϦϯά͕ͳ͍ σϓϩΠޙʹΤϥʔʹ ؾ͕͚ͭΔ σϓϩΠ͕༰қʁ σϓϩΠޙʹԿ͔͕͋ͬͯ΋

    ͙͢ʹ໭ͤΔ
  32. αϙʔλʔζվળޙ ςετίʔυ͕ͳ͍ σϓϩΠલʹΤϥʔʹ ؾ͕͚ͭΔ ΞϓϦέʔγϣϯ ϞχλϦϯά͕͋Δ σϓϩΠޙʹΤϥʔʹ ؾ͕͚ͭΔ σϓϩΠ͕༰қʁ σϓϩΠޙʹԿ͔͕͋ͬͯ΋

    ͙͢ʹ໭ͤΔ
  33. None
  34. Agenda • ӡ༻ɺ௥Ճ։ൃͮ͠Β͍ͱ͸ʁ • αϙʔλʔζͷ౰࣌ͷ؀ڥ͸ʁ • ӡ༻ɺ௥Ճ։ൃ͠΍͍͢؀ڥʹ͍ͯ͘͠ • ΞϓϦέʔγϣϯϞχλϦϯάͷ௥Ճ •

    ςετΛ௥Ճͭͭ͠ػೳ΋௥Ճ • ·ͱΊ
  35. ػೳ௥Ճલͷঢ়ଶ • PHP5.x • CakePHP 2.x • Controller: 40 class

    • ଟ͍΋ͷͰ1300ߦ • Model: 88 class ELB CakePHP
  36. 1ΞΫγϣϯߦ਺ɿ140

  37. 1 2 3 4 5 6 7 8 8ॏωετ

  38. None
  39. ݫ͍͠

  40. ํ਑ • طଘͷΞϓϦέʔγϣϯ͸ۃྗ৮Βͳ͍ • ผΞϓϦέʔγϣϯΛ্ཱͪ͛Δ • ͋Δύεʹདྷͨͱ͖͚ͩผΞϓϦέʔγϣ ϯʹϦΫΤετΛඈ͹͢

  41. ELB CakePHP ALB CakePHP Slim ALB

  42. ػೳ௥Ճޙͷঢ়ଶ • PHP7.1 • Slim 3.x • ALB • Application

    Load Balancer ALB CakePHP Slim ALB
  43. ALB • AWS Application Load Balancer • http://docs.aws.amazon.com/ja_jp/ elasticloadbalancing/latest/application/ introduction.html

    • ͋Δύεɺ·ͨ͸ϗετ໊ΛݩʹϦΫΤετ ΛϧʔςΟϯάग़དྷΔػೳ
  44. ALB

  45. ALB

  46. ALB • / • ʹΞΫηε ALB CakePHP Slim

  47. ALB • /v1/code_challenge • ʹΞΫηε • ͕࣌ؒ͋Ε͹DEMO ALB CakePHP Slim

  48. ࠔͬͨ͜ͱ • Sessionͷ؅ཧ • CakePHP಺ͰSessionComponentΛར༻ • DBͷTableʹॻ͖ࠐΜͰ͍Δ • 2ͭͷSession༻ςʔϒϧʹॻ͖ࠐΉ͜ͱʹͨ͠

  49. • /login • cake_sessionʹॻ͖ࠐΉ • slim_sessionʹॻ͖ࠐΉ ࠔͬͨ͜ͱ CakePHP Slim

  50. ࠔͬͨ͜ͱ • / ʹΞΫηε • cake_session͔Β SessionΛऔಘ ALB CakePHP Slim

  51. ࠔͬͨ͜ͱ • /v1/~ ʹΞΫηε • slim_session͔ΒSession Λऔಘ ALB CakePHP Slim

  52. ݁࿦ • ALBΛར༻ͯ͠ػೳ௥Ճ͠΍͍͢؀ڥΛೖΕͨ • ςετ΋ΞϓϦέʔγϣϯϞχλϦϯά΋͋Δ • SessionपΓͰࠔͬͨ • ϩάΠϯ࣌ʹ2ͭͷSession༻ςʔϒϧʹॻ͖ࠐ Μͩ

  53. ࣍ͷҰख: Ҡߦ • ͜͜·Ͱ͸୯ͳΔ৽نػೳ • ͡Ό͋طଘػೳͷҠߦ͸Ͳ͏΍Δͷ͔

  54. ࣍ͷҰख: Ҡߦ • 1. SlimͷΞϓϦέʔγϣϯʹطଘػೳΛ௥Ճ • ςετॻ͖ͳ͕Βطଘػೳͷ࠶࣮૷ • 2. ALBઃఆͰͦͷύε͚ͩΛSlimʹ޲͚ΔΑ

    ͏ʹ͢Δ
  55. ࣍ͷҰख: Ҡߦ • ྫ) /events ͷҠߦ • 1. /events ͷΤϯυϙΠϯτΛSlimͷΞϓϦέʔ

    γϣϯʹ࡞Δ • 2. ALBͰ/events ΛSlimΞϓϦέʔγϣϯʹ޲͚Δ • Կ͔͋ͬͨΒALBઃఆΛ໭ͤ͹ྑ͍
  56. None
  57. αϙʔλʔζվળલ ςετίʔυ͕ͳ͍ σϓϩΠલʹΤϥʔʹ ؾ͕͚ͭΔ ΞϓϦέʔγϣϯ ϞχλϦϯά͕͋Δ σϓϩΠޙʹΤϥʔʹ ؾ͕͚ͭΔ σϓϩΠ͕༰қʁ σϓϩΠޙʹԿ͔͕͋ͬͯ΋

    ͙͢ʹ໭ͤΔ
  58. αϙʔλʔζվળޙ ςετίʔυ͕͋Δ σϓϩΠલʹΤϥʔʹ ؾ͕͚ͭΔ ΞϓϦέʔγϣϯ ϞχλϦϯά͕͋Δ σϓϩΠޙʹΤϥʔʹ ؾ͕͚ͭΔ σϓϩΠ͕༰қʁ σϓϩΠޙʹԿ͔͕͋ͬͯ΋

    ͙͢ʹ໭ͤΔ
  59. Agenda • ӡ༻ɺ௥Ճ։ൃͮ͠Β͍ͱ͸ʁ • αϙʔλʔζͷ౰࣌ͷ؀ڥ͸ʁ • ӡ༻ɺ௥Ճ։ൃ͠΍͍͢؀ڥʹ͍ͯ͘͠ • ΞϓϦέʔγϣϯϞχλϦϯάͷ௥Ճ •

    ςετΛ௥Ճͭͭ͠ػೳ΋௥Ճ • ·ͱΊ
  60. • ӡ༻ɺ௥Ճ։ൃͮ͠Β͍ΞϓϦέʔγϣϯ ΛͲ͏վળ͍͔ͯ͘͠ • ୈҰา໨ΛͲ͏΍ͬͯ౿Έग़ͯ͠ະདྷʹ޲ ͔͏͔ ࠓ೔఻͍͑ͨ͜ͱ

  61. ·ͱΊ • ӡ༻ɺ௥Ճ։ൃͮ͠Β͍ΞϓϦέʔ γϣϯΛ͠΍ͨ͘͢͠ • σϓϩΠલޙͰΤϥʔʹؾ͕͚ͭΔ Α͏ʹͳͬͨ • طଘͷ৮ΓͮΒ͍෦෼Λ৮ΒͣʹҠ ߦ͢ΔՄೳੑ͕ݟ͑ͨ