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
950
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
よくつかっているIterableの自作extensionを紹介します
jsoizo
0
65
“エンジニア35才定年説に挑戦する” 開発チームのマネジメント
jsoizo
41
16k
drone.ioを使って docker build & push自動化
jsoizo
0
2.5k
Other Decks in Programming
See All in Programming
AIコードエディタの基盤となるLLMのFlutter性能評価
alquist4121
0
190
Do Dumb Things
mitsuhiko
0
410
Devin入門と最近のアップデートから見るDevinの進化 / Introduction to Devin and the Evolution of Devin as Seen in Recent Update
rkaga
9
4.5k
Bedrock×MCPで社内ブログ執筆文化を育てたい!
har1101
6
600
自分のために作ったアプリが、グローバルに使われるまで / Indie App Development Lunch LT
pixyzehn
1
150
Building a macOS screen saver with Kotlin (Android Makers 2025)
zsmb
1
140
Django for Data Science (Boston Python Meetup, March 2025)
wsvincent
0
310
アーキテクトと美学 / Architecture and Aesthetics
nrslib
12
3.3k
Develop Faster With FrankenPHP
dunglas
2
3.2k
AWS で実現する安全な AI エージェントの作り方 〜 Bedrock Engineer の実装例を添えて 〜 / how-to-build-secure-ai-agents
gawa
8
650
リアルタイムレイトレーシング + ニューラルレンダリング簡単紹介 / Real-Time Ray Tracing & Neural Rendering: A Quick Introduction (2025)
shocker_0x15
1
280
Devinのメモリ活用の学びを自社サービスにどう組み込むか?
itarutomy
0
2k
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.3k
Thoughts on Productivity
jonyablonski
69
4.6k
Why Our Code Smells
bkeepers
PRO
336
57k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
A better future with KSS
kneath
239
17k
Rails Girls Zürich Keynote
gr2m
94
13k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
510
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Embracing the Ebb and Flow
colly
85
4.6k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Docker and Python
trallard
44
3.3k
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/