$30 off During Our Annual Pro Sale. View Details »
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.5k
Goのnet.TCPConnの話/shibuya.go01
shunsukeaihara
2
740
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
95
Other Decks in Technology
See All in Technology
ポストモーテムレビューをブレームレスに運営し有効な改善アクションを引き出すために必要だったこと / What is needed to operate postmortem blamelessly and elicit improvement actions
yamaguchitk333
0
170
40歲的我會給20歲的自己,關於軟體開發的7個建議
line_developers_tw
PRO
0
120
ドメインロジックで考えるテスタビリティ
leveragestech
1
270
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
150
Reliability Engineering at Studist
katsuhisa91
PRO
0
110
LLMを「速く」「安く」 動かすには / CloudNative Days Winter 2024
pfn
PRO
6
1.3k
高品質と高スピードを両立させるソフトウェアQA/Software QA that Supports Agility and Quality
goyoki
8
1.2k
専門領域に特化したチームの挑戦
leveragestech
0
250
歴史あるRuby on Railsでデッドコードを見つけ、 消す方法@yabaibuki.dev #3
ayumu838
0
1.8k
開発者向けツールを魔改造してセキュリティ診断ツールを作っている話 - 第1回 セキュリティ若手の会 LT
pizzacat83
0
270
LangChainとSupabaseを活用して、RAGを実装してみた
atsushii
0
120
2024/11/29_失敗談から学ぶ! エンジニア向けre:Invent攻略アンチパターン集
hiashisan
0
340
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
4
150
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
770
Ruby is Unlike a Banana
tanoku
97
11k
Building Adaptive Systems
keathley
38
2.3k
For a Future-Friendly Web
brad_frost
175
9.4k
Thoughts on Productivity
jonyablonski
67
4.3k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Navigating Team Friction
lara
183
15k
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͕͖ͳΤϯδ χΞ͕͖উखͬͯΔͷͰ༡ͼʹདྷ͍ͯͩ͘͞