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
6
1.1k
ゼロから始めた Gunosyアドサーバ開発運用記 / 2014-12-16-dots
地雷の話
shunsukeaihara
December 16, 2014
Tweet
Share
More Decks by shunsukeaihara
See All by shunsukeaihara
BONXを支える技術:発話区間検出(VAD)の話/Akerun & BONX Tech Talk
shunsukeaihara
4
7.6k
Goのnet.TCPConnの話/shibuya.go01
shunsukeaihara
3
780
Norikra in Gunosy Network Ads@Norikra meetup #2
shunsukeaihara
1
5.9k
LevelDB on S3 As A KVS
shunsukeaihara
1
2.7k
色恒常性仮説に基づく色補正ライブラリcolorcorrect / 2015-01-31-kantocv27
shunsukeaihara
3
2.3k
Sparkによる分散処理 / 2015-01-16 PyData.Tokyo#3
shunsukeaihara
11
3.4k
Gunosy.Go#5 index/io/log
shunsukeaihara
0
150
Gunosy.go#2 package/compress
shunsukeaihara
0
98
Other Decks in Technology
See All in Technology
プロセス改善による品質向上事例
tomasagi
2
2.5k
関東Kaggler会LT: 人狼コンペとLLM量子化について
nejumi
3
580
Classmethod AI Talks(CATs) #17 司会進行スライド(2025.02.19) / classmethod-ai-talks-aka-cats_moderator-slides_vol17_2025-02-19
shinyaa31
0
120
【Developers Summit 2025】プロダクトエンジニアから学ぶ、 ユーザーにより高い価値を届ける技術
niwatakeru
2
1.4k
OpenID BizDay#17 KYC WG活動報告(法人) / 20250219-BizDay17-KYC-legalidentity
oidfj
0
240
AndroidデバイスにFTPサーバを建立する
e10dokup
0
250
エンジニアの育成を支える爆速フィードバック文化
sansantech
PRO
3
1.1k
RSNA2024振り返り
nanachi
0
580
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
210
表現を育てる
kiyou77
1
210
全文検索+セマンティックランカー+LLMの自然文検索サ−ビスで得られた知見
segavvy
2
100
2024.02.19 W&B AIエージェントLT会 / AIエージェントが業務を代行するための計画と実行 / Algomatic 宮脇
smiyawaki0820
13
3.3k
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Writing Fast Ruby
sferik
628
61k
A Modern Web Designer's Workflow
chriscoyier
693
190k
How GitHub (no longer) Works
holman
314
140k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Statistics for Hackers
jakevdp
797
220k
Raft: Consensus for Rubyists
vanstee
137
6.8k
A Philosophy of Restraint
colly
203
16k
Producing Creativity
orderedlist
PRO
344
39k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
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͕͖ͳΤϯδ χΞ͕͖উखͬͯΔͷͰ༡ͼʹདྷ͍ͯͩ͘͞