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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shunsukeaihara
December 16, 2014
Technology
6
1.2k
ゼロから始めた 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.8k
Goのnet.TCPConnの話/shibuya.go01
shunsukeaihara
3
860
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.5k
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
130
Other Decks in Technology
See All in Technology
AIエージェント×GitHubで実現するQAナレッジの資産化と業務活用 / QA Knowledge as Assets with AI Agents & GitHub
tknw_hitsuji
0
190
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
110
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
kaomi_wombat
0
230
スピンアウト講座06_認証系(API-OAuth-MCP)入門
overflowinc
0
1k
Phase04_ターミナル基礎
overflowinc
0
2.1k
既存アプリの延命も,最新技術での新規開発も:WebSphereの最新情報
ktgrryt
0
160
SSoT(Single Source of Truth)で「壊して再生」する設計
kawauso
2
320
Navigation APIと見るSvelteKitのWeb標準志向
yamanoku
2
110
20260323_データ分析基盤でGeminiを使う話
1210yuichi0
0
170
ADK + Gemini Enterprise で 外部 API 連携エージェント作るなら OAuth の仕組みを理解しておこう
kaz1437
0
160
20260321_エンベディングってなに?RAGってなに?エンベディングの説明とGemini Embedding 2 の紹介
tsho
0
160
BFCacheを活用して無限スクロールのUX を改善した話
apple_yagi
0
110
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
200
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
410
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
77
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
Done Done
chrislema
186
16k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
43k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
The Cult of Friendly URLs
andyhume
79
6.8k
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͕͖ͳΤϯδ χΞ͕͖উखͬͯΔͷͰ༡ͼʹདྷ͍ͯͩ͘͞