Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Elasticsearch 勉強会 2019 「GameWithで検索システムが使われるまで」

memory
PRO
February 20, 2019

Elasticsearch 勉強会 2019 「GameWithで検索システムが使われるまで」

memory
PRO

February 20, 2019
Tweet

More Decks by memory

Other Decks in Programming

Transcript

  1. GameWithͰݕࡧγεςϜ͕࢖ΘΕΔ·Ͱ
    Elasticsearchษڧձ
    2019/02/20 αʔϏε։ൃ෦ R&DνʔϜ
    Ί΋Γʔ(@m3m0r7)

    View Slide

  2. Έͳ͞ΜɺHello Worldʂ

    View Slide

  3. ͩΕʁ
    Ί΋Γʔ(@m3m0r7) Ͱ͢ɻ

    ը૾͸͏ͪͷϋϜελʔͷ Lily ͪΌΜͰ͢ɻ
    ౦ژͷ࿡ຊ໦ʹ͋Δ גࣜձࣾ GameWith ͱ͍͏

    ձࣾͰಇ͍ͯ·͢ɻ

    View Slide

  4. ͱ͜ΖͰɺΈͳ͞Μ GameWith ͸͝ଘ஌Ͱ͔͢ʁ

    View Slide

  5. GameWith ʹ͍ͭͯ

    View Slide

  6. GameWith ʹ͍ͭͯ
    ήʔϜ߈ུʮGameWithʯͰ͕͢ɺ
    ࣮͸΢ΣϒαΠτҎ֎ʹ΋ΞϓϦ͕͋Γ·͢

    View Slide

  7. GameWith ʹ͍ͭͯ
    ήʔϜ߈ུʮGameWithʯͰ͕͢ɺ
    ࣮͸΢ΣϒαΠτҎ֎ʹ΋ΞϓϦ͕͋Γ·͢

    View Slide

  8. ࠓ೔͸͜͜ͷݕࡧػೳʹ͍͓ͭͯ࿩͠·͢

    View Slide

  9. ๭೔๭ॴ

    View Slide

  10. ๭೔๭ॴ

    View Slide

  11. ͜ͷืू͔ΒݕࡧγεςϜͷ։ൃ͕࢝·Δ

    View Slide

  12. ݕࡧγεςϜͷ։ൃͰҙࣝͨ͜͠ͱ

    View Slide

  13. θϩϕʔε͔Βͷ։ൃͰҙࣝͨ͜͠ͱ
    • ҙࣝͨ͜͠ͱ͸5఺
    • ᶃ ୭Ͱ΋։ൃͰ͖ΔΑ͏ʹ͢ΔϝϯλϦςΟ
    • ᶄ ৽͍͜͠ͱʹ௅ઓ͢ΔϝϯλϦςΟ
    • ᶅ ࠳͚ͳ͍ϝϯλϦςΟ
    • ᶆ ਏ͍ঢ়گΛָ͠ΉϝϯλϦςΟ
    • ᶇ ࢒ۀ͸͠ͳ͍ͧͱ͍͏ڧ͍ϝϯλϦςΟ

    View Slide

  14. νʔϜߏ੒

    View Slide

  15. νʔϜߏ੒
    • ݕࡧγεςϜࣗମͷνʔϜߏ੒͸4໊ମ੍
    • αʔόʔαΠυΤϯδχΞ × 1
    • GameWith ͷ΢Σϒ໘ͷ։ൃ΍վम΋݉຿
    • ΠϯϑϥΤϯδχΞ × 1
    • ଞͷΠϯϑϥ໘ͷλεΫ΋݉຿
    • σΟϨΫλʔ × 1
    • GameWith ͷ΢Σϒ໘ͷσΟϨΫγϣϯ΋݉຿
    • ίʔυϨϏϡϫʔ × 1
    • ෦௕
    • ଞʹiOS, AndroidΤϯδχΞ

    View Slide

  16. ༨ஊ

    View Slide

  17. ϓϩδΣΫτ։࢝࣌͸ࢲͱ෦௕͚ͩ

    View Slide

  18. ߟ͑ͳ͍͜ͱʹ͠Α͏

    View Slide

  19. εέδϡʔϧ

    View Slide

  20. 9݄Ϛετ

    View Slide

  21. View Slide

  22. ਖ਼௚Ϧιʔε଍Γͳ͍

    View Slide

  23. ͦΕͰ΋΍Γ͖Δͧ

    View Slide

  24. ٕज़બఆ

    View Slide

  25. ٕज़બఆ
    • ։ൃ؀ڥ͸DockerͰߏ੒ͨ͠
    • DockerΛ࢖͏͜ͱʹΑΓɺԿ͕؀ڥʹ͋Δͷ͔໌֬ʹΘ͔ΔΑ͏ʹͳͬͨ
    • GameWith ͸ Vagrant Λ࢖͏෩ை͕͋ΓɺͲ͏͍ͬͨϛυϧ΢ΣΞ͕͋
    Δ͔ɺͲ͏͍͏ߏ੒ʹͳ͍ͬͯΔͷ͔೺Ѳͮ͠Β͔ͬͨ
    • ։ൃ؀ڥͱϓϩμΫγϣϯ؀ڥͰඞཁͳ؀ڥͷࠩҟΛແ͔ͨͬͨ͘͠
    • ϓϩμΫγϣϯ؀ڥʹ͸͋Δ͕ɺ։ൃ؀ڥʹ͸ͳ͍ɺͱ͍͏ঢ়ଶΛ࡞Γ
    ͨ͘ͳ͔ͬͨ
    • ࣾ಺ͰDockerΛϓϩμΫγϣϯʹར༻͢Δͷ͸͜ͷϓϩδΣΫτ͕ॳΊͯ
    • ৽͍͠௅ઓΛ͢Δ͜ͱ͸͍͍͜ͱɻ৽͍͜͠ͱʹ௅ઓΛͨ͠ͱ͍͏લྫ
    Λ࡞ΓपΓͷϝϯόʔ΋ɺࣗΒਐΜͰ௅ઓ͍ͯ͘͠෩౔ʹ͍͖͔ͯͨͬ͠
    ͨ

    View Slide

  26. ٕज़બఆ
    • Elasticsearch ͱ PHP + Laravel Λࠓճٕज़બఆͨ͠
    • GameWith ͸ AWS Λ࢖༻͍ͯ͠Δ͕ɺAWS Elasticsearch Service࢖ΘͣAWS
    EC2 ͱ Docker ্ʹElasticsearchΛཱͯΔ͜ͱʹɻ
    • GameWith ͸ ήʔϜ߈ུ৘ใΛऔΓѻ͏ಛੑ͔Βݻ༗໊ࢺ΋ଟࣙ͘ॻͷ
    ໰୊͕ݒ೦͞Εͨɻ
    • ࣙॻ͸ Sudachi Λ࢖༻
    • ৽ͨͳࢼΈΛ͔ͨͬͨ͠
    • ൒෼ϊϦɺ൒෼දهਖ਼نԽ໨౰ͯ

    View Slide

  27. ٕज़બఆ
    • Elasticsearch ͱ PHP + Laravel Λࠓճٕज़બఆͨ͠
    • Elasticsearchຊମͱͷ௨৴͸PHPΛٕज़બఆͨ͠
    • GameWith͸PHPΛϝΠϯݴޠͱͯ͠ѻ͍ͬͯΔձࣾ
    • ຊ౰͸৽ͨͳ௅ઓͱ͍͏ϚΠϯυͰ Go ʹ͠Α͏ͱࢥ͕ͬͨɺelasticެࣜ
    ͷϥΠϒϥϦ͕౰࣌͸ͳ͔ͬͨɻ
    • PHPͰ͋Ε͹ɺelasticެ͔ࣜΒϥΠϒϥϦ͕഑৴͞Ε͍ͯΔ
    • ͨͩɺࠓճͷݕࡧγεςϜͰ͸ PHP ͷGuzzle Λ࢖ͬͯεΫϥονͰ
    ࡞ͬͨɻ

    View Slide

  28. Πϯϑϥߏ੒

    View Slide

  29. Πϯϑϥߏ੒
    ※μογϡϘʔυͱ͸GameWithͷϥΠλʔ͕࢖༻͢Δ؅ཧը໘ͷ͜ͱͰ͢

    View Slide

  30. Πϯϑϥߏ੒
    • ͳͥ͜ͷߏ੒ʹ͠Α͏ͱͨ͠ͷ͔
    • શจݕࡧΤϯδϯ͸ΞϓϦ͔Β͸ࢀরɺμογϡϘʔυ͔Β͸ॻ͖ࠐΈ͕ߦ
    ΘΕΔɻ
    • ήʔϜͷ߈ུهࣄ͸සൟʹߋ৽͞ΕΔͨΊɺߋ৽৘ใ΍࡟আ৘ใΛΩϡʔ
    Ͱॲཧ͔ͨͬͨ͠ͷͰɺAmazon SQSΛՃ͑ͨ
    • Elasticsarchͷ৑௕ԽͷͨΊσʔλϊʔυ͕2୆Ҏ্ඞཁͩͬͨ
    • ࠓճͷϓϩμΫτͰ͸ͲΕ͚ͩͷΞΫηε਺͕͋Δ͔࢑ఆͰ͔͠ग़ͤͳ͔ͬ
    ͕ͨ1୆ͩͱϊʔυ͕յΕͨࡍͷରॲ͕Ͱ͖ͳͦ͞͏Ͱ͋ΔͨΊ

    View Slide

  31. Πϯϑϥߏ੒
    • ࣮ࡍͷߏ੒

    View Slide

  32. ࣾ಺ʹ஌ݟ͕ͳ͘౰࣌͸
    ͜ͷΠϯϑϥߏ੒͕ݶքͩͬͨ

    View Slide

  33. ϖʔδωʔγϣϯ

    View Slide

  34. ϖʔδωʔγϣϯ
    • ϖʔδωʔγϣϯΛͲ͏͠Α͏͔໎ͬͨ
    • ࠷ॳ͸IDϕʔε͔ɺ೔෇ϕʔεͰͷϖʔδωʔγϣϯΛߟ͍͑ͯͨ
    • OFFSETϕʔεͰ͸ߟ͍͑ͯͳ͔ͬͨ
    • GameWith ͷಛੑ্ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞ΕΔ͜ͱ͕ݒ೦͞ΕΔ
    • ಛʹήʔϜͷΠϕϯτ։࢝࣌ʹݕࡧγεςϜ΁ͷτϥϑΟοΫ͕૿େ͢Δ
    ͜ͱ͕૝ఆ͞Εͨ
    • ·ͨͦΕͱಉ࣌ʹΠϕϯτͷ৘ใΛϦΞϧλΠϜͰߋ৽͍ͯͨ͘͠Ίɺ
    OFFSETϕʔεͩͱ1݅໨ͱ2݅໨ʹಉ͡৘ใ͕ग़ݱ͢ΔՄೳੑ͕͋ͬͨͨ
    Ίɺࠓճ͸ର৅֎ͱͨ͠ɻ

    View Slide

  35. ໎ͬͨ݁Ռ

    View Slide

  36. ໎ͬͨ݁Ռ

    View Slide

  37. View Slide

  38. ͜Ε΍

    View Slide

  39. ϖʔδωʔγϣϯ
    • ϖʔδωʔγϣϯ͸ Elasticsearch ͷ Scroll Λ࢖͏͜ͱʹ
    • ͜ͷػೳΛ࢖͑͹ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞Εͯ΋େৎ෉ͦ͏
    • ϢʔβʔମݧΛଛͳΘͣʹݕࡧ݁ՌΛදࣔͰ͖ͦ͏

    View Slide

  40. ໰୊ൃੜ

    View Slide

  41. ໰୊ൃੜ
    • ݕࡧ݁Ռ͕ݕࡧΛ͢Δͨͼʹҟͳͬͨ
    • ࠷ॳ͸ݪҼ͕Α͘Θ͔Βͳ͔ͬͨ
    • Α͘Α͘ௐ΂Δͱ AWS ͷ Internal Elastic Load Balancing Ͱෛՙ෼ࢄͤ͞
    ͍ͯΔ͜ͱʹؾ͍ͮͨ
    • Elasticsearch ͷ Scroll ͕ฦ͢஋͕ҟͳΔͷ͸౰ͨΓલͩͬͨ
    AWS ͷ Sticky Session Λ࢖ͬͯϖʔδωʔγϣϯ͢ΔΠϯελϯεΛಉ͡
    ର৅ʹ͢ΔΑ͏ʹͨ͠

    View Slide

  42. ໰୊ൃੜ
    ϔομ͔ΒAWS ELBΛऔಘ͢Δ
    ηογϣϯ৘ใͱͯ͠อ࣋͞Ε͍ͯΕ͹࢖༻͢Δ

    View Slide

  43. ݕࡧ݁Ռ͕ਖ਼ৗʹ

    View Slide

  44. ٕज़બఆ

    View Slide

  45. ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ
    • ϓϩμΫγϣϯ؀ڥΛߏங
    • QA (Quality Assurance) Λ࣮ࢪ͢ΔͨΊʹϓϩμΫγϣϯ؀ڥͷߏஙΛ͢Δඞ
    ཁ͕͋ͬͨ
    • iOS, AndroidΤϯδχΞɺσΟϨΫλʔ͔Β࣮ࡍͷσʔλΛݟͯ֬ೝΛ͠
    ͍ͨཁ๬ʹ౴͑ΔͨΊ
    • ϓϩμΫγϣϯ؀ڥͷ Elasticsearch ʹهࣄΛ౤ೖ͍ͯ͘͠
    • هࣄͷ݅਺͕਺ेສ݅͋Γ͕͔͔࣌ؒΔ͠ɺࣦഊ͢Δͱ౤ೖ͠௚͠ͳͷ
    Ͱਏ͔ͬͨ

    View Slide

  46. ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ
    • QA (Quality Assurance) ͷ࣮ࢪ
    • ΠϯςάϨʔγϣϯςετ ΋݉Ͷͯ iOS, Android ΤϯδχΞɺαʔόʔαΠ
    υΤϯδχΞɺσΟϨΫλʔɺ෦௕ͷશһ͕ू݁ͯ͠ɺ࣮ࡍʹεϚϗΛ৮Δɻ
    ͜͜Ͱग़ͨόά΍ػೳͷ࣮૷ʹ͍ͭͯͷϑΟʔυόοΫΛड͚ͯ
    ௐ੔Λ͍ͯ͘͠

    View Slide

  47. ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ
    • ෛՙςετͷ࣮ࢪ
    • ΠϯϑϥΤϯδχΞʹґཔΛ͠ɺ Gatling Λ༻͍ͯෛՙςετͷ࣮ࢪΛߦͬ
    ͨɻ

    View Slide

  48. ࠓޙͷ՝୊

    View Slide

  49. ࠓޙͷ՝୊
    • ੵΈ࢒ͨ͠՝୊͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰ͸ͦΕΛվम͍ͯ͘͠
    • R&DνʔϜ͸࠷ۙ৽ઃ͞ΕͨνʔϜͰ͢ɻ
    • ݕࡧγεςϜͷϝϯςφϯε΍ํ޲ੑɺػցֶश etc Λѻ͏ઐ໳ͷνʔϜ
    Ͱ͢ɻ
    • ҙ֎ͱݕࡧ͕࢖ΘΕ͍ͯͨ໰୊
    • ҙ֎ͱΞϓϦଆͰݕࡧ͕࢖ΘΕ͍ͯͨ໰୊
    • ߏ੒ͷݟ௚͠ɺAPIͷݟ௚͠ͳͲ
    • ࣙॻ໰୊
    • ࣙॻʹొ࿥͢ΔϫʔυΛ୭͕ొ࿥͢Δͷ͔ͱ͍͏՝୊͕͋Δ
    • ͜Ε͕Ұ൪ͭΒ͍
    • Πϯϑϥͷߏ੒Λվળ͢Δʢେ୩͞ΜʹΑΔࢦఠ͕͋ͬͨʣ
    • ϚελʔϊʔυΛશ໘ʹग़͍ͯ͠ΔͷͰޙΖʹͳΔΑ͏ʹ͍࣋ͬͯ͘

    View Slide

  50. ࠓޙͷ՝୊
    • ੵΈ࢒ͨ͠՝୊͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰ͸ͦΕΛվम͍ͯ͘͠
    • ݕࡧਫ਼౓ͷ޲্
    • Ϣʔβʔ͝ͱʹ͓͚Δ܎਺Λ࢖ͬͯϢʔβʔʹରͯ͠ద੾ͳݕࡧ݁ՌΛฦ
    ͢
    • ͨͱ͑͹ɺϢʔβʔ͕ొ࿥͍ͯ͠ΔήʔϜͷ༏ઌ౓ΛߴΊΔͳͲ
    • αδΣετػೳͷ࣮૷
    • Α͘ݕࡧ͞ΕΔΩʔϫʔυͳͲΛαδΣετͰ͖ΔΑ͏ͳ࢓૊Έ
    • ଞϓϩδΣΫτ΁ͷల։
    • ΞϓϦʹཹ·Βͣ޿͍͚͛ͯΔΑ͏ʹ͢Δ
    • ͦͷͨΊɺιʔείʔυͷ෼཭Λߦ͏ඞཁ͕͋ͬͨΓ͢ΔͷͰ΍͍ͬͯ͘
    • etc…

    View Slide

  51. ༨ஊ

    View Slide

  52. ϦϦʔεͨ͋͠ͱ

    View Slide

  53. ϦϦʔεͨ͋͠ͱ
    ৼΓฦΔͱ։ൃظؒ 1.5 ϲ݄΄ͲͰ͜Ε͚ͩͷίϛοτΛͯ͠͠·ͬͨ

    View Slide

  54. ϦϦʔεͨ͋͠ͱ
    ։ൃʹܞΘͬͨਓͰɺৼΓฦΓΛߦͬͨ

    View Slide

  55. ϦϦʔεͨ͋͠ͱ
    χΫΞβϒͰম೑৯΂ͨ

    View Slide

  56. ϦϦʔεͨ͋͠ͱ
    GameWith Tech Blog Ͱॻ͍ͯΈͨɻ͸ͯͿ͍ͬͺ͍͍ͭͯͯخ͍͠
    https://tech.gamewith.co.jp/entry/2018/09/21/122154

    View Slide

  57. ϦϦʔεͨ͋͠ͱ
    େ୩͞Μ͔ΒϦϓϥΠΛ΋Β͑ͨ

    View Slide

  58. ͦΕͰ΋ɺ͍Ζ͍Ζ໰୊ʹ௚໘ͨ͠

    View Slide

  59. ௚໘ͨ͠໰୊
    •ϦϦʔεͨ͋͠ͱʹ͍͔ͭ͘όά͕ग़͖ͯͨ໰୊
    •GameWith ຊମαΠτͷରԠ͕૿͑ͨ
    •໘઀ͷԠื͕ଟ͍࣌ظʹॏͳͬͯɺ໘઀ϥογϡ໰୊
    •MTG͕ଟ͘ͳͬͨ໰୊
    •ϦϦʔεऴΘͬͨ͋ͱʹΞαΠϯͨ͢͠΂ͯͷλεΫͷܹࢗ
    ͕෺଍Γͳ͍ͱײ͡Δ໰୊

    View Slide

  60. ͦΕͰ΋ͳΜͱ͔ϦϦʔεͰ͖ͨͷͰ
    ΊͰͨ͠ΊͰͨ͠

    View Slide

  61. ൃද͸Ҏ্Ͱ͢

    View Slide

  62. THANK YOU

    View Slide