Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゼロから始めた Gunosyアドサーバ開発運用記 / 2014-12-16-dots

shunsukeaihara
December 16, 2014

ゼロから始めた Gunosyアドサーバ開発運用記 / 2014-12-16-dots

地雷の話

shunsukeaihara

December 16, 2014
Tweet

More Decks by shunsukeaihara

Other Decks in Technology

Transcript

  1. θϩ͔Β࢝Ίͨ
    GunosyΞυαʔό։ൃӡ༻ه
    גࣜձࣾGunosy
    ҄൧ݪढ़հ

    View Slide

  2. ࣗݾ঺հ
    • ҄൧ݪढ़հ (http://argmax.jp)
    • Gunosy։ൃຊ෦ Ϛωʔδϟʔ
    • ޿ࠂ഑৴γεςϜͷ։ൃશମͱR&DܥΛ୲౰
    • ઐ໳: ܭࢉݴޠֶ
    • Pythonͱඇಉظ෼ࢄγεςϜΛ޷Ή
    • ը૾ॲཧɾԻ੠৴߸ॲཧͰ͍Ζ͍ΖϥΠϒϥϦ࡞ͬͯΔ
    • https://bitbucket.org/aihara

    View Slide

  3. ɹɹGunosy Ads
    • χϡʔεΩϡϨʔγϣϯΞϓϦͷάϊγʔ಺ͷ޿ࠂ
    • ೖߘ͔Β഑৴·Ͱ׬શࣗࣾ੡
    • ޿ࠂೖߘγεςϜҎ֎͸΄΅Python੡
    • ࠷ۙscalaͱgo͕ೖ͖ͬͯͨ
    • End-to-EndͷRTBγεςϜ
    • ΞυωοτϫʔΫ΋࢝Ίͨ
    • iOS, Android, JS, Titanium޲͚SDKΛఏڙ

    View Slide

  4. Ξυαʔό͸૯߹֨ಆٕ
    • ECPM(ऩӹੑ)Λ૿େͤ͞Δ༧ଌΞϧΰϦζϜͷߏங
    • CPA(ސ٬֫ಘ୯Ձ)Λ௿͘཈͑ͯ޿ࠂΛܧଓ
    • Ϣʔβʹͱͬͯ΋༗ӹͳ޿ࠂ৘ใΛ഑৴
    • େن໛σʔλΛ҆ఆ/ߴ଎ʹॲཧ͠ϩδοΫʹ൓ө
    • 50ms or Die

    View Slide

  5. Gunosy Adsαʔόߏ੒

    2360
    19(!%-7




    +#4/




    ,:*'&5.8


    MySQL
    +#$)"

    View Slide

  6. Ξυαʔό։ൃͷجຊελϯε
    • ࠷ۙ·Ͱ޿ࠂ഑৴ΤϯδχΞ͸2໊
    • AWSͰ༗Δ͜ͱΛ࠷େݶ׆༻
    • TimeϕʔεͷϓϩϏδϣχϯά + େྔͷcold standby
    • ӡ༻ɾࢮ׆؂ࢹ͸ՄೳͳݶΓࣗಈԽ
    • αʔό૿΍͢ΑΓνϡʔχϯά(ශ๡ੑ)
    • ແବʹଟ͍KPI Tool

    View Slide

  7. ͜ͷҰ೥ΛৼΓฦΔ

    View Slide

  8. 1೥ͰGunosyϢʔβ਺͸10ഒ
    ޿ࠂ഑৴ྔ͸਺ઍഒʹ









    ݄ ݄ ݄ ݄ ݄ ࠓ
    μ΢ϯϩʔυ਺ ΞυΤϯδχΞਓ਺






    View Slide

  9. ͸͡Ί͸਺୆ͷαʔόͩͬͨ
    • Python(Tornado)੡ͷ഑৴αʔό
    • ΦϯϥΠϯֶश/όϯσΟοτͰCTRਪఆ
    • Redisʹ഑৴σʔλΛ͢΂ͯ౤ೖ
    • RDB͸Ұ੾ݟͳ͍
    • MongoDBʹtd-agentͰϩάΛ౤ೖ
    • Capped Collectionʹ౤ೖ
    Redis
    MongoDB
    (Log Collector)
    Batch Server
    MySQL
    MySQL
    ഑৴αʔό

    View Slide

  10. スパイキーなアクセスで
    サーバが死ぬ
    ϢʔβͷੵΈ͕ΓͰ λΠϚʔϕʔεͷఆ࣌1VTI͕໰୊ʹ

    View Slide

  11. ࠷ॳͷ໰୊͸CPUό΢ϯυ
    • ΞυαʔόΛTimeϕʔεͰϓϩϏδϣχϯά
    • ॏ͍ܭࢉΛAPIαʔόͰ͢Δͷ͕ؒҧ͍
    • ϦΞϧλΠϜͷ౷ܭ஋Λଈ࣌൓ө͢ΔΑ͏ͳσʔλूܭ
    ܥͱόονܥΛߏங
    • ਺෼୯ҐͰ΋͘͘͞͞ճΔϨϕϧ
    !
    • ͜ͷλΠϛϯάͰϕʔε͕΄΅׬੒

    View Slide

  12. ·ͩ·ͩτϥϒϧ΋ָ͍࣌͠ظ
    • ΄΅ϓϩτλΠϓͷ͓΋ͪΌΈ͍ͨͳ෺ͩͬ
    ͨͷͰ഑৴ϩδοΫपΓͷνϡʔχϯάָ͕
    ͍͠
    • αʔό૿΍͢ΑΓ͸ϒϥογϡΞοϓ
    • ΞΫηε਺΋ച্΋·ͩ·ͩ

    View Slide

  13. ウルトラマン来襲

    View Slide

  14. CMͷ։࢝ʹΑΓDAU͕ര૿

    View Slide










  15. ݄ ݄ ݄ ݄ ݄ ࠓ
    μ΢ϯϩʔυ਺ ΞυΤϯδχΞਓ਺






    ͜ͷ͋ͨΓ

    View Slide

  16. Ϣʔβ΋޿ࠂ࿮΋૿͍͑ͯ͘
    • ऩӹ΋૿͑ͯઈରʹࢭΊΒΕͳ͘ͳΔ…
    • ΦʔσΟΤϯεσʔλ͕RedisʹࡌΓ੾Βͳ͍
    • Slave͕OOMͰࢮΜͩΓ
    • ΞΫηεͷεύΠΫ͸ΑΓܹ͘͠Redis͕٧·Γ࢝ΊΔ
    • MongoͷCapped Collectionʹ͸1೔෼͢Β৐Βͳ͘ͳ
    Δ

    View Slide

  17. Redisͷߏ੒Λมߋ
    • ͢΂ͯͷΞΫηεʹڞ௨͢Δσʔλ(޿ࠂͷ৘ใ/୯Ձ
    ౳)ΛS3ܦ༝Ͱશαʔόʹ͹Β·͍ͯReadΛ࡟ݮ
    • Redis͕མͪͯ΋࠷௿ݶͷ഑৴͕Ͱ͖ΔΑ͏ʹͳͬͨ
    !
    !
    !

    View Slide

  18. Redisͷߏ੒Λมߋ
    • σʔλछຖͷਨ௚෼ࢄ
    • twemproxyೖΕͯ΋σʔλྔ૿Ճ࣌ͷϝϯςφϯεෛ
    ՙ͸มΘΒͳ͍ͷͰਨ௚෼ࢄ / αΠζΞοϓͰରԠ
    • Riakݕ౼΋ɺ౰࣌͸ίετ໘Ͱબఆ͔Β֎Εͨ
    !
    !
    ϢʔβຖͷӾཡཤྺ
    Ϣʔβͷηάϝϯτσʔλ
    ޿ࠂຖͷ഑৴ύϥϝʔλ
    ΫϥΠΞϯτ͕σʔλछຖʹ
    3FEJTαʔό੾Γସ͑



    View Slide

  19. ूܭDBΛRedshiftʹ
    • fluent-plugin-redshiftʹύονΛ͋ͯͯϩάΛ
    ൒ϦΞϧλΠϜʹRedshiftʹ౤ೖ
    • ͱΓ͋͑ͣRedshiftʹೖΕΔͱָͰ͖Δ
    と思っていた……

    View Slide

  20. アドネットワーク開始で
    広告枠とログデータが爆発
    Redshiftは死ぬ

    View Slide

  21. ࿮͕૿͑ͯόον΋૿͑ͨ
    • Pythonͷ෼ࢄTask-Queue(Celery)ϥΠϒϥϦͰ΄΅ແ
    վ଄Ͱ෼ࢄॲཧԽ
    • ႈ౳Ͱ૬ޓͷঢ়ଶʹґଘ͕ແ͍όονΛ࡞Δ
    • numpy, scipy, pandas, scikits౳ͷΤίγεςϜ͕ͦͷ··࢖͑Δ
    Amazon SQS
    ɾ

    ɾ

    ɾ
    Celery Workers
    Django-Celery

    View Slide

  22. Redshift͕٧·Γग़͢
    • Redshift͸ूܭର৅ςʔϒϧ͕ϝϞϦʹ৐Βͳ
    ͘ͳΔͱ్୺ʹ஗͘ͳΔ
    • Ϋϥελ਺૿ / ΠϯελϯεมߋରԠग़དྷΔ͚
    Ͳߴ͗ͯ͢ROI͕߹Θͳ͘ͳͬͯ͘Δ
    • dw2.8xlargeߴ͗͢
    • ੴ༉ԦͳΒdw2.8xlargeΫϥελΛ࢖͓͏

    View Slide

  23. • Redshift͸͋͘·ͰσʔλϚʔτ
    • ఆৗूܭʹඞཁͳϝϞϦʹ৐Γ੾Δσʔλ
    ͷΈtemporalͳςʔϒϧʹ৐ͤΔ
    • ൒ࣗಈͰఆظϩʔςʔγϣϯ
    ϝϞϦʹ৐Βͳ͍Ϗοάσʔλ is ෆཁ

    View Slide

  24. ϝϞϦʹ৐Βͳ͍Ϗοάσʔλ is ෆཁ
    • ඇఆظతͳ෼ੳ͸Sparkʹ
    • ශऀͷຯํEMR on Spot Instance
    • ΞυϗοΫͳ෼ੳͱ͔ճؼϞσϧߏங͸Spark
    Λར༻
    • શϩάूܭ͸ImpalaͰ(ΦϯϝϞϦ͡Όͳ͍͚Ͳ)

    View Slide

  25. DAU積み上がりと
    記事タイトル付きPushで
    さらなるスパイクが…

    View Slide










  26. ݄ ݄ ݄ ݄ ݄ ࠓ
    μ΢ϯϩʔυ਺ ΞυΤϯδχΞਓ਺






    ͜ͷ͋ͨΓ

    View Slide

  27. ࣾ಺ͷผαʔϏεͷվળͷӨڹ͕…
    • Pushͷهࣄબ୒ΞϧΰϦζϜͷվྑͰϢʔβ
    ͷ։෧཰͕େ෯޲্
    • Remote Pushܥஔ͖׵͑Ͱ਺ඦສ݅1෼ҎԼͰ
    Delivery
    • APIαʔόͷεϧʔϓοτ͕վળ
    • Ξυαʔό΁ͷϦΫΤετ਺΋ര૿
    • Too Slow To Die

    View Slide

  28. ͞Α͏ͳΒRedis͞Μ
    • Redisʹର͢ΔR/WΛͻͨ͢Β࡟ݮ
    • ΞΫςΟϒͳϢʔβ͚ͩ͸ϑΝΠϧDBʹͯ͠શ୆ʹ഑෍
    • temporalͳσʔλΛͳͯ͘͠Statelessͳ഑৴ϩδοΫʹมߋ
    • Redisͱͯ΋ͭΒ͍͚Ͳ·ࣺͩͯΒΕͯͳ͍
    • RiakͱMemcachedͷೋஈߏ੒͔Aerospikeͷٕज़ݕ౼
    • Ͳͬͪʹͯ͠΋ͭΒ͍

    View Slide

  29. ݟ͑ͯΔ஍ཕΛશͯ౿Έൈ͍ͯࠓʹࢸΔ

    2360
    19(!%-7




    +#4/




    ,:*'&5.8


    MySQL
    +#$)"

    View Slide

  30. ·ͱΊ
    • Ұ೥ؒͰ͍͖ͳΓαʔϏε͕େ͖͘ͳΔͱ
    • ເͷٕज़͸ແ͍ͱ͍͏͜ͱ͕਎ʹ͠ΈΔ
    • ച্΁ͷϓϨογϟʔ͕ͭΒ͘ͳͬͯ͘Δ
    • ͦͷ෼ී௨ग़དྷͳ͍ܦݧ͕ੵΊΔ
    • GunosyͰ͸Python,Scala, Golang͕޷͖ͳΤϯδ
    χΞ͕޷͖উख΍ͬͯΔͷͰ༡ͼʹདྷ͍ͯͩ͘͞

    View Slide