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
910
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
58
“エンジニア35才定年説に挑戦する” 開発チームのマネジメント
jsoizo
41
16k
drone.ioを使って docker build & push自動化
jsoizo
0
2.4k
Other Decks in Programming
See All in Programming
CSC307 Lecture 11
javiergs
PRO
0
240
Webエディタライブラリ 「CodeMirror」から学ぶ Webアプリ開発のテクニック
ryosukeigarashi
0
250
CSC307 Lecture 09
javiergs
PRO
1
500
Advanced App Shrinking Techniques
cbeyls
2
150
CSC307 Lecture 12
javiergs
PRO
0
220
なぜ宣言的 UI は壊れにくいのか / Why declarative UI is less fragile
uenitty
29
13k
Cloudflare Workers x AWS Lambdaの組み合わせユースケース / Cloudflare Workers x AWS Lambda Combination Use Case
seike460
PRO
2
310
ぼっちを避けて楽しむためのアノテコノテ / Various Tips and Tricks to Avoid Loneliness and Have Fun
nrslib
3
1.7k
Introduction to GitOps
hwchiu
0
110
Polarsの成長: v0.14からv1.0までの変遷と今後の展望
zerebom
1
350
社内 LT 会を発足し、アウトプット文化を醸成させるために考えたこと・やったこと / Starting internal LT meetings and fostering an output culture
mackey0225
3
120
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
0
160
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
36
9.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
13
430
The Cost Of JavaScript in 2023
addyosmani
31
4.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
15
4.9k
Six Lessons from altMBA
skipperchong
24
3.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.8k
A Tale of Four Properties
chriscoyier
155
22k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
19k
Designing with Data
zakiwarfel
96
5k
Automating Front-end Workflow
addyosmani
1362
200k
Bash Introduction
62gerente
607
210k
Designing for Performance
lara
604
67k
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/