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

218473ff7abad0fcd72865da2b23bb5b?s=47 memory
February 20, 2019

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

218473ff7abad0fcd72865da2b23bb5b?s=128

memory

February 20, 2019
Tweet

Transcript

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

  2. Έͳ͞ΜɺHello Worldʂ

  3. ͩΕʁ Ί΋Γʔ(@m3m0r7) Ͱ͢ɻ ը૾͸͏ͪͷϋϜελʔͷ Lily ͪΌΜͰ͢ɻ ౦ژͷ࿡ຊ໦ʹ͋Δ גࣜձࣾ GameWith ͱ͍͏

    ձࣾͰಇ͍ͯ·͢ɻ
  4. ͱ͜ΖͰɺΈͳ͞Μ GameWith ͸͝ଘ஌Ͱ͔͢ʁ

  5. GameWith ʹ͍ͭͯ

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

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

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

  9. ๭೔๭ॴ

  10. ๭೔๭ॴ

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

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

  13. θϩϕʔε͔Βͷ։ൃͰҙࣝͨ͜͠ͱ • ҙࣝͨ͜͠ͱ͸5఺ • ᶃ ୭Ͱ΋։ൃͰ͖ΔΑ͏ʹ͢ΔϝϯλϦςΟ • ᶄ ৽͍͜͠ͱʹ௅ઓ͢ΔϝϯλϦςΟ •

    ᶅ ࠳͚ͳ͍ϝϯλϦςΟ • ᶆ ਏ͍ঢ়گΛָ͠ΉϝϯλϦςΟ • ᶇ ࢒ۀ͸͠ͳ͍ͧͱ͍͏ڧ͍ϝϯλϦςΟ
  14. νʔϜߏ੒

  15. νʔϜߏ੒ • ݕࡧγεςϜࣗମͷνʔϜߏ੒͸4໊ମ੍ • αʔόʔαΠυΤϯδχΞ × 1 • GameWith ͷ΢Σϒ໘ͷ։ൃ΍վम΋݉຿

    • ΠϯϑϥΤϯδχΞ × 1 • ଞͷΠϯϑϥ໘ͷλεΫ΋݉຿ • σΟϨΫλʔ × 1 • GameWith ͷ΢Σϒ໘ͷσΟϨΫγϣϯ΋݉຿ • ίʔυϨϏϡϫʔ × 1 • ෦௕ • ଞʹiOS, AndroidΤϯδχΞ
  16. ༨ஊ

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

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

  19. εέδϡʔϧ

  20. 9݄Ϛετ

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

  23. ͦΕͰ΋΍Γ͖Δͧ

  24. ٕज़બఆ

  25. ٕज़બఆ • ։ൃ؀ڥ͸DockerͰߏ੒ͨ͠ • DockerΛ࢖͏͜ͱʹΑΓɺԿ͕؀ڥʹ͋Δͷ͔໌֬ʹΘ͔ΔΑ͏ʹͳͬͨ • GameWith ͸ Vagrant Λ࢖͏෩ை͕͋ΓɺͲ͏͍ͬͨϛυϧ΢ΣΞ͕͋

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

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

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

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

  30. Πϯϑϥߏ੒ • ͳͥ͜ͷߏ੒ʹ͠Α͏ͱͨ͠ͷ͔ • શจݕࡧΤϯδϯ͸ΞϓϦ͔Β͸ࢀরɺμογϡϘʔυ͔Β͸ॻ͖ࠐΈ͕ߦ ΘΕΔɻ • ήʔϜͷ߈ུهࣄ͸සൟʹߋ৽͞ΕΔͨΊɺߋ৽৘ใ΍࡟আ৘ใΛΩϡʔ Ͱॲཧ͔ͨͬͨ͠ͷͰɺAmazon SQSΛՃ͑ͨ

    • Elasticsarchͷ৑௕ԽͷͨΊσʔλϊʔυ͕2୆Ҏ্ඞཁͩͬͨ • ࠓճͷϓϩμΫτͰ͸ͲΕ͚ͩͷΞΫηε਺͕͋Δ͔࢑ఆͰ͔͠ग़ͤͳ͔ͬ ͕ͨ1୆ͩͱϊʔυ͕յΕͨࡍͷରॲ͕Ͱ͖ͳͦ͞͏Ͱ͋ΔͨΊ
  31. Πϯϑϥߏ੒ • ࣮ࡍͷߏ੒

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

  33. ϖʔδωʔγϣϯ

  34. ϖʔδωʔγϣϯ • ϖʔδωʔγϣϯΛͲ͏͠Α͏͔໎ͬͨ • ࠷ॳ͸IDϕʔε͔ɺ೔෇ϕʔεͰͷϖʔδωʔγϣϯΛߟ͍͑ͯͨ • OFFSETϕʔεͰ͸ߟ͍͑ͯͳ͔ͬͨ • GameWith ͷಛੑ্ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞ΕΔ͜ͱ͕ݒ೦͞ΕΔ

    • ಛʹήʔϜͷΠϕϯτ։࢝࣌ʹݕࡧγεςϜ΁ͷτϥϑΟοΫ͕૿େ͢Δ ͜ͱ͕૝ఆ͞Εͨ • ·ͨͦΕͱಉ࣌ʹΠϕϯτͷ৘ใΛϦΞϧλΠϜͰߋ৽͍ͯͨ͘͠Ίɺ OFFSETϕʔεͩͱ1݅໨ͱ2݅໨ʹಉ͡৘ใ͕ग़ݱ͢ΔՄೳੑ͕͋ͬͨͨ Ίɺࠓճ͸ର৅֎ͱͨ͠ɻ
  35. ໎ͬͨ݁Ռ

  36. ໎ͬͨ݁Ռ

  37. None
  38. ͜Ε΍

  39. ϖʔδωʔγϣϯ • ϖʔδωʔγϣϯ͸ Elasticsearch ͷ Scroll Λ࢖͏͜ͱʹ • ͜ͷػೳΛ࢖͑͹ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞Εͯ΋େৎ෉ͦ͏ •

    ϢʔβʔମݧΛଛͳΘͣʹݕࡧ݁ՌΛදࣔͰ͖ͦ͏
  40. ໰୊ൃੜ

  41. ໰୊ൃੜ • ݕࡧ݁Ռ͕ݕࡧΛ͢Δͨͼʹҟͳͬͨ • ࠷ॳ͸ݪҼ͕Α͘Θ͔Βͳ͔ͬͨ • Α͘Α͘ௐ΂Δͱ AWS ͷ Internal

    Elastic Load Balancing Ͱෛՙ෼ࢄͤ͞ ͍ͯΔ͜ͱʹؾ͍ͮͨ • Elasticsearch ͷ Scroll ͕ฦ͢஋͕ҟͳΔͷ͸౰ͨΓલͩͬͨ AWS ͷ Sticky Session Λ࢖ͬͯϖʔδωʔγϣϯ͢ΔΠϯελϯεΛಉ͡ ର৅ʹ͢ΔΑ͏ʹͨ͠
  42. ໰୊ൃੜ ϔομ͔ΒAWS ELBΛऔಘ͢Δ ηογϣϯ৘ใͱͯ͠อ࣋͞Ε͍ͯΕ͹࢖༻͢Δ

  43. ݕࡧ݁Ռ͕ਖ਼ৗʹ

  44. ٕज़બఆ

  45. ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • ϓϩμΫγϣϯ؀ڥΛߏங • QA (Quality Assurance) Λ࣮ࢪ͢ΔͨΊʹϓϩμΫγϣϯ؀ڥͷߏஙΛ͢Δඞ ཁ͕͋ͬͨ •

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

    Android ΤϯδχΞɺαʔόʔαΠ υΤϯδχΞɺσΟϨΫλʔɺ෦௕ͷશһ͕ू݁ͯ͠ɺ࣮ࡍʹεϚϗΛ৮Δɻ ͜͜Ͱग़ͨόά΍ػೳͷ࣮૷ʹ͍ͭͯͷϑΟʔυόοΫΛड͚ͯ ௐ੔Λ͍ͯ͘͠
  47. ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • ෛՙςετͷ࣮ࢪ • ΠϯϑϥΤϯδχΞʹґཔΛ͠ɺ Gatling Λ༻͍ͯෛՙςετͷ࣮ࢪΛߦͬ ͨɻ

  48. ࠓޙͷ՝୊

  49. ࠓޙͷ՝୊ • ੵΈ࢒ͨ͠՝୊͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰ͸ͦΕΛվम͍ͯ͘͠ • R&DνʔϜ͸࠷ۙ৽ઃ͞ΕͨνʔϜͰ͢ɻ • ݕࡧγεςϜͷϝϯςφϯε΍ํ޲ੑɺػցֶश etc Λѻ͏ઐ໳ͷνʔϜ Ͱ͢ɻ

    • ҙ֎ͱݕࡧ͕࢖ΘΕ͍ͯͨ໰୊ • ҙ֎ͱΞϓϦଆͰݕࡧ͕࢖ΘΕ͍ͯͨ໰୊ • ߏ੒ͷݟ௚͠ɺAPIͷݟ௚͠ͳͲ • ࣙॻ໰୊ • ࣙॻʹొ࿥͢ΔϫʔυΛ୭͕ొ࿥͢Δͷ͔ͱ͍͏՝୊͕͋Δ • ͜Ε͕Ұ൪ͭΒ͍ • Πϯϑϥͷߏ੒Λվળ͢Δʢେ୩͞ΜʹΑΔࢦఠ͕͋ͬͨʣ • ϚελʔϊʔυΛશ໘ʹग़͍ͯ͠ΔͷͰޙΖʹͳΔΑ͏ʹ͍࣋ͬͯ͘
  50. ࠓޙͷ՝୊ • ੵΈ࢒ͨ͠՝୊͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰ͸ͦΕΛվम͍ͯ͘͠ • ݕࡧਫ਼౓ͷ޲্ • Ϣʔβʔ͝ͱʹ͓͚Δ܎਺Λ࢖ͬͯϢʔβʔʹରͯ͠ద੾ͳݕࡧ݁ՌΛฦ ͢ • ͨͱ͑͹ɺϢʔβʔ͕ొ࿥͍ͯ͠ΔήʔϜͷ༏ઌ౓ΛߴΊΔͳͲ

    • αδΣετػೳͷ࣮૷ • Α͘ݕࡧ͞ΕΔΩʔϫʔυͳͲΛαδΣετͰ͖ΔΑ͏ͳ࢓૊Έ • ଞϓϩδΣΫτ΁ͷల։ • ΞϓϦʹཹ·Βͣ޿͍͚͛ͯΔΑ͏ʹ͢Δ • ͦͷͨΊɺιʔείʔυͷ෼཭Λߦ͏ඞཁ͕͋ͬͨΓ͢ΔͷͰ΍͍ͬͯ͘ • etc…
  51. ༨ஊ

  52. ϦϦʔεͨ͋͠ͱ

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

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

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

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

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

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

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

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

  61. ൃද͸Ҏ্Ͱ͢

  62. THANK YOU