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
HARD THINGS in Ad-Tech Engineering
Search
jsoizo
April 25, 2017
Programming
1
970
HARD THINGS in Ad-Tech Engineering
Apr 25, 2017 /
Speee Cafe Meetup #06
の資料です。
jsoizo
April 25, 2017
Tweet
Share
More Decks by jsoizo
See All by jsoizo
はじめて関数型言語の機能に触れるエンジニア向けの学び方/教え方 / how-to-learn-or-teach-for-fp-beginner
jsoizo
5
1k
よくつかっているIterableの自作extensionを紹介します
jsoizo
0
78
“エンジニア35才定年説に挑戦する” 開発チームのマネジメント
jsoizo
41
16k
drone.ioを使って docker build & push自動化
jsoizo
0
2.5k
Other Decks in Programming
See All in Programming
MCP連携で加速するAI駆動開発/mcp integration accelerates ai-driven-development
bpstudy
0
250
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
370
Advanced Micro Frontends: Multi Version/ Framework Scenarios
manfredsteyer
PRO
0
150
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.5k
[Codecon - 2025] Como não odiar seus testes
camilacampos
0
100
それ CLI フレームワークがなくてもできるよ / Building CLI Tools Without Frameworks
orgachem
PRO
17
3.7k
抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-for-Thinking
shin1x1
1
930
Go製CLIツールをnpmで配布するには
syumai
2
1.1k
Google I/O Extended Incheon 2025 ~ What's new in Android development tools
pluu
1
220
SQLアンチパターン第2版 データベースプログラミングで陥りがちな失敗とその対策 / Intro to SQL Antipatterns 2nd
twada
PRO
36
11k
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
170
GitHub Copilotの全体像と活用のヒント AI駆動開発の最初の一歩
74th
6
1.7k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.4k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
Documentation Writing (for coders)
carmenintech
73
5k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Fireside Chat
paigeccino
38
3.6k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
540
Scaling GitHub
holman
461
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Transcript
HARD THINGS in Ad-Tech Engineering Apr 25, 2017 / Speee
Cafe Meetup #06 @jsoizo
whoami • ໊લ : @jsoizo / Jun Sakamoto • ݴޠ
: JavaScriptͱScalaΛগʑ • ॴଐ : • ׂ : ৽نΞυϓϩμΫτͷProduct Manager • “Project” Manager͔ΒͷసνϟϨϯδத • લ৬͔Β͑ͯΞυςΫྺ6
࣭ ΞυςΫܦݧऀͷํ? ೖ/ඇܦݧऀͷํ?
ຊͷ͓
None
ΞυςΫΤϯδχΞత ࠷HARDͳTHINGSͱ?
৴ো
γεςϜͱͯ͠ɺ৫ͱͯ͠ ͲͷΑ͏ʹཱ͔͔ͪͬͨ
ΞυςΫͱো • ࠂ৴γεςϜɺओʹҎԼͷཁ݅Λຬͨ͢ඞཁ͕͋Δ • ࠂओ͔Β༬͔ͬͨ༧ࢉΛ࠷దʹ͏ • ৴ઌͷϝσΟΞʹରͯ͠ϢʔβମݧΛམͱͣ͞ऩӹΛग़͢ • Ϣʔβ͕ྑ͍ίϯςϯπ(≒ࠂओ)ʹग़ձ͑Δ •
γεςϜ͕ɺ • ਖ਼͘͠ಈ͍͍ͯΕશһ͕ϋοϐʔ • ো͕͋Δͱશһ͕ͭΒ͍
ϋΠύϑΥʔϚϯε͔ͭ Կ͕͋ͬͯࢮͳͳ͍ (≒Կ͔͋ͬͯܰ) γεςϜߏஙͷඞཁੑ
γεςϜશମ૾
γεςϜશମ૾
γεςϜશମ૾
࣮ࡍʹ͋ͬͨ͜ͱ ͋Δౙͷͷனɺϥϯνʹߦ͜͏ͱͨ͠ॠؒɺ λʔήςΟϯάࠂ৴ͷফԽֹۚΛ ཧ͍ͯͨ͠KVSΫϥελ͕ ※ ϊʔυͰͳ͘ɺΫϥελͰ͢ ʊਓਓਓਓਓਓʊ ʼɹಥવͷࢮɹʻ ʉY^Y^Y^Y^Yʉ
࣮ࡍʹ͋ͬͨ͜ͱ ͦͷʹ͍ͨશһͰϊʔυͷ࠶ىಈΛ܁Γฦͭͭ͠ɺ ཪͰΠϯϑϥΤϯδχΞ͕ௐࠪ ىಈͯ͠ىಈͯ͠ଈࢮ͢ΔΫϥελ ݁ہ࣌τϥϑΟοΫͷຆͲΛΊ͍ͯͨαΠτɹ ͔ΒλάΛണ͕ͯ͠Β͍ఆରԠ → xxͿΜͷച্͕·Δ·Δਧ͖ඈΜͩ
࠶ൃࢭͷͨΊʹͨ͜͠ͱ 1. EBS(Elastic Block Store) 2. KVSΫϥελͷґଘΛ(෦తʹ)ΊΔ 3.͋ΒΏΔI/OΛۃྗඇಉظʹ͢Δ 4. ৴αʔό͕མͪͨ߹ʹnginx,
λά͕र͏ 5. ͋ΒΏΔࢹ, ϩάམͱ͠ΛՃ
1. EBS(Elastic Block Store) 2. KVSΫϥελͷґଘΛ(෦తʹ)ΊΔ 3.͋ΒΏΔI/OΛۃྗඇಉظʹ͢Δ 4. ৴αʔό͕མͪͨ߹ʹnginx, λά͕र͏
5. ͋ΒΏΔࢹ, ϩάམͱ͠ΛՃ ࠶ൃࢭͷͨΊʹͨ͜͠ͱ
1. EBS
1. EBS SSDͷRead/WriteಛԽͨ͠KVSΛར༻͍ͯ͠Δ͕ɺ༷ͱͯ͠ • ϑΝΠϧγεςϜܦ༝Ͱͳ͘SSDʹॻ͖ࠐΉ • ֤ϊʔυͷϝϞϦ্ʹΠϯσοΫε(=KeyʹରԠͨ͠Value͕Ͳͷϊʔ υͷͲͷσΟεΫͷͲ͜ʹॻ͔Ε͍ͯΔ͔ͷΞυϨεใ)Λ࣋ͭ • ΫϥελϚωδϝϯτͷػೳඋ͍͑ͯΔͷͰཧָ
• ͨͩ͠ɺ֤ϊʔυʹରͯ͠heartbeatࢮ׆ࢹ͢Δ͕ɺ֤ϊʔυ͕ ͍ͯ͠ΔσΟεΫʹରͯ͠(΄΅)Կ͠ͳ͍
1. EBS EBS = Elastic Block Store • EC2ʹϚϯτՄ •
ߴ͍Մ༻ੑͱٱੑ • ωοτϫʔΫܦ༝ͰI/O • ෦తʹԽ͞Ε͍ͯΔ • EC2ىಈ࣌ʹEBS࠷దԽΦϓγϣϯΛཧతʹೖΕͳ͍ͱΠϯελϯεͱEBS͕ ཧతʹΕΔ ো࣌ʹEBSͷσΟεΫނোͰEBS͕ϑΣΠϧΦʔόʔதʹؒͬͯ͠·ͬͨ
1. EBS ΠϯελϯεετΞ(=ΤϑΣϝϥϧσΟεΫ)ʹม͑ͨɻ • Pros • Πϯελϯε͠ͷͨΊͱʹ͔͍͘ • εϧʔϓοτ͕མͪΔཁҼ͕গͳ͍ •
Cons • Πϯελϯε࠶ىಈͰشൃ • αΠζ্ݶ͋Γ • Մ༻ੑ͍
2. KVSΫϥελґଘΛΊΔ
2. KVSΫϥελґଘΛΊΔ
2. KVSΫϥελґଘΛΊΔ • 1ͭͷKVSΫϥελ • SSDʹอଘ(memcached, redisͱͷҧ͍) • ͕ɺϝϞϦʹอଘ͢ΔϓϩμΫτ૬Ԡʹ͍
• ్ओʹҎԼͷ3ͭ • ৴αʔόͷ෦ΦʔΫγϣϯ༻༧ࢉཧ • ଐੑλʔήςΟϯά x3 छྨ • ϦλʔήςΟϯά
2. KVSΫϥελґଘΛΊΔ (1) ৴αʔόͷΦʔΫγϣϯͰͷࢀরΛվળͯ͠KVSͷར༻ྔΛݮΒͨ͠ • چ • ෦ೖࡳͷΦʔΫγϣϯຖʹඞͣফԽֹۚΛࢀরͯ͠༧ࢉͱಥ߹ • ͜ͷ߹ɺKVS͕ࢮ͵ͱԿग़དྷͳ͘ͳΔ
• ৽ • ৴αʔό͕RDBMSʹ͍࣋ͬͯΔ݁Ռ͔Βܭࢉͨ͠ফԽֹۚΛఆظ తʹΩϟογϡ • ༧ࢉ͕ਚ͖ͦ͏ʹͳΔલ·ͰKVSΛࢀর͠ͳ͍Α͏ʹ͢Δ • KVS͕ࢮΜͰ΄ͱΜͲͷ߹ࠂ͕ฦͤΔ
2. KVSΫϥελґଘΛΊΔ (2) • αʔϏεͱͯ͠ఏڙ͍ͯ͠ΔλʔήςΟϯάख๏ओʹҎԼ2ͭ • ଐੑλʔήςΟϯά x3छ • ϦλʔήςΟϯά
• ଐੑλʔήͷ΄͏͕ѹతʹྔଟ͍(10:1͘Β͍, ച্5:1͘Β͍) • ݹ͍ߏͰ6000ສUUʹؔ͢ΔܭࢉΛόονͰߦ͍KVSʹॻ͘ • ࠷ظ8࣌ؒ͘Β͍͔͔ͬͯ͠·͍ͬͯͨ • ͣͬͱෛՙࢼݧ͠ͳ͕Β৴͍ͯ͠ΔΑ͏ͳͷ
2. KVSΫϥελґଘΛΊΔ (2) ଐੑλʔήςΟϯάʹؔ͠ ຊʹඞཁͩͬͨͷɺ୯ʹϢʔβIDΛΩʔͱͯ͠ɺଐ ͢ΔηάϝϯτΛฦͯ͘͠ΕΔγϯϓϧͳػೳͷΈɻߴػೳ ͳDBΫϥελΛ͏ͷएׯToo Muchɻ → ຊʹඞཁͳػೳ͚ͩΛ࣋ͬͨ
ϚΠΫϩαʔϏε(Play2)Λ࡞ͬͯϦϓϨΠεͨ͠
2. KVSΫϥελґଘΛΊΔ (2) • چߏਤ
2. KVSΫϥελґଘΛΊΔ (2) • ৽ߏਤ
2. KVSΫϥελґଘΛΊΔ (2) چߏ ৽ߏ λʔήςΟϯά ͷΈ ֎෦σʔλΛݩʹͨ͠ όονͷܭࢉ݁ՌΛ
,74ʹอଘ SFRຖʹϦΞϧλΠϜܭࢉ Ұ෦ چߏ ҆ఆੑ σΟεΫຊ͕શମʹ Өڹٴ΅͢Մೳੑ ࢮΜͰӨڹͳ͠ ,74͕ࢮΜͰӨڹ ϨΠςϯγ dNTFD NTFD ηάϝϯςʔγϣϯॲཧࠐΈ ίετ SYMBSHF ଞͷతؚΉ DYMBSHF SYMBSHF
2. KVSΫϥελґଘΛΊΔ (2) ϦΞϧλΠϜηάϝϯςʔγϣϯͷͳ͔Έ • ࣄલʹόοναʔόͰଐੑσʔλΛRocksDBͱͯ͠ ݻΊΔ • RocksDBΛWebαʔό͕ಡΈࠐΉ
• httpϦΫΤετຖʹRocksDB͔ΒϢʔβଐੑΛಡΈ ࠐΜͰηάϝϯςʔγϣϯͯ͠ฦ٫
2. KVSΫϥελґଘΛΊΔ (2) ͳͥRocksDB͔? • RocksDB : FacebookͷMySQLΤϯδϯ(MyRocks)ࠓ͖Parse ͷmongodbͷόοΫΤϯυͰར༻͞Ε͍ͯΔSSDͷWriteʹ࠷ద Խ͞ΕͨΈࠐΈ༻DB࣮ɻLevelDBͷforkɻ
• ΈࠐΈͰ, ߴʹ, େྔͳσʔλ͔ΒҾ͘ΈΛٻΊͯ • ಉ༷ʹݕ౼ͨ͠h2dbͱͷൺֱͰɺएׯύϑΥʔϚϯε͕ྑ͔ͬͨ͜ ͱɺσʔλͷswap(ଐੑσʔλͷ࣍Ξοϓσʔτ)࣌ͷύϑΥʔϚ ϯεྼԽ߹͍͕͔ͬͨ͜ͱ͔Βஅ
2. KVSΫϥελґଘΛΊΔ (2) h2dbͱͷൺֱͰ एׯɺRocksDBͷ΄͏͕ૣ͘ɺϦιʔεফඅ͕গͳ͔ͬͨ
͜͜·Ͱͷ·ͱΊ μϯ͠ͳ͍ɺμϯλΠϜΛۃྗগͳ͘͢ΔͨΊʹͲ͏͢Δ͔? • ΠϯϑϥɺϛυϧɺΞϓϦέʔγϣϯશͯγϯϓϧͳߏʹ • ͨ·ʹϨΠςϯγΛଟগ٘ਜ਼ʹͯ͠Ͱ҆ఆੑΛऔΔ • I/Oग़དྷΔݶΓඇಉظʹͯ͠ෛͷ࿈Λ͙ • EBSϋΠύϑΥʔϚϯεڥͰආ͚Δ
• શͯΛτϨʔεग़དྷΔΈΛ͑Δ • ͍͟ͱ͍͏࣌ʹϢʔβ͚ͩʹ໎Λ͔͚ͳ͍Α͏ʹ͢Δ
ͦΕ͚ͩͰOK???
No. όάʹΑΔোΛ ͍͔ʹ͙ͯ͠ͷ͔?
ཧ্ྲྀͰ͍͗ͨ ҰํͰ…
ΤϯδχΞۀͷ ࣄऀͰͳ͍ͨΊʹ ཁ݅Λਖ਼֬ʹཧղ͍͠͠
ۀࣝෆ ΤϯδχΞͷۀࣝෆΛͲ͏ิ͏͔? • جຊతʹΤϯδχΞؤு֮ͬͯ͑Α͏ελϯε • DDD(Domain Driven Design)ΛΔͱ͍͏લఏ • ॳظͷۀࣝͷֶशίετͷߴ͕͞ωοΫʹͳΔ߹
• PM(ProductManager)ͷ༁ೳྗ, ۀઃܭྗʹৼΔ • αϘΒͣʹ༷ॻΛॻ͘ମ੍
ߴ͍༁ೳྗΛ࣋ͭPM Fringe81Ͱݩʑ3PASΞφϦετͩͬͨϝϯόʔ͕PMΛΔ • ݩʑઆ໌ೳྗ͕ߴ͍ͱ͜Ζʹ • ඇΤϯδχΞ͕ͩߴ͍ٕज़ཧղྗΛ͍࣋ͬͯΔ • ͚ࣾϨϙʔτఔͳΒউखʹSQLୟ͍ͯ࡞ΕΔ ݁ՌɺΤϯδχΞ •
ػೳཁ݅ͷೝࣝζϨɺඇػೳཁ݅ͷݕ౼࿙Ε͕ݮΔ • ຊ࣭తͳ(ઃܭύϑΥʔϚϯεվળ)ʹूதͰ͖Δ
αϘΒͣʹ༷ॻΛॻ͘ମ੍ ϕϯνϟʔͰ͘͠? ͔ͳΓ༷ॻΛॻ͘จԽ(AdνʔϜಛʹ)ɻ ݹయతͳΓํΛ࣮֬ʹண࣮ʹ͜ͳ্͠ྲྀͷ ΛݮΒ͢ɻΞδϟΠϧͰجຊతʹΔ ͜ͱҰॹɻ ※ શͯͷ༷ॻtextlintΛCIͰ࣮ߦͯ͠ʹΛ υϝΠϯ༻ޠͷϒϨΛݕࠪ
→ ݁ՌISO 9001(࣭ϚωδϝϯτγεςϜ)Λऔಘͨ͠
৽͍͠νϟϨϯδ • QAνʔϜͷઃஔ : ͞ΒͳΔ࣭ͷ্ • ઃܭ/ςετͷϨϏϡʔͱ୳ࡧతςετͷ࣮ࢪ • ΤϯδχΞ͔ΒPM :
ࣄۀܥPMͷґଘΛԼ͛Δ • ओʹ৽نࣄۀํ໘Ͱൈṅ • ఆظతͳϙδγϣϯνΣϯδ : εΩϧτϥϯεϑΝʔ • ׂݻఆ͢ΔͱಛఆྖҬͷٕज़/ۀ͔͔ࣝͭ͠ͳ͍ͷΛ͙ • ۙͰཧը໘ϝϯόʔͱ৴αʔόϝϯόʔΛεϫοϓ
·ͱΊ HARD THINGS = োʹର͠ɺٕज़ͱ৫ͷ2໘͔Βཱ͔ͪͬͨ • ٕज़ • γϯϓϧ͔ͭFail͕͠ͳ͍ઃܭ •
λʔήςΟϯάج൫ΛKVSΫϥελ͔ΒWebAppʹ • ৫ • ۀࣝ + ٕज़ͷཧղྗߴ͍PMͱͷڠௐ • ݹయతͳΓํΛ࣮֬ʹண࣮ʹΔେਓελΠϧ • QAνʔϜ, ΤϯδχΞൃPMͷ৽͍͠৫ମ੍Ͱຏ͘
ँࣙ োൃੜ࣌ʹࣾ֎ͷରԠΛ͍͍ͯͨͩͨ͠Productνʔ ϜɺมΘΒͣӦۀΛଓ͚͍͍ͯͨͩͨSalesνʔϜ͕ ͋ͬͯͦ͜ɺোΛΓΔ͜ͱ͕ग़དྷ·ͨ͠ɻ ·ͨɺࠒΑΓࢁͷϑΟʔυόοΫΛ͍͍ͯͨͩͯ͠ ͍Δ͓͔͛Ͱɺ৫Λม͑ΔΞΫγϣϯ͕औΕ͍ͯΔ͜ ͱΛײँ͓ͯ͠Γ·͢ɻ͋Γ͕ͱ͏͍͟͝·͢ɻ
THANK YOU— Fringe81Ͱɺ৽͍͠ൃݟΛݩʹٿͷະདྷΛ ΒΜͱ͢ΔΤϯδχΞΛืूதͰ͢ɻ ͋ͳͨͷಘҙͳ͜ͱͰҰॹʹউෛ͠·ͤΜ͔ɻ http://www.fringe81.com/recruit/