Webシステムのパフォーマンス・チューニング

F184d9a69a53293895f36730ca0b8289?s=47 karupanerura
December 14, 2019

 Webシステムのパフォーマンス・チューニング

F184d9a69a53293895f36730ca0b8289?s=128

karupanerura

December 14, 2019
Tweet

Transcript

  1. WebγεςϜͷ ύϑΥʔϚϯε νϡʔχϯά id:karupanerura (DeNA, Co,. LTD.) CAMPHOR x DeNA

  2. None
  3. ಥવͰ͕࣭͢໰Ͱ͢

  4. ଎͍ΞϓϦέʔγϣϯ͸ ޷͖Ͱ͔͢ʁ

  5. id:karupanerura • DeNA, Co,. LTD. ΤϯδχΞ • Japan Perl Association

    ୅දཧࣄ • ISUCON8༧બग़୊ • Perl/Go/Java/etc..
  6. WebγεςϜͷ ύϑΥʔϚϯεɾνϡʔχϯά ʹ͍ͭͯ࿩͠·͢ ※ࢲݟ͕ͦΕͳΓʹೖ͍ͬͯΔͷͰྃ͝ঝ͍ͩ͘͞

  7. ࠓ೔࿩͢͜ͱ • ύϑΥʔϚϯεɾνϡʔχϯά • ໾ׂͱجຊతͳऔΓ૊Έํ • ܭଌʹ͓͚Δ۩ମతͳ໰୊ͱͦͷղܾࡦ • νϡʔχϯάͷ࣮ԋ •

    ISUCON͸͍͍ͧ
  8. ࠓ೔࿩͞ͳ͍͜ͱ • ݸʑݸผͷπʔϧ΍ख๏ͷৄղ • ISUCONͷউͪํ

  9. WebγεςϜʁ

  10. WebΞϓϦέʔγϣϯ ͡Όͳͯ͘ʁ

  11. ͳΜͰʮWebγεςϜʯͳͷʁ • ΞϓϦέʔγϣϯͰ͸ͳ͘γεςϜʹϑΥʔ Χεͯ͠ߟ͑ͯ΋Β͍͍ͨͷͰ͋͑ͯબΜͩ • WebΞϓϦέʔγϣϯͱ͍͏ΑΓWebͰఏڙ ͢ΔγεςϜશମʹࢹ఺Λ޲͚ͯ΄͍͠

  12. γεςϜશମʹϑΥʔΧε͢Δ • ΞϓϦ୯ମͰνϡʔχϯά͢Δ͜ͱ͸গͳ͍ • ߏ੒΍ϛυϧ΢ΣΞͷ࠷దԽ΋ηοτ • ৔߹ʹΑͬͯ͸API͢Βม͑Δ • WebγεςϜશମΛ၆ᛌͯ͠ݟΔඞཁ΋͋Δ

  13. ͱ͍͏Θ͚Ͱຊ୊

  14. ύϑΥʔϚϯεɾνϡʔχϯά #ͱ͸

  15. ύϑΥʔϚϯεɾνϡʔχϯά • ύϑΥʔϚϯεʹγεςϜΛ࠷దԽ͢Δ͜ͱ • ʮύϑΥʔϚϯεʯͬͯͳʹʁ • ϨΠςϯγʔʁ • ୯Ґ࣌ؒ͋ͨΓͷ࠷େॲཧ਺ʁ •

    ίετʁ
  16. ύϑΥʔϚϯεʁ • ͦ΋ͦ΋ύϑΥʔϚϯεͷ޲্͸खஈ • ໨త࣍ୈͰͦͷҙຯ͢Δͱ͜Ζ΋มΘΔ • ໨తʹ߹Θͤͦͷ౎౓Ͱఆٛ͢Δඞཁ͕͋Δ • e.g.) 100ສ/࣌ͷϢʔβʔΞΫηεʹ଱͑Δ

    • e.g.) ຫੑతʹ஗͍APIͷ଎౓Λվળ͢Δ
  17. ͳͥ΍Δͷ͔

  18. ػձଛࣦΛ๷͙ • ར༻ऀΛ૿΍͢ࢪࡦͳͲΛߦ͏৔߹ • γεςϜ͕໨ඪ஋ͷঢ়گʹ଱͑ΒΕͳ͍ͱʁ • → ຊདྷͷͦͷαʔϏεͷՁ஋͕ಧ͔ͳ͍ • →

    ػձଛࣦ • → ࣗ෼ୡ΋Ϣʔβʔ΋൵͍͠
  19. ޮ཰͕ѱ͍ͱίετֻ͕͔Δ • Ϋϥ΢υαʔϏεͷ΄ͱΜͲ͸ैྔ՝੍ۚ • ޮ཰ྑ͘Ձ஋ΛϢʔβʔʹఏڙͰ͖ͳ͍ͱ… • →ച্্͕͕ͬͯ΋ίετ΋૿͑Δ • →རӹ͕৳ͼ೰Ή •

    →Ϣʔβʔʹ৽͍͠Ձ஋Λఏڙ͠ʹ͘͘ͳΔ
  20. ಥવੑೳ͕ྼԽ͢ΔͱࠔΔ • ҆ఆ͠ͳ͍ͱਖ਼ৗͳঢ়ଶ͕ఆٛͮ͠Β͍ • ΞϥʔτΛग़͢΂͖ᮢ஋Λنఆͮ͠Β͍ • ߴ͘͢Δͱ… ো֐Λݟམͱ͢ • ௿͘͢Δͱ…

    ΞϥʔτରԠ஍ࠈ • → ໰୊ͷ༗ແΛ౎౓ਓ͕ؒ൑அ͢Δঢ়ଶ
  21. ͳͲͳͲ… ঢ়گʹΑ༷ͬͯʑ

  22. Ϗδωε্ͷ໰୊ͷղܾ ӡ༻ͷ͠΍͢͞ͷվળ ͜ΕΒ͕໨తʹͳΔ͜ͱ͕ଟ͍

  23. ٯʹݴ͑͹ඞཁͳ͍ͷʹ ΍Δҙຯ͸͋·Γͳ͍ ʢଞʹ΋ͬͱॏཁͳ͜ͱ͕͋Δ͸ͣʣ

  24. ͭ·ΓԿΛ͢Δͷ͔

  25. ύϑΥʔϚϯε্ͷ໰୊ղܾ • σʔλϕʔεͰੑೳ͕಄ଧͬͯ͠·͏ • APIͷϨΠςϯγ͕ߴ͗ͯ͢ଞγεςϜ͕ࠔΔ • όονॲཧʹֻ͕͔࣌ؒΓ͗͢Δ • etc..

  26. ࣮ࡍʹͲ͏΍ΔͱΑ͍ͷ͔

  27. ໨ඪΛઃఆ͢Δ ↓ ܭଌ͢Δ ↓ νϡʔχϯάΛߦ͏ ↓ ܭଌ͢Δ ʢ܁Γฦ͢ʣ

  28. ໨ඪΛઃఆ͢Δ ↓ ໰୊Λఆٛ͢Δ ↓ ໰୊Λղফ͢Δ ↓ ໰୊Λఆٛ͢Δ ʢ܁Γฦ͢ʣ

  29. ໨ඪΛઃఆ͢Δ

  30. ໨ඪΛઃఆ͢Δ • Ϗδωε্ͷ໨ඪ͔ΒϒϨΠΫμ΢ϯ͢Δ • ϢʔβʔNਓ͕ಉ࣌ʹ࢖ͬͨΒͲ͏ͳΔ͔ʁ • ԾઆΛཱͯͯࣜʹམͱ͠ܭࢉ͢Δ • (ϦϦʔεࡁͷ৔߹)طଘͷ਺஋͔ΒରൺΛऔΔ

  31. ໨ඪʹద͍ͯ͠Δ΋ͷ • ܭଌ/ࢉग़Ͱ͖Δ(͠΍͍͢)ͱྑ͍ • ୯Ґ࣌ؒ͋ͨΓͷϦΫΤετॲཧ਺ • ୯ҐϦΫΤετ౰ͨΓͷϨΠςϯγ • ҰఆϦΫΤετͷॲཧʹඞཁͳ୆਺

  32. ܭଌ͢Δ

  33. ܭଌ͢Δ • ͦ΋ͦ΋໨ඪୡ੒ʹ͚͍ۙͮͯΔ͔ • ໰୊ʢΤϥʔͳͲʣ͸ൃੜ͍ͯ͠ͳ͍͔ • ݟམͱ͕ͪ͠ʢಛʹχονέʔεʣ • ໰୊ͷཁҼʹͳΓ͑Δࣄ৅͸ى͖ͯͳ͍͔ •

    Ϧιʔεͷར༻཰ͷ૿ՃͳͲ
  34. ͲΜͳࢦඪΛܭଌ͢Δ͔ • ࣮ߦ؀ڥʹ͓͚Δ༗ݶͷϦιʔε • PaaS (GAE/Heroku/etc..) • Instances/Network/etc.. • IaaS

    (EC2/GCE/etc..) • Instances/CPU/Memory/Network/etc..
  35. ͲΜͳࢦඪΛܭଌ͢Δ͔ • ΞϓϦέʔγϣϯͷ࣮ߦ࣌ؒͷ౷ܭ(Profiling) • ϨεϙϯεΛฦ͢·Ͱͷ࣌ؒ • σʔλϕʔε΁ͷΫΤϦͷ࣮ߦ࣌ؒ • ؔ਺ͷ࣮ߦ࣌ؒ •

    etc..
  36. ͲͷΑ͏ʹܭଌ͢Δ͔ • ࣮ࡍͷॲཧʹରͯ͠ͷγεςϜͷ൓ԠΛݟΔ • WebγεςϜͳͷͰHTTPϦΫΤετ͕ඞཁ • ࣮ࡍͷϦΫΤετΛྲྀͤΔ৔໘͸΄΅ͳ͍ • ͍͖ͳΓϦϦʔε͸ා͗͢ΔͷͰجຊແཧ •

    ͳΜͱ͔ݕূͰ͖Δ؀ڥͱ࢓૊Έ͕ඞཁ
  37. ݕূ؀ڥͷ४උ • ຊ൪ͱ΄΅ಉ͡؀ڥΛ༻ҙ͢Δ • શ෦ಉ͡Ͱ͸μϝ • ֎෦API callͳͲ͸ࢭΊͳ͍ͱ͍͚ͳ͍ • e.g.)

    Google Play ΁ͷAPI Call (՝ۚ౳) • ܭଌʹෆՄܽͳॲཧͷਫ਼͕ࠪඞཁ
  38. ෛՙࢼݧͷ४උ • ຊ൪ͱग़དྷΔ͚ͩಉ͡ෛՙΛֻ͚͍ͨ • ຊ൪ͱಉ͡Α͏ͳHTTPϦΫΤετ • ຊ൪ͱಉ͡Α͏ͳσʔλ • ໨ඪΛୡ੒͍ͯ͠Δ͘Β͍ͷτϥϑΟοΫ

  39. ܭଌ݁ՌΛͲ͏׆͔͔͢ • ໨ඪୡ੒ͨ͠Βˠ͓͠·͍ • ໨ඪୡ੒Ͱ͖ͯͳ͔ͬͨΒ • ໨ඪͱဃ཭͕ͲΕ͘Β͍͋Δ͔ • ໨ඪୡ੒Λ๦͛ΔཁҼ͸ͳʹ͔ •

    ੑೳ্ͷϘτϧωοΫͱͳΔͷ͸Կ͔
  40. νϡʔχϯάΛߦ͏

  41. νϡʔχϯάΛߦ͏ • ੑೳ্ͷϘτϧωοΫΛղফ͢ΔࢪࡦΛߦ͏ • ΞʔΩςΫνϟͷվળ • ΞϧΰϦζϜͷվળ • ઃఆ஋ͷ࠷దԽ •

    etc..
  42. ͜Εͷ܁Γฦ͠

  43. Ұ൪Ή͔͍ͣ͠΋ͷ͸ͳʹ͔

  44. ܭଌ

  45. ܭଌͷ೉͠͞ • ͦ΋ͦ΋ܭଌͷࢦඪ͸໨తʹଈ͍ͯ͠Δʁ • ܭଌͷͨΊͷલఏ৚݅͸ἧ͍ͬͯΔʁ • ܭଌʹϊΠζ͸ͲΕؚ͚ͩ·Ε͍ͯΔʁ • ݟམͱ͍ͯ͠Δࢦඪ͸ͳ͍ʁ •

    ܭଌ݁Ռ͔Βໃ६ͷແ͍ԾઆΛಋ͚͍ͯΔʁ
  46. ແݶʹ՝୊͕͋Δ

  47. Α͋͘Δ՝୊ • ෛՙࢼݧγφϦΦͷ೉͠͞ • ෛՙࢼݧͷ࣮ࢪͷ࢓ํͷ೉͠͞ • ܭଌϊΠζΛআ͘೉͠͞

  48. ෛՙࢼݧγφϦΦͷ೉͠͞

  49. ෛՙࢼݧͷγφϦΦͷ࡞Γํ • ຊ൪ͱग़དྷΔ͚ͩಉ͡ෛՙΛֻ͚͍ͨ • Ϣʔβʔͷૢ࡞Λ໛ͯ͠γφϦΦʹམͱ͢ • ͲͷΑ͏ͳϢʔβʔ͕ଟ͘ͳΔͷ͔ʁ • ͲͷΑ͏ͳૢ࡞͕ଟ͘ͳΔͷ͔ʁ •

    ԾઆΛॏͶ͍͔ͯ͘Βڰ͍΍͍͢
  50. ྑ͘ͳ͍γφϦΦ • Ծઆ͸ͦΕͬΆ͍͚Ͳݱ࣮ͱဃ཭͕େ͖͍ • e.g. ࣮ࡍʹ͸͋·Γݺ͹Εͳ͍ϦΫΤετ ͕ଟ͘ͳͬͯ͠·͍ݱ࣮ʹى͖ͳ͍ແ͍Ϙ τϧωοΫ͕ੜ·Εͯ͠·͏ • ׬ᘳͳ΋ͷ͸ෆՄೳͳͷͰׂΓ੾Γ΋ඞཁ

  51. ෛՙࢼݧ ࣮ࢪͷ࢓ํͷ೉͠͞

  52. ෛՙ͕͏·ֻ͔͘Βͳ͍ • ෛՙΛֻ͚ΔଆͰ٧·Δ • ࣮ʹ༷ʑͳཁҼͰ٧·Δ • ෼ࢄ͠ͳ͚Ε͹౰વݶքʹ౰ͨΓ΍͍͢ • ൺֱత෼ࢄͤ͞΍͍͢ͱ͸͍͑Ͳ΋… •

    ૝ఆͲ͓Γͷෛՙֻ͕͚ΒΕ͍ͯΔ͔ʁ
  53. γφϦΦͷ٧·ΓͷӨڹ • γφϦΦͷ్தͰϨΠςϯγ͕ۃ୺ʹѱԽ • → Ұ࣌తʹϦΫΤετͷϖʔε͕མͪΔ • → Ҿ͔͔ͬͬͯΔෛՙࢼݧ͸΄΅ఀࢭঢ়ଶ •

    → ฒྻ਺͕ෆ҆ఆʹͳΔ
  54. γφϦΦͷ٧·ΓͷӨڹͷ࡟ݮ • ϦΫΤετͷλΠϜΞ΢τΛ୹Ίʹ͢Δ • ҆ఆ͠ͳ͍͕࣌ؒݮΔ͜ͱͰϊΠζ͕ݮΒ ͤΔ

  55. ܭଌϊΠζΛআ͘೉͠͞

  56. αʔόʔͰͳʹ͕ಈ͍͍ͯΔʁ • ΞϓϦέʔγϣϯ͚ͩͱ͸ݶΒͳ͍ • fluentd (ϩάͷετϦʔϜసૹ) • ؂ࢹεΫϦϓτ • etc...

  57. ܭଌ݁Ռ͸ҼՌؔ܎Λࣔ͞ͳ͍ • ͨͱ͑͹ϨεϙϯεͷϨΠςϯγ͕ߴ͍৔߹ • ஗͍ؔ਺΍ΫΤϦ͕௚઀ݪҼͱ͸ݶΒͳ͍ • ҼՌؔ܎͕ແ͍৔߹΋͋Δ • ͦΕࣗମ͕ݪҼͰ͸ͳ͘ଞͷέʔεʹΑΓ Ҿ͖ى͜͞Εͨ໰୊ͷ݁ՌͰ͋Δ৔߹ͳͲ

  58. ҼՌؔ܎ΛݟۃΊΔͨΊʹ • ԾઆΛ΋ͱʹ࣮ଶͱͷໃ६͕ແ͍͔ߟ͑Δ • ࣮ଶΛਖ਼͘͠ଟ֯తʹ೺Ѳ͢Δඞཁ͕͋Δ • ෳ਺ͷࢦඪΛซͤͯݟΔ • Ծઆʹରͯ͠ໃ६͕͋Δ݁ՌΛ୳͢ •

    Ծઆͷ͔֬Β͠͞ΛݟۃΊΔ͜ͱ͕Մೳ
  59. ҼՌؔ܎ΛݟۃΊΔͨΊʹ • ͦΕͧΕͷ࢓૊Έ͕ಈ͘ϝΧχζϜΛਖ਼͘͠ཧ ղ͍ͯ͠Δ͜ͱ͕ͱͯ΋ॏཁ • ॲཧͷ࣮ଶͱؔ܎ੑΛ஌͍ͬͯΕ͹Ծઆʹର͠ ͯໃ६ͨ݁͠Ռʹؾͮ͘͜ͱ͕Ͱ͖Δ • ཧղͤͣʹ΍Δͷ͸ͨͩͷΪϟϯϒϧ

  60. ࣮ફ

  61. ISUCON https://isucon.net/

  62. Iikanjini Speed Up CONtest • WebγεςϜͷνϡʔχϯάίϯςετ • ϛυϧ΢ΣΞɺΞϓϦέʔγϣϯ͢΂ͯΛࣗ ༝ʹ͍͍ͯ͠ͷͰ࠷ߴʹύϑΥʔϚϯεͷ ߴ͍ΞϓϦέʔγϣϯʹ࡞Γม͑Δڝٕ

    • 2011೥ʙདྷ೥2020೥Ͱ10ճ໨ͷ։࠵
  63. ISUCONͷউഊ • ग़୊ଆͷ༻ҙ͓ͨ͠୊ΞϓϦέʔγϣϯΛ • ग़୊ଆͷ༻ҙ͓ͨ͠୊ϕϯνϚʔΧʔͰ • ࠷΋ߴ͍είΞΛग़ͨ͠ਓ͕উͪ

  64. είΞʁ • ग़୊ଆ͕ఆٛͨ͠໨ඪୡ੒౓Λ਺஋Խͨ͠΋ͷ • աڈͷࣄྫ • ୯Ґ࣌ؒ౰ͨΓͷ૯ϦΫΤετ਺ • νέοτͷൢച਺ •

    CtoCΞϓϦέʔγϣϯͷച্
  65. ໨ඪ͕Ծఆ͞Ε͍ͯΔʂ

  66. ͋ͱ͸ܭଌͱνϡʔχϯάΛ ͢Δ͚ͩʂ

  67. ࿅शʹ΋͍ͬͯ͜ʂ

  68. աڈ໰͕githubʹ͋Δ https://github.com/isucon

  69. جຊREADMEʹै͑͹ಈ͘

  70. ஫ҙ • ࣮ࡍͷڝٕͷείΞͱൺֱ͢Δҙຯ͸গͳ͍ • είΞ͸࣮ߦ؀ڥͰ΋มΘΓಘΔ • Ϋϥ΢υج൫΋ਐԽ͢Δ • ॳظείΞ͔ΒͷൺͰߟ͑Δͱྑ͍

  71. ࿅शʹ΋͍ͬͯ͜ʂʂʂ

  72. ISUCON͸͍͍ͧ

  73. ࣮ࡍʹ΍ͬͯΈ·͠ΐ͏

  74. ISUCON8༧બ໰୊ https://github.com/isucon/isucon8-qualify (DEMO)

  75. ·ͱΊ

  76. ·ͱΊ • ύϑΥʔϚϯεɾνϡʔχϯά͸खஈ • ໨తΛݟఆΊͯऔΓ૊Ή͜ͱ͕େ੾ • ܭଌ͕ΩϞ • ෳ਺ͷ؍఺͔Β͔֬Β͍͠ԾઆΛಋ͖ग़͢ •

    ISUCON͸͍͍ͧ
  77. ࢀߟจݙ • ݪҼௐࠪ༻LinuxίϚϯυ | ֎ಓ෕ͷঊ • LinuxαʔόʹϩάΠϯͨ͠Β͍ͭ΋΍͍ͬͯΔ ΦϖϨʔγϣϯ | Ώ͏͏͖ϒϩά

    • αʔόʔ/ΠϯϑϥΛࢧ͑Δٕज़ (ٕज़ධ࿦ࣾ) • ISUCONͷউͪํ
  78. None
  79. None