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
930
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
60
“エンジニア35才定年説に挑戦する” 開発チームのマネジメント
jsoizo
41
16k
drone.ioを使って docker build & push自動化
jsoizo
0
2.4k
Other Decks in Programming
See All in Programming
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
230
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
340
Jakarta EE meets AI
ivargrimstad
0
640
ヤプリ新卒SREの オンボーディング
masaki12
0
130
Quine, Polyglot, 良いコード
qnighy
4
650
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
220
みんなでプロポーザルを書いてみた
yuriko1211
0
280
Better Code Design in PHP
afilina
PRO
0
130
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
1.8k
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
1
210
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Being A Developer After 40
akosma
87
590k
Code Reviewing Like a Champion
maltzj
520
39k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Documentation Writing (for coders)
carmenintech
65
4.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Practical Orchestrator
shlominoach
186
10k
Building Applications with DynamoDB
mza
90
6.1k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
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/