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
12k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Elasticsearch 勉強会 2019 「GameWithで検索システムが使われるまで」
memory
PRO
February 20, 2019
More Decks by memory
See All by memory
pnl で簡易的に作る PHP ネイティブアプリケーション
m3m0r7
PRO
0
50
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
1
1.1k
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
480
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
240
AI 時代だからこそ学ぶべき PHP の基礎
m3m0r7
PRO
7
2.5k
JVM の仕組みを理解して PHP で実装してみよう
m3m0r7
PRO
1
640
コードゴルファー道
m3m0r7
PRO
0
660
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
550
事業観点から見る技術的負債の返済
m3m0r7
PRO
4
1.3k
Other Decks in Programming
See All in Programming
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
110
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
220
テーブルをDELETEした
yuzneri
0
140
AIが無かった頃の素敵な出会いの話
codmoninc
1
410
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
140
Go 1.27 における memory allocation の高速化
andpad
0
160
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
yield再入門 #phpcon
o0h
PRO
0
1k
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
150
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
680
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Speed Design
sergeychernyshev
33
2k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Cost Of JavaScript in 2023
addyosmani
55
10k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
290
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Odyssey Design
rkendrick25
PRO
2
750
Darren the Foodie - Storyboard
khoart
PRO
3
3.6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
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