Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elasticsearch 勉強会 2019 「GameWithで検索システムが使われるまで」
Search
memory
PRO
February 20, 2019
Programming
1
11k
Elasticsearch 勉強会 2019 「GameWithで検索システムが使われるまで」
memory
PRO
February 20, 2019
Tweet
Share
More Decks by memory
See All by memory
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
3
210
事業観点から見る技術的負債の返済
memory1994
PRO
4
1k
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
210
PHP でアセンブリっぽく書く技術
memory1994
PRO
1
130
How to implement a RubyVM with PHP?
memory1994
PRO
3
2.6k
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
8
2.6k
RubyVM を PHP で実装する 〜Hello World を出力するまで〜
memory1994
PRO
1
790
令和最新版 PHP メモリ管理術
memory1994
PRO
7
4.2k
技術的負債が生まれる背景を理解して,アーリーからレイター向けの根本的なアプローチを考える
memory1994
PRO
23
9.2k
Other Decks in Programming
See All in Programming
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.5k
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
160
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
260
5分で理解する SOLID 原則 #phpcon_nagoya
shogogg
1
300
ナレッジイネイブリングにAIを活用してみる ゆるSRE勉強会 #9
nealle
0
150
もう僕は OpenAPI を書きたくない
sgash708
5
1.9k
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
150
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
3
460
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
54
19k
Unity Android XR入門
sakutama_11
0
180
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
140
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
670
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
47
7.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Code Reviewing Like a Champion
maltzj
521
39k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
We Have a Design System, Now What?
morganepeng
51
7.4k
BBQ
matthewcrist
87
9.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
Transcript
GameWithͰݕࡧγεςϜ͕ΘΕΔ·Ͱ Elasticsearchษڧձ 2019/02/20 αʔϏε։ൃ෦ R&DνʔϜ ΊΓʔ(@m3m0r7)
Έͳ͞ΜɺHello Worldʂ
ͩΕʁ ΊΓʔ(@m3m0r7) Ͱ͢ɻ ը૾͏ͪͷϋϜελʔͷ Lily ͪΌΜͰ͢ɻ ౦ژͷຊʹ͋Δ גࣜձࣾ GameWith ͱ͍͏
ձࣾͰಇ͍ͯ·͢ɻ
ͱ͜ΖͰɺΈͳ͞Μ GameWith ͝ଘͰ͔͢ʁ
GameWith ʹ͍ͭͯ
GameWith ʹ͍ͭͯ ήʔϜ߈ུʮGameWithʯͰ͕͢ɺ ࣮ΣϒαΠτҎ֎ʹΞϓϦ͕͋Γ·͢
GameWith ʹ͍ͭͯ ήʔϜ߈ུʮGameWithʯͰ͕͢ɺ ࣮ΣϒαΠτҎ֎ʹΞϓϦ͕͋Γ·͢
ࠓ͜͜ͷݕࡧػೳʹ͍͓ͭͯ͠·͢
ॴ
ॴ
͜ͷืू͔ΒݕࡧγεςϜͷ։ൃ͕࢝·Δ
ݕࡧγεςϜͷ։ൃͰҙࣝͨ͜͠ͱ
θϩϕʔε͔Βͷ։ൃͰҙࣝͨ͜͠ͱ • ҙࣝͨ͜͠ͱ5 • ᶃ ୭Ͱ։ൃͰ͖ΔΑ͏ʹ͢ΔϝϯλϦςΟ • ᶄ ৽͍͜͠ͱʹઓ͢ΔϝϯλϦςΟ •
ᶅ ࠳͚ͳ͍ϝϯλϦςΟ • ᶆ ਏ͍ঢ়گΛָ͠ΉϝϯλϦςΟ • ᶇ ۀ͠ͳ͍ͧͱ͍͏ڧ͍ϝϯλϦςΟ
νʔϜߏ
νʔϜߏ • ݕࡧγεςϜࣗମͷνʔϜߏ4໊ମ੍ • αʔόʔαΠυΤϯδχΞ × 1 • GameWith ͷΣϒ໘ͷ։ൃվम݉
• ΠϯϑϥΤϯδχΞ × 1 • ଞͷΠϯϑϥ໘ͷλεΫ݉ • σΟϨΫλʔ × 1 • GameWith ͷΣϒ໘ͷσΟϨΫγϣϯ݉ • ίʔυϨϏϡϫʔ × 1 • ෦ • ଞʹiOS, AndroidΤϯδχΞ
༨ஊ
ϓϩδΣΫτ։࢝࣌ࢲͱ෦͚ͩ
ߟ͑ͳ͍͜ͱʹ͠Α͏
εέδϡʔϧ
9݄Ϛετ
None
ਖ਼ϦιʔεΓͳ͍
ͦΕͰΓ͖Δͧ
ٕज़બఆ
ٕज़બఆ • ։ൃڥDockerͰߏͨ͠ • DockerΛ͏͜ͱʹΑΓɺԿ͕ڥʹ͋Δͷ͔໌֬ʹΘ͔ΔΑ͏ʹͳͬͨ • GameWith Vagrant Λ͏෩ை͕͋ΓɺͲ͏͍ͬͨϛυϧΣΞ͕͋
Δ͔ɺͲ͏͍͏ߏʹͳ͍ͬͯΔͷ͔Ѳͮ͠Β͔ͬͨ • ։ൃڥͱϓϩμΫγϣϯڥͰඞཁͳڥͷࠩҟΛແ͔ͨͬͨ͘͠ • ϓϩμΫγϣϯڥʹ͋Δ͕ɺ։ൃڥʹͳ͍ɺͱ͍͏ঢ়ଶΛ࡞Γ ͨ͘ͳ͔ͬͨ • ࣾͰDockerΛϓϩμΫγϣϯʹར༻͢Δͷ͜ͷϓϩδΣΫτ͕ॳΊͯ • ৽͍͠ઓΛ͢Δ͜ͱ͍͍͜ͱɻ৽͍͜͠ͱʹઓΛͨ͠ͱ͍͏લྫ Λ࡞ΓपΓͷϝϯόʔɺࣗΒਐΜͰઓ͍ͯ͘͠෩ʹ͍͖͔ͯͨͬ͠ ͨ
ٕज़બఆ • Elasticsearch ͱ PHP + Laravel Λࠓճٕज़બఆͨ͠ • GameWith
AWS Λ༻͍ͯ͠Δ͕ɺAWS Elasticsearch ServiceΘͣAWS EC2 ͱ Docker ্ʹElasticsearchΛཱͯΔ͜ͱʹɻ • GameWith ήʔϜ߈ུใΛऔΓѻ͏ಛੑ͔Βݻ༗໊ࢺଟࣙ͘ॻͷ ͕ݒ೦͞Εͨɻ • ࣙॻ Sudachi Λ༻ • ৽ͨͳࢼΈΛ͔ͨͬͨ͠ • ϊϦɺදهਖ਼نԽͯ
ٕज़બఆ • Elasticsearch ͱ PHP + Laravel Λࠓճٕज़બఆͨ͠ • Elasticsearchຊମͱͷ௨৴PHPΛٕज़બఆͨ͠
• GameWithPHPΛϝΠϯݴޠͱͯ͠ѻ͍ͬͯΔձࣾ • ຊ৽ͨͳઓͱ͍͏ϚΠϯυͰ Go ʹ͠Α͏ͱࢥ͕ͬͨɺelasticެࣜ ͷϥΠϒϥϦ͕࣌ͳ͔ͬͨɻ • PHPͰ͋Εɺelasticެ͔ࣜΒϥΠϒϥϦ͕৴͞Ε͍ͯΔ • ͨͩɺࠓճͷݕࡧγεςϜͰ PHP ͷGuzzle ΛͬͯεΫϥονͰ ࡞ͬͨɻ
Πϯϑϥߏ
Πϯϑϥߏ ※μογϡϘʔυͱGameWithͷϥΠλʔ͕༻͢Δཧը໘ͷ͜ͱͰ͢
Πϯϑϥߏ • ͳͥ͜ͷߏʹ͠Α͏ͱͨ͠ͷ͔ • શจݕࡧΤϯδϯΞϓϦ͔ΒࢀরɺμογϡϘʔυ͔Βॻ͖ࠐΈ͕ߦ ΘΕΔɻ • ήʔϜͷ߈ུهࣄසൟʹߋ৽͞ΕΔͨΊɺߋ৽ใআใΛΩϡʔ Ͱॲཧ͔ͨͬͨ͠ͷͰɺAmazon SQSΛՃ͑ͨ
• ElasticsarchͷԽͷͨΊσʔλϊʔυ͕2Ҏ্ඞཁͩͬͨ • ࠓճͷϓϩμΫτͰͲΕ͚ͩͷΞΫηε͕͋Δ͔ఆͰ͔͠ग़ͤͳ͔ͬ ͕ͨ1ͩͱϊʔυ͕յΕͨࡍͷରॲ͕Ͱ͖ͳͦ͞͏Ͱ͋ΔͨΊ
Πϯϑϥߏ • ࣮ࡍͷߏ
ࣾʹݟ͕ͳ࣌͘ ͜ͷΠϯϑϥߏ͕ݶքͩͬͨ
ϖʔδωʔγϣϯ
ϖʔδωʔγϣϯ • ϖʔδωʔγϣϯΛͲ͏͠Α͏͔໎ͬͨ • ࠷ॳIDϕʔε͔ɺϕʔεͰͷϖʔδωʔγϣϯΛߟ͍͑ͯͨ • OFFSETϕʔεͰߟ͍͑ͯͳ͔ͬͨ • GameWith ͷಛੑ্ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞ΕΔ͜ͱ͕ݒ೦͞ΕΔ
• ಛʹήʔϜͷΠϕϯτ։࢝࣌ʹݕࡧγεςϜͷτϥϑΟοΫ͕૿େ͢Δ ͜ͱ͕ఆ͞Εͨ • ·ͨͦΕͱಉ࣌ʹΠϕϯτͷใΛϦΞϧλΠϜͰߋ৽͍ͯͨ͘͠Ίɺ OFFSETϕʔεͩͱ1݅ͱ2݅ʹಉ͡ใ͕ग़ݱ͢ΔՄೳੑ͕͋ͬͨͨ Ίɺࠓճର֎ͱͨ͠ɻ
໎ͬͨ݁Ռ
໎ͬͨ݁Ռ
None
͜Ε
ϖʔδωʔγϣϯ • ϖʔδωʔγϣϯ Elasticsearch ͷ Scroll Λ͏͜ͱʹ • ͜ͷػೳΛ͑ɺϦΞϧλΠϜʹهࣄ͕ߋ৽͞Εͯେৎͦ͏ •
ϢʔβʔମݧΛଛͳΘͣʹݕࡧ݁ՌΛදࣔͰ͖ͦ͏
ൃੜ
ൃੜ • ݕࡧ݁Ռ͕ݕࡧΛ͢Δͨͼʹҟͳͬͨ • ࠷ॳݪҼ͕Α͘Θ͔Βͳ͔ͬͨ • Α͘Α͘ௐΔͱ AWS ͷ Internal
Elastic Load Balancing Ͱෛՙࢄͤ͞ ͍ͯΔ͜ͱʹؾ͍ͮͨ • Elasticsearch ͷ Scroll ͕ฦ͕͢ҟͳΔͷͨΓલͩͬͨ AWS ͷ Sticky Session Λͬͯϖʔδωʔγϣϯ͢ΔΠϯελϯεΛಉ͡ ରʹ͢ΔΑ͏ʹͨ͠
ൃੜ ϔομ͔ΒAWS ELBΛऔಘ͢Δ ηογϣϯใͱͯ͠อ࣋͞Ε͍ͯΕ༻͢Δ
ݕࡧ݁Ռ͕ਖ਼ৗʹ
ٕज़બఆ
ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • ϓϩμΫγϣϯڥΛߏங • QA (Quality Assurance) Λ࣮ࢪ͢ΔͨΊʹϓϩμΫγϣϯڥͷߏஙΛ͢Δඞ ཁ͕͋ͬͨ •
iOS, AndroidΤϯδχΞɺσΟϨΫλʔ͔Β࣮ࡍͷσʔλΛݟͯ֬ೝΛ͠ ͍ͨཁʹ͑ΔͨΊ • ϓϩμΫγϣϯڥͷ Elasticsearch ʹهࣄΛೖ͍ͯ͘͠ • هࣄͷ͕݅ेສ݅͋Γ͕͔͔࣌ؒΔ͠ɺࣦഊ͢Δͱೖ͠͠ͳͷ Ͱਏ͔ͬͨ
ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • QA (Quality Assurance) ͷ࣮ࢪ • ΠϯςάϨʔγϣϯςετ ݉Ͷͯ iOS,
Android ΤϯδχΞɺαʔόʔαΠ υΤϯδχΞɺσΟϨΫλʔɺ෦ͷશһ͕ू݁ͯ͠ɺ࣮ࡍʹεϚϗΛ৮Δɻ ͜͜Ͱग़ͨόάػೳͷ࣮ʹ͍ͭͯͷϑΟʔυόοΫΛड͚ͯ ௐΛ͍ͯ͘͠
ϓϩμΫγϣϯʹϦϦʔε͢Δ·Ͱ • ෛՙςετͷ࣮ࢪ • ΠϯϑϥΤϯδχΞʹґཔΛ͠ɺ Gatling Λ༻͍ͯෛՙςετͷ࣮ࢪΛߦͬ ͨɻ
ࠓޙͷ՝
ࠓޙͷ՝ • ੵΈͨ͠՝͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰͦΕΛվम͍ͯ͘͠ • R&DνʔϜ࠷ۙ৽ઃ͞ΕͨνʔϜͰ͢ɻ • ݕࡧγεςϜͷϝϯςφϯεํੑɺػցֶश etc Λѻ͏ઐͷνʔϜ Ͱ͢ɻ
• ҙ֎ͱݕࡧ͕ΘΕ͍ͯͨ • ҙ֎ͱΞϓϦଆͰݕࡧ͕ΘΕ͍ͯͨ • ߏͷݟ͠ɺAPIͷݟ͠ͳͲ • ࣙॻ • ࣙॻʹొ͢ΔϫʔυΛ୭͕ొ͢Δͷ͔ͱ͍͏՝͕͋Δ • ͜Ε͕Ұ൪ͭΒ͍ • ΠϯϑϥͷߏΛվળ͢Δʢେ୩͞ΜʹΑΔࢦఠ͕͋ͬͨʣ • ϚελʔϊʔυΛશ໘ʹग़͍ͯ͠ΔͷͰޙΖʹͳΔΑ͏ʹ͍࣋ͬͯ͘
ࠓޙͷ՝ • ੵΈͨ͠՝͕͍͔ͭ͋͘ΔͷͰR&DνʔϜͰͦΕΛվम͍ͯ͘͠ • ݕࡧਫ਼ͷ্ • Ϣʔβʔ͝ͱʹ͓͚ΔΛͬͯϢʔβʔʹରͯ͠దͳݕࡧ݁ՌΛฦ ͢ • ͨͱ͑ɺϢʔβʔ͕ొ͍ͯ͠ΔήʔϜͷ༏ઌΛߴΊΔͳͲ
• αδΣετػೳͷ࣮ • Α͘ݕࡧ͞ΕΔΩʔϫʔυͳͲΛαδΣετͰ͖ΔΑ͏ͳΈ • ଞϓϩδΣΫτͷల։ • ΞϓϦʹཹ·Β͍͚ͣ͛ͯΔΑ͏ʹ͢Δ • ͦͷͨΊɺιʔείʔυͷΛߦ͏ඞཁ͕͋ͬͨΓ͢ΔͷͰ͍ͬͯ͘ • etc…
༨ஊ
ϦϦʔεͨ͋͠ͱ
ϦϦʔεͨ͋͠ͱ ৼΓฦΔͱ։ൃظؒ 1.5 ϲ݄΄ͲͰ͜Ε͚ͩͷίϛοτΛͯ͠͠·ͬͨ
ϦϦʔεͨ͋͠ͱ ։ൃʹܞΘͬͨਓͰɺৼΓฦΓΛߦͬͨ
ϦϦʔεͨ͋͠ͱ χΫΞβϒͰম৯ͨ
ϦϦʔεͨ͋͠ͱ GameWith Tech Blog Ͱॻ͍ͯΈͨɻͯͿ͍ͬͺ͍͍ͭͯͯخ͍͠ https://tech.gamewith.co.jp/entry/2018/09/21/122154
ϦϦʔεͨ͋͠ͱ େ୩͞Μ͔ΒϦϓϥΠΛΒ͑ͨ
ͦΕͰɺ͍Ζ͍Ζʹ໘ͨ͠
໘ͨ͠ •ϦϦʔεͨ͋͠ͱʹ͍͔ͭ͘όά͕ग़͖ͯͨ •GameWith ຊମαΠτͷରԠ͕૿͑ͨ •໘ͷԠื͕ଟ͍࣌ظʹॏͳͬͯɺ໘ϥογϡ •MTG͕ଟ͘ͳͬͨ •ϦϦʔεऴΘͬͨ͋ͱʹΞαΠϯͨͯ͢͠ͷλεΫͷܹ ͕Γͳ͍ͱײ͡Δ
ͦΕͰͳΜͱ͔ϦϦʔεͰ͖ͨͷͰ ΊͰͨ͠ΊͰͨ͠
ൃදҎ্Ͱ͢
THANK YOU