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
ゼロから始めた Gunosyアドサーバ開発運用記 / 2014-12-16-dots
Search
shunsukeaihara
December 16, 2014
Technology
1.2k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ゼロから始めた Gunosyアドサーバ開発運用記 / 2014-12-16-dots
地雷の話
shunsukeaihara
December 16, 2014
More Decks by shunsukeaihara
See All by shunsukeaihara
BONXを支える技術:発話区間検出(VAD)の話/Akerun & BONX Tech Talk
shunsukeaihara
4
7.8k
Goのnet.TCPConnの話/shibuya.go01
shunsukeaihara
3
870
Norikra in Gunosy Network Ads@Norikra meetup #2
shunsukeaihara
1
6.1k
LevelDB on S3 As A KVS
shunsukeaihara
1
2.9k
色恒常性仮説に基づく色補正ライブラリcolorcorrect / 2015-01-31-kantocv27
shunsukeaihara
3
2.6k
Sparkによる分散処理 / 2015-01-16 PyData.Tokyo#3
shunsukeaihara
11
3.6k
Gunosy.Go#5 index/io/log
shunsukeaihara
0
190
Gunosy.go#2 package/compress
shunsukeaihara
0
140
Other Decks in Technology
See All in Technology
Snowflakeと仲良くなる第一歩
coco_se
4
460
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
100
SONiCの統計情報を取得したい
sonic
0
140
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
1k
20260619 私の日常業務での生成 AI 活用
masaruogura
1
200
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
170
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
140
脆弱性対応、どこで線を引くか
rymiyamoto
1
380
なぜ Platform Engineering の土台に Kubernetes を選ぶのか
r4ynode
2
640
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
120
Android の公式 Skill / Android skills
yanzm
0
140
AIのReact習熟度を測る
uhyo
2
470
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Designing Experiences People Love
moore
143
24k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Amusing Abliteration
ianozsvald
1
200
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Everyday Curiosity
cassininazir
0
230
WENDY [Excerpt]
tessaabrams
11
38k
Statistics for Hackers
jakevdp
799
230k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
Transcript
θϩ͔Β࢝Ίͨ GunosyΞυαʔό։ൃӡ༻ه גࣜձࣾGunosy ҄൧ݪढ़հ
ࣗݾհ • ҄൧ݪढ़հ (http://argmax.jp) • Gunosy։ൃຊ෦ Ϛωʔδϟʔ • ࠂ৴γεςϜͷ։ൃશମͱR&DܥΛ୲ •
ઐ: ܭࢉݴޠֶ • PythonͱඇಉظࢄγεςϜΛΉ • ը૾ॲཧɾԻ৴߸ॲཧͰ͍Ζ͍ΖϥΠϒϥϦ࡞ͬͯΔ • https://bitbucket.org/aihara
ɹɹGunosy Ads • χϡʔεΩϡϨʔγϣϯΞϓϦͷάϊγʔͷࠂ • ೖߘ͔Β৴·Ͱશࣗࣾ • ࠂೖߘγεςϜҎ֎΄΅Python • ࠷ۙscalaͱgo͕ೖ͖ͬͯͨ
• End-to-EndͷRTBγεςϜ • ΞυωοτϫʔΫ࢝Ίͨ • iOS, Android, JS, Titanium͚SDKΛఏڙ
Ξυαʔό૯߹֨ಆٕ • ECPM(ऩӹੑ)Λ૿େͤ͞Δ༧ଌΞϧΰϦζϜͷߏங • CPA(ސ٬֫ಘ୯Ձ)Λ͑ͯ͘ࠂΛܧଓ • Ϣʔβʹͱͬͯ༗ӹͳࠂใΛ৴ • େنσʔλΛ҆ఆ/ߴʹॲཧ͠ϩδοΫʹө •
50ms or Die
Gunosy Adsαʔόߏ 2360 19(!%-7
+#4/ ,:*'&5.8 MySQL +#$)"
Ξυαʔό։ൃͷجຊελϯε • ࠷ۙ·Ͱࠂ৴ΤϯδχΞ2໊ • AWSͰ༗Δ͜ͱΛ࠷େݶ׆༻ • TimeϕʔεͷϓϩϏδϣχϯά + େྔͷcold standby
• ӡ༻ɾࢮ׆ࢹՄೳͳݶΓࣗಈԽ • αʔό૿͢ΑΓνϡʔχϯά(ශੑ) • ແବʹଟ͍KPI Tool
͜ͷҰΛৼΓฦΔ
1ͰGunosyϢʔβ10ഒ ࠂ৴ྔઍഒʹ ਓ ਓ ਓ ਓ ਓ ਓ ਓ ਓ
ਓ ݄ ݄ ݄ ݄ ݄ ࠓ μϯϩʔυ ΞυΤϯδχΞਓ
͡Ίͷαʔόͩͬͨ • Python(Tornado)ͷ৴αʔό • ΦϯϥΠϯֶश/όϯσΟοτͰCTRਪఆ • Redisʹ৴σʔλΛͯ͢ೖ • RDBҰݟͳ͍ •
MongoDBʹtd-agentͰϩάΛೖ • Capped Collectionʹೖ Redis MongoDB (Log Collector) Batch Server MySQL MySQL ৴αʔό
スパイキーなアクセスで サーバが死ぬ ϢʔβͷੵΈ͕ΓͰ λΠϚʔϕʔεͷఆ࣌1VTI͕ʹ
࠷ॳͷCPUόϯυ • ΞυαʔόΛTimeϕʔεͰϓϩϏδϣχϯά • ॏ͍ܭࢉΛAPIαʔόͰ͢Δͷ͕ؒҧ͍ • ϦΞϧλΠϜͷ౷ܭΛଈ࣌ө͢ΔΑ͏ͳσʔλूܭ ܥͱόονܥΛߏங • ୯ҐͰ͘͘͞͞ճΔϨϕϧ
! • ͜ͷλΠϛϯάͰϕʔε͕΄΅
·ͩ·ͩτϥϒϧָ͍࣌͠ظ • ΄΅ϓϩτλΠϓͷ͓ͪΌΈ͍ͨͳͩͬ ͨͷͰ৴ϩδοΫपΓͷνϡʔχϯάָ͕ ͍͠ • αʔό૿͢ΑΓϒϥογϡΞοϓ • ΞΫηεച্·ͩ·ͩ
ウルトラマン来襲
CMͷ։࢝ʹΑΓDAU͕ര૿
ਓ ਓ ਓ ਓ ਓ ਓ ਓ ਓ ਓ ݄
݄ ݄ ݄ ݄ ࠓ μϯϩʔυ ΞυΤϯδχΞਓ ͜ͷ͋ͨΓ
Ϣʔβࠂ૿͍͑ͯ͘ • ऩӹ૿͑ͯઈରʹࢭΊΒΕͳ͘ͳΔ… • ΦʔσΟΤϯεσʔλ͕RedisʹࡌΓΒͳ͍ • Slave͕OOMͰࢮΜͩΓ • ΞΫηεͷεύΠΫΑΓܹ͘͠Redis͕٧·Γ࢝ΊΔ •
MongoͷCapped Collectionʹ1͢ΒΒͳ͘ͳ Δ
RedisͷߏΛมߋ • ͯ͢ͷΞΫηεʹڞ௨͢Δσʔλ(ࠂͷใ/୯Ձ )ΛS3ܦ༝ͰશαʔόʹΒ·͍ͯReadΛݮ • Redis͕མͪͯ࠷ݶͷ৴͕Ͱ͖ΔΑ͏ʹͳͬͨ ! ! !
RedisͷߏΛมߋ • σʔλछຖͷਨࢄ • twemproxyೖΕͯσʔλྔ૿Ճ࣌ͷϝϯςφϯεෛ ՙมΘΒͳ͍ͷͰਨࢄ / αΠζΞοϓͰରԠ • Riakݕ౼ɺ࣌ίετ໘Ͱબఆ͔Β֎Εͨ
! ! ϢʔβຖͷӾཡཤྺ Ϣʔβͷηάϝϯτσʔλ ࠂຖͷ৴ύϥϝʔλ ΫϥΠΞϯτ͕σʔλछຖʹ 3FEJTαʔόΓସ͑
ूܭDBΛRedshiftʹ • fluent-plugin-redshiftʹύονΛ͋ͯͯϩάΛ ϦΞϧλΠϜʹRedshiftʹೖ • ͱΓ͋͑ͣRedshiftʹೖΕΔͱָͰ͖Δ と思っていた……
アドネットワーク開始で 広告枠とログデータが爆発 Redshiftは死ぬ
͕૿͑ͯόον૿͑ͨ • PythonͷࢄTask-Queue(Celery)ϥΠϒϥϦͰ΄΅ແ վͰࢄॲཧԽ • ႈͰ૬ޓͷঢ়ଶʹґଘ͕ແ͍όονΛ࡞Δ • numpy, scipy, pandas,
scikitsͷΤίγεςϜ͕ͦͷ··͑Δ Amazon SQS ɾ ɾ ɾ Celery Workers Django-Celery
Redshift͕٧·Γग़͢ • Redshiftूܭରςʔϒϧ͕ϝϞϦʹΒͳ ͘ͳΔͱ్ʹ͘ͳΔ • Ϋϥελ૿ / ΠϯελϯεมߋରԠग़དྷΔ͚ Ͳߴ͗ͯ͢ROI͕߹Θͳ͘ͳͬͯ͘Δ •
dw2.8xlargeߴ͗͢ • ੴ༉ԦͳΒdw2.8xlargeΫϥελΛ͓͏
• Redshift͋͘·ͰσʔλϚʔτ • ఆৗूܭʹඞཁͳϝϞϦʹΓΔσʔλ ͷΈtemporalͳςʔϒϧʹͤΔ • ࣗಈͰఆظϩʔςʔγϣϯ ϝϞϦʹΒͳ͍Ϗοάσʔλ is ෆཁ
ϝϞϦʹΒͳ͍Ϗοάσʔλ is ෆཁ • ඇఆظతͳੳSparkʹ • ශऀͷຯํEMR on Spot Instance
• ΞυϗοΫͳੳͱ͔ճؼϞσϧߏஙSpark Λར༻ • શϩάूܭImpalaͰ(ΦϯϝϞϦ͡Όͳ͍͚Ͳ)
DAU積み上がりと 記事タイトル付きPushで さらなるスパイクが…
ਓ ਓ ਓ ਓ ਓ ਓ ਓ ਓ ਓ ݄
݄ ݄ ݄ ݄ ࠓ μϯϩʔυ ΞυΤϯδχΞਓ ͜ͷ͋ͨΓ
ࣾͷผαʔϏεͷվળͷӨڹ͕… • PushͷهࣄબΞϧΰϦζϜͷվྑͰϢʔβ ͷ։෧͕େ෯্ • Remote Pushܥஔ͖͑Ͱඦສ݅1ҎԼͰ Delivery • APIαʔόͷεϧʔϓοτ͕վળ
• ΞυαʔόͷϦΫΤετര૿ • Too Slow To Die
͞Α͏ͳΒRedis͞Μ • Redisʹର͢ΔR/WΛͻͨ͢Βݮ • ΞΫςΟϒͳϢʔβ͚ͩϑΝΠϧDBʹͯ͠શʹ • temporalͳσʔλΛͳͯ͘͠Statelessͳ৴ϩδοΫʹมߋ • RedisͱͯͭΒ͍͚Ͳ·ࣺͩͯΒΕͯͳ͍ •
RiakͱMemcachedͷೋஈߏ͔Aerospikeͷٕज़ݕ౼ • Ͳͬͪʹͯͭ͠Β͍
ݟ͑ͯΔཕΛશͯ౿Έൈ͍ͯࠓʹࢸΔ 2360 19(!%-7
+#4/ ,:*'&5.8 MySQL +#$)"
·ͱΊ • ҰؒͰ͍͖ͳΓαʔϏε͕େ͖͘ͳΔͱ • ເͷٕज़ແ͍ͱ͍͏͜ͱ͕ʹ͠ΈΔ • ച্ͷϓϨογϟʔ͕ͭΒ͘ͳͬͯ͘Δ • ͦͷී௨ग़དྷͳ͍ܦݧ͕ੵΊΔ •
GunosyͰPython,Scala, Golang͕͖ͳΤϯδ χΞ͕͖উखͬͯΔͷͰ༡ͼʹདྷ͍ͯͩ͘͞