大規模Webサービス入門 5回目 / Introduction to large scale web service 5

Fd09da0d9751bb7875ef4ff7e6201860?s=47 muttan
August 11, 2017

大規模Webサービス入門 5回目 / Introduction to large scale web service 5

Fd09da0d9751bb7875ef4ff7e6201860?s=128

muttan

August 11, 2017
Tweet

Transcript

  1. େن໛αʔϏεٕज़ೖ໳ ୈ5ճ ISUCONରࡦษڧձ 2017/8/11

  2. ୈ5ճ େن໛σʔλॲཧ[࣮ફ]ೖ໳ - ΞϓϦέʔγϣϯ։ൃͷצॴ -

  3. େن໛σʔλॲཧΞϓϦέʔγϣϯͷ
 ߟ͑ํͱରࡦ • ࠓ·Ͱ͸, େྔͷσʔλ͕͋ͬͯ΋ϋʔυ΢Σ Ξͷߏ੒Λݟ௚͢ʢہॴੑΛ׆͔͢ʣ͜ͱͰ ͳΜͱ͔৐Γ੾Ζ͏ͱ͍͏ߟ͑. • Ͳ͏ͯ͠΋େྔͷσʔλʹΞΫηε͠ͳ͍ͱ ͍͚ͳ͍ͱ͖ͷରࡦΛߟ͑Δ.

  4. େن໛σʔλॲཧΞϓϦέʔγϣϯͷ
 ߟ͑ํͱରࡦ • ຊ೔ͷ಺༰ • Lesson14
 ༻్ಛԽܕΠϯσΫγϯά • Lesson15
 ཧ࿦ͱ࣮ફͷ྆ଆ͔Β߈ΊΔ

  5. Lesson14 ༻్ಛԽܕΠϯσΫγϯά

  6. ΠϯσοΫεͱγεςϜߏ੒ • େن໛σʔλΛѻ͏ྫ • શจݕࡧ • ྨࣅจॻܥ୳ࡧ • σʔλϚΠχϯά

  7. ΠϯσοΫεͱγεςϜߏ੒ • ઌఔڍ͛ͨγεςϜͰ͸RDBMSͰ͸͠ΜͲ͍ • ͳΒRDBMSΛ࢖Θͳ͚Ε͹͍͍͡Όͳ͍ • શ͘RDBMSΛ࢖Θͳ͍ͱ͍͏࿩Ͱ͸ͳ͍

  8. ΠϯσοΫεͱγεςϜߏ੒ • σʔλ͸RDBMSʹอଘ͓ͯ͘͠ • ͦͷσʔλΛఆظతʹநग़͠, ผ్ΠϯσοΫ εαʔόͷΑ͏ͳ΋ͷΛ࡞Δ • ͦ͜ʹWebΞϓϦ͔ΒRPCͳͲͰΞΫηε͢ Δํ๏Λ࢖͏

  9. ʲ෮शʳRDBMS • Relational DataBase Management System • ؔ܎σʔλϕʔεΛӡ༻͢ΔͨΊͷιϑτ΢Σ Ξͷू߹ମ •

    MySQL, PostgreSQL, SQLite, etc…
  10. ʲ෮शʳRPC • Remote Procedure Call • ωοτϫʔΫʹ઀ଓ͞Εͨଞͷίϯϐϡʔλ ্ͷϓϩάϥϜΛ࣮ߦ͢Δ • ͦͷ݁ՌΛडऔΔ

  11. ΠϯσοΫεͱγεςϜߏ੒ ΠϯσοΫε αʔό ᶃఆظతʹ σʔλΛநग़ cron job NPE@QFSM
 "1TFSWFS ᶄΠϯσοΫεΛ࡞Δ

    ᶅRPCͰΞΫηε ᶆσʔλऔಘ
  12. ΠϯσοΫεͱγεςϜߏ੒2 ΠϯσοΫε αʔό ᶃఆظతʹ σʔλΛநग़ cron job NPE@QFSM
 "1TFSWFS ᶄΠϯσοΫεΛ࡞Δ

    ᶅRPCͰΞΫηε ᶇσʔλऔಘ httpd ᶆݕࡧͯ͠JSON Λฦ͢ΞϓϦ
  13. ͳͥAPαʔόʹΠϯσοΫεΛ ࣋ͨͤͳ͍ͷ͔ • ઌ΄Ͳͷਤͷmod_perlͷ෦෼ • े෼ͳϝϞϦ͕ͳ͍ • ΞʔΩςΫνϟతʹେྔͷσʔλΛ୳͢Α͏ ͳ΋ͷʹ޲͍͍ͯͳ͍

  14. ͳͥAPαʔόʹΠϯσοΫεΛ ࣋ͨͤͳ͍ͷ͔ • APαʔόશͯʹΠϯσοΫεΛ΋ͨͤΔͷ΋ େมʢࠓޙ૿͑ΔՄೳੑ͕͋Δʣ • ΠϯσοΫεαʔόʹू໿ͯ͠؅ཧ͢Δ

  15. RPCͬͯ஌ͬͯΔʁ • ͔ͭͯ͸RPCΛ࢖ͬͯΠϯσοΫεαʔό͔Β ݁ՌΛऔಘ͍ͯͨ͠.ʢࠓ΋͋Δʣ • ࠓͰ͸JSON+HTTP͕ओྲྀ • զʑ΋ೃછΈ͕ਂ͍

  16. ༻్ಛԽܕͷΠϯσΫγϯά • ࠓ·Ͱ঺հͨ͠ߏ੒͸ʮ༻్ಛԽܕΠϯσΫ γϯάʯͱݺ͹Ε͍ͯΔ • ͜ΕʹΑͬͯ, RDBMSͰ͸೉͔ͬͨ͜͠ͱ͕ ࣮ݱՄೳʹʂ

  17. ༻్ಛԽܕͷΠϯσΫγϯά • RDBMS͸൚༻తʹ࢖͑ΔΑ͏༷ʑͳػೳ͕උ Θ͍ͬͯΔ • ౷ܭॲཧ, ݁߹, ιʔτ • ཉ͍͠ػೳ͚ͩʹಛԽʢνϡʔχϯάʣ͢Δ

    ͨΊૣ͘ͳΔ
  18. ༻్ಛԽܕͷΠϯσΫγϯά • σʔλΛఆظతʹॻ͖ग़ͯ͠ΠϯσοΫεʢσʔλ ߏ଄ʣΛߏங͢Δ • ߏ଄Խͨ͠σʔλΛอ࣋ͨ͠αʔόΛC++Ͱ࡞Γ, RPCͰΞΫηε͢ΔͳͲ • ThriftͬͯͷͰଟݴޠRPC͕Մೳʹ •

    ௐ΂ͯΈΔͱݕࡧΤϯδϯܥͰΑ͋͘Δߏ੒ͬΆ͍
  19. ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ

  20. ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • ΩʔϫʔυϦϯΫΛੜ੒͢ΔॲཧΛߟ͑Δ Լઢ෦෼͕ϦϯΫ

  21. ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • Ωʔϫʔυͷ਺͕20ສϫʔυڧ͋Δ • ͜ΕΛ͍͍ͪͪൺֱ͍ͯ͘͠ͱաෛՙʹͳͬ ͯDBαʔό͕མͪͯ͠·͏ • Ͳ͏ͨ͠Β͍͍ͩΖ͏͔ʁ

  22. ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • લʹ΍ͬͨΑ͏ʹ, όονॲཧͰΩʔϫʔυΛ ͢΂ͯऔΓग़͓ͯ͘͠ • ͔ͭͯ͸ڊେͳਖ਼نදݱΛ༻͍ͯνΣοΫ͠ ͍ͯͨ • OR৚݅ʹΑΓόοΫτϥοΫ͕ͨ͘͞Μൃ

    ੜͯ͠஗͘ͳͬͨ
  23. ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • ݱࡏ͸Common Prefix Searchʢڞ௨઀಄ࣙݕࡧʣͱ Trie໦Λ࢖ͬͯϚονϯά͍ͯ͠Δ • Common Prefix Searchʹ͸,

    Aho-Corasick๏ʢΤΠ ϗʔίϥγοΫʣ΍Double Array TrieͳͲ • ࣗવݴޠॲཧാͩͱԦಓͳํ๏Β͍͠ • Aho-Corasick͸ؤுͬͯௐ΂͍ͯͩ͘͞
  24. Trie໦ͱ͸ • Ωʔू߹Λѻ͏ͨΊͷσʔλߏ଄ͷҰछ • ࠓճͷΑ͏ͳ୯ޠͷू߹ͱ͔ • ݕࡧαΠζ͕໦ͷେ͖͞Ͱ͸ͳ͘୯ޠͷ௕͞ ʹґଘ͢Δ • ऩ࿥݅਺ʹґଘ͠ͳ͍

  25. Trie໦ͱ͸ t e a n o i n n w

    e keys: tea, ten, to, i, in, inn, we
  26. ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • ঺հͨ͠Α͏ͳσʔλߏ଄Λ༧Ίߏங͓ͯ͠ ͘͜ͱͰߴ଎Խग़དྷΔ • 7ճͰৄ͘͠આ໌

  27. ʲྫʳ͸ͯͳϒοΫϚʔΫͷ ςΩετ෼ྨث

  28. ʲྫʳ͸ͯͳϒοΫϚʔΫͷ ςΩετ෼ྨث • ͸ͯͳϒοΫϚʔΫͷΧςΰϦࣗಈ෼ྨ͸, Complement Naive Bayesͱ͍͏ΞϧΰϦζϜ Λ࢖ͬͯػցֶशΛߦ͍෼ྨ͍ͯ͠Δ. • ৄ͘͠͸ׂѪ͢Δ͕,

    ग़ݱස౓ΛසൟʹٻΊΔ ͜ͱʹͳΔͷͰ, ͦΕ͚ͩΛฦ͢αʔό͕ଘࡏ ͍ͯ͠Δ
  29. Lesson15 ཧ࿦ͱ࣮ફͷ྆ํ͔ΒऔΓ૊Ή

  30. ٻΊΒΕΔٕज़తͳཁ݅ΛݟۃΊΔ • ཧ࿦ • ίϨΛ͜ͷ༷ʹ͢Δͱಈ͘Αͱ͍ͬͨΑ͏ͳ ஌ࣝ • ࣮ફ • ࣮ࡍʹखΛಈ͔ͨ͠Γӡ༻্͍ͯ͘͠Ͱඞཁ

    ʹͳͬͯ͘Δϊ΢ϋ΢
  31. େن໛ΞϓϦʹ͓͚Δཧ࿦ͱ࣮ફ • ཧ࿦ͱ࣮ફΛόϥϯεྑ͘΍Βͳ͍ͱμϝ • ͲͪΒ͔Ұํ͚ͩʹภͬͯ͸͍͚ͳ͍ • ཧ࿦͚ͩ஌͍ͬͯͯ΋͍࣮͟૷ग़དྷΔ͔ͱ͍͏ͱ, ࣮ ૷ͷͨΊͷόουϊ΢ϋ΢͕… •

    ࣮ફΛ͜ͳ͍ͯͯ͠΋, Θ͔Βͳ͍͜ͱʢ஌ࣝෆ଍ʣ ΋Ͱͯ͘Δ
  32. ܭࢉػͷ໰୊ͱͯ͠ಓےΛݟ͚ͭΔ • ઌͷΩʔϫʔυΛݟ͚ͭΔॲཧͰ͸, Double array Trieͱ͍͏࿩͕ग़͖ͯͨ • ͜ͷΑ͏ͳΞϧΰϦζϜΛ஌͍ͬͯΔ͔஌Β ͳ͍͔Ͱେ͖͘มΘͬͯ͘Δ •

    ʲ࠶ܝʳΞϧΰϦζϜ͸େࣄ
  33. 2ճ͔Β5ճ·Ͱͷখ·ͱΊ

  34. ୈ2ճʙୈ5ճͷখ·ͱΊ 1. ΪΨόΠτ୯Ґͷσʔλॲཧ
 ςϥ, ϖλόΠτͷσʔλΛѻ͏ʹ͸Ͳ͏͢Δ͔. 2. ϝϞϦॏཁ
 ϝϞϦʹࡌΔͳΒϝϞϦʹ. Ωϟογϡ͕ฉ͖΍͍͢ߏ੒ʹ͢Δ. 3.

    ෼ࢄΛҙࣝͨ͠ӡ༻
 ద੾ͳεΩʔϚͷઃఆ, ύʔςΟγϣχϯά, JOINΛආ͚Δ. 4. ద੾ͳΞϧΰϦζϜͱσʔλߏ଄
 Trie໦, Double Array Trie, Common Prefix Search