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

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

memory
February 20, 2019

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

memory

February 20, 2019
Tweet

More Decks by memory

Other Decks in Programming

Transcript

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

    ᶅ ࠳͚ͳ͍ϝϯλϦςΟ • ᶆ ਏ͍ঢ়گΛָ͠ΉϝϯλϦςΟ • ᶇ ࢒ۀ͸͠ͳ͍ͧͱ͍͏ڧ͍ϝϯλϦςΟ
  2. νʔϜߏ੒ • ݕࡧγεςϜࣗମͷνʔϜߏ੒͸4໊ମ੍ • αʔόʔαΠυΤϯδχΞ × 1 • GameWith ͷ΢Σϒ໘ͷ։ൃ΍վम΋݉຿

    • ΠϯϑϥΤϯδχΞ × 1 • ଞͷΠϯϑϥ໘ͷλεΫ΋݉຿ • σΟϨΫλʔ × 1 • GameWith ͷ΢Σϒ໘ͷσΟϨΫγϣϯ΋݉຿ • ίʔυϨϏϡϫʔ × 1 • ෦௕ • ଞʹiOS, AndroidΤϯδχΞ
  3. ٕज़બఆ • ։ൃ؀ڥ͸DockerͰߏ੒ͨ͠ • DockerΛ࢖͏͜ͱʹΑΓɺԿ͕؀ڥʹ͋Δͷ͔໌֬ʹΘ͔ΔΑ͏ʹͳͬͨ • GameWith ͸ Vagrant Λ࢖͏෩ை͕͋ΓɺͲ͏͍ͬͨϛυϧ΢ΣΞ͕͋

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

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

    • GameWith͸PHPΛϝΠϯݴޠͱͯ͠ѻ͍ͬͯΔձࣾ • ຊ౰͸৽ͨͳ௅ઓͱ͍͏ϚΠϯυͰ Go ʹ͠Α͏ͱࢥ͕ͬͨɺelasticެࣜ ͷϥΠϒϥϦ͕౰࣌͸ͳ͔ͬͨɻ • PHPͰ͋Ε͹ɺelasticެ͔ࣜΒϥΠϒϥϦ͕഑৴͞Ε͍ͯΔ • ͨͩɺࠓճͷݕࡧγεςϜͰ͸ PHP ͷGuzzle Λ࢖ͬͯεΫϥονͰ ࡞ͬͨɻ
  6. Πϯϑϥߏ੒ • ͳͥ͜ͷߏ੒ʹ͠Α͏ͱͨ͠ͷ͔ • શจݕࡧΤϯδϯ͸ΞϓϦ͔Β͸ࢀরɺμογϡϘʔυ͔Β͸ॻ͖ࠐΈ͕ߦ ΘΕΔɻ • ήʔϜͷ߈ུهࣄ͸සൟʹߋ৽͞ΕΔͨΊɺߋ৽৘ใ΍࡟আ৘ใΛΩϡʔ Ͱॲཧ͔ͨͬͨ͠ͷͰɺAmazon SQSΛՃ͑ͨ

    • Elasticsarchͷ৑௕ԽͷͨΊσʔλϊʔυ͕2୆Ҏ্ඞཁͩͬͨ • ࠓճͷϓϩμΫτͰ͸ͲΕ͚ͩͷΞΫηε਺͕͋Δ͔࢑ఆͰ͔͠ग़ͤͳ͔ͬ ͕ͨ1୆ͩͱϊʔυ͕յΕͨࡍͷରॲ͕Ͱ͖ͳͦ͞͏Ͱ͋ΔͨΊ
  7. ϖʔδωʔγϣϯ • ϖʔδωʔγϣϯΛͲ͏͠Α͏͔໎ͬͨ • ࠷ॳ͸IDϕʔε͔ɺ೔෇ϕʔεͰͷϖʔδωʔγϣϯΛߟ͍͑ͯͨ • OFFSETϕʔεͰ͸ߟ͍͑ͯͳ͔ͬͨ • GameWith ͷಛੑ্ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞ΕΔ͜ͱ͕ݒ೦͞ΕΔ

    • ಛʹήʔϜͷΠϕϯτ։࢝࣌ʹݕࡧγεςϜ΁ͷτϥϑΟοΫ͕૿େ͢Δ ͜ͱ͕૝ఆ͞Εͨ • ·ͨͦΕͱಉ࣌ʹΠϕϯτͷ৘ใΛϦΞϧλΠϜͰߋ৽͍ͯͨ͘͠Ίɺ OFFSETϕʔεͩͱ1݅໨ͱ2݅໨ʹಉ͡৘ใ͕ग़ݱ͢ΔՄೳੑ͕͋ͬͨͨ Ίɺࠓճ͸ର৅֎ͱͨ͠ɻ
  8. ໰୊ൃੜ • ݕࡧ݁Ռ͕ݕࡧΛ͢Δͨͼʹҟͳͬͨ • ࠷ॳ͸ݪҼ͕Α͘Θ͔Βͳ͔ͬͨ • Α͘Α͘ௐ΂Δͱ AWS ͷ Internal

    Elastic Load Balancing Ͱෛՙ෼ࢄͤ͞ ͍ͯΔ͜ͱʹؾ͍ͮͨ • Elasticsearch ͷ Scroll ͕ฦ͢஋͕ҟͳΔͷ͸౰ͨΓલͩͬͨ AWS ͷ Sticky Session Λ࢖ͬͯϖʔδωʔγϣϯ͢ΔΠϯελϯεΛಉ͡ ର৅ʹ͢ΔΑ͏ʹͨ͠
  9. ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • ϓϩμΫγϣϯ؀ڥΛߏங • QA (Quality Assurance) Λ࣮ࢪ͢ΔͨΊʹϓϩμΫγϣϯ؀ڥͷߏஙΛ͢Δඞ ཁ͕͋ͬͨ •

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

    Android ΤϯδχΞɺαʔόʔαΠ υΤϯδχΞɺσΟϨΫλʔɺ෦௕ͷશһ͕ू݁ͯ͠ɺ࣮ࡍʹεϚϗΛ৮Δɻ ͜͜Ͱग़ͨόά΍ػೳͷ࣮૷ʹ͍ͭͯͷϑΟʔυόοΫΛड͚ͯ ௐ੔Λ͍ͯ͘͠
  11. ࠓޙͷ՝୊ • ੵΈ࢒ͨ͠՝୊͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰ͸ͦΕΛվम͍ͯ͘͠ • R&DνʔϜ͸࠷ۙ৽ઃ͞ΕͨνʔϜͰ͢ɻ • ݕࡧγεςϜͷϝϯςφϯε΍ํ޲ੑɺػցֶश etc Λѻ͏ઐ໳ͷνʔϜ Ͱ͢ɻ

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

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