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
980
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
kotlinxライブラリの歩き方 〜 Kotlin公式エコシステムを使いこなす〜
jsoizo
1
55
はじめて関数型言語の機能に触れるエンジニア向けの学び方/教え方 / how-to-learn-or-teach-for-fp-beginner
jsoizo
5
1.1k
よくつかっているIterableの自作extensionを紹介します
jsoizo
0
87
“エンジニア35才定年説に挑戦する” 開発チームのマネジメント
jsoizo
41
16k
drone.ioを使って docker build & push自動化
jsoizo
0
2.5k
Other Decks in Programming
See All in Programming
CI_CD「健康診断」のススメ。現場でのボトルネック特定から、健康診断を通じた組織的な改善手法
teamlab
PRO
0
200
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3.2k
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
190
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
400
オープンソースソフトウェアへの解像度🔬
utam0k
11
2.4k
開発生産性を上げるための生成AI活用術
starfish719
3
380
CSC305 Lecture 05
javiergs
PRO
0
210
クラシルを支える技術と組織
rakutek
0
200
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
4.8k
CSC305 Lecture 04
javiergs
PRO
0
260
育てるアーキテクチャ:戦い抜くPythonマイクロサービスの設計と進化戦略
fujidomoe
1
170
Devoxx BE - Local Development in the AI Era
kdubois
0
120
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
Automating Front-end Workflow
addyosmani
1371
200k
Embracing the Ebb and Flow
colly
88
4.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
The Cult of Friendly URLs
andyhume
79
6.6k
Documentation Writing (for coders)
carmenintech
75
5k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
620
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
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/