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

Golang_ads_deliver

 Golang_ads_deliver

Kaneko Tatsuya

December 08, 2014
Tweet

More Decks by Kaneko Tatsuya

Other Decks in Programming

Transcript

  1. (P੡αʔόʔΛ։ൃɾӡ༻ͯ͠
    ʙϐΫγϒ৽޿ࠂ഑৴αʔόʔʙ
    ϐΫγϒΠϯϑϥDBUBUTVZ

    View Slide

  2. ࣗݾ঺հ
    w DBUBUTVZͱ͍͏*%ͰΠϯλʔωοτ্Ͱ׆ಈ
    w ΧλπΠͱ͔ͬͯݺ͹Ε͍ͯΔ
    w ʹେֶΛଔۀޙʹϐΫγϒೖࣾ
    w ޿ࠂαʔόʔͷΠϯϑϥ୲౰ʹ
    w *46$0/ຊઓ४༏উ
    w (PΛ࢖͍·ͨ͠
    w (P͸ࠓճͷ޿ࠂαʔόʔͰॳΊͯ৮ͬͨϨϕϧ

    View Slide

  3. ৽޿ࠂαʔόʔ։ൃϝϯόʔʢਓʣ
    CBTI$
    ؅ཧɾ഑৴αʔόʔϓϩτλΠϓ࡞੒
    ؅ཧɾ഑৴αʔόʔ։ൃ୲౰
    QJYJWͷ։ൃ΋૯ׅ
    3BJMTΤϯδχΞ
    ؅ཧαʔόʔ։ൃ୲౰
    DBUBUTVZʢࣗ෼ʣ
    ؅ཧαʔόʔΠϯϑϥ୲౰
    ഑৴αʔόʔ։ൃɾΠϯϑϥ୲౰
    ؅ཧαʔόʔͷ+4΋ͨ·ʹॻ͍ͯΔ

    View Slide

  4. %/4
    UZQFUBJM
    ޿ࠂ഑৴αʔόʔ
    ؅ཧαʔόʔ
    .Z42-
    qVFOUE qVFOUE
    /(*/9
    ը૾
    $"$)&
    LTLMPH NFNDBDIFE
    ޿ࠂσʔλ
    "QQMJDBUJPO (PMBOH

    දࣔ਺
    ΫϦοΫ਺
    6/*9υϝΠϯιέοτ
    $JSDVT
    ޿ࠂσʔλ
    ܭଌ݁Ռ
    ϥ΢ϯυϩϏϯ
    6/*9υϝΠϯιέοτ
    ϑΝΠϧσΟεΫϦϓλ

    View Slide

  5. ഑৴αʔόʔઃܭ
    w ܰྔͳ,74ʹ޿ࠂσʔλΛอଘ͓͍ͯͯ͠ϦΫΤετʹԠͯͦ͡ͷσʔλΛฦ
    ͢ΞϓϦέʔγϣϯ
    w ը૾σʔλ΋ಉ༷ʹ഑৴͢Δ͕Ωϟογϡ͓͖ͯ͠ը૾ੜ੒͕ෳ਺ճߦΘΕͳ
    ͍Α͏ʹ͢Δ
    w ը૾σʔλࣗମͷදࣔ਺ΛܭଌΛ͢Δ͜ͱ͸ͳ͍
    w ը૾σʔλΛ౎౓ੜ੒ͨ͠Β͕͔͔࣌ؒΓ͗͢Δ
    w දࣔ΍ΫϦοΫ͕͞ΕΕ͹ϑΝΠϧʹॻ͖ࠐΉʢLTLMPHʣ
    w qVFOUEͰLTLMPHΛ؂ࢹͯ͠ܭଌ݁ՌΛ؅ཧαʔόʔͷ.Z42-ʹॻ͖ࠐΉ
    w άϩʔόϧ*1ͰϢʔβʔͷϦΫΤετΛ௚઀ड͚Δ͜ͱͰߴ଎ʹϨεϙϯεฦ٫

    View Slide

  6. ϑϨʔϜϫʔΫ
    w ϑϨʔϜϫʔΫ͸࢖ΘͣOFUIUUQΛੜͰ࢖͏
    w ΠϯλʔϑΣΠε͸े෼෼͔Γ΍͍͢
    w ޿ࠂ഑৴ͳͷͰςϯϓϨʔτΤϯδϯͳͲ΋ෆཁͰϧʔ
    ςΟϯά΋(&5ͷΈͰ୯७
    w ௥͏ίʔυྔ΋গͳָͯ͘
    w ࡞ΔϓϩμΫτʹ΋ΑΔͩΖ͏͕ɼࠓճ͸ϑϨʔϜϫʔ
    ΫΛ࢖Θͳ͔ͬͨͷ͸େ੒ޭͩͬͨͱࢥ͏

    View Slide

  7. /HJOYͱ(PΛܨ͙
    w ϢʔβʔͷϦΫΤετΛ௚઀(P͕ड͚ΔͷͰ͸ͳ͘/HJOYͰड͚͍ͨ
    w ϢʔβʔͷϦΫΤετΛόοϑΝϦϯάͯ͘͠ΕΔͷͰίωΫγϣϯͷอ
    ࣋ͳͲ໘౗ͳ͜ͱΛߟ͑Δඞཁ͕ͳ͘ͳΔ
    w (PͰ͸௿஗ԆͰϨεϙϯεΛฦ͢͜ͱ͚ͩΛߟ͑Ε͹Α͍
    w ΞΫηε੍ޚͳͲ΋؆୯
    w ΩϟογϡͷػߏͳͲ͕؆୯ʹ࢖͑Δ
    w (PͰUDQΛMJTUFOͯ͠ىಈͨ͠αʔόʔʹରͯ͠QSPYZ@QBTT͢Δͱ஗͗͢Δ
    w 6/*9EPNBJOTPDLFUΛMJTUFOͯ͠αʔόʔΛىಈ͢Δඞཁ͕͋Δ

    View Slide

  8. 6/*9EPNBJOTPDLFU
    w ϓϩηεؒ௨৴
    w ಉҰϚγϯ্ͳΒ਌ࢠؔ܎ͳͲ͕ແͯ͘΋௨৴͕Ͱ͖Δ
    w UDQͳͲΑΓ΋҆ఆɾߴ଎ʹಈ͘
    w NFNDBDIFEͱͷ௨৴ʹ΋࢖༻͢Δͱߴ଎͔ͭ҆ఆతʹಈ࡞ͤ͞Δ͜ͱ͕
    Ͱ͖Δ
    w ΋ͪΖΜ࢖༻͍ͯ͠Δ
    w ϐΫγϒࣾ಺Ͱ͸গͳ͍ϦιʔεͰେྔͷΞΫηεΛߴ଎ʹ͞͹ͨ͘Ίʹࢸ
    Δͱ͜ΖͰ࠾༻͞Ε͍ͯΔ
    w (Pͷ৔߹OFU-JTUFO VOJY QBUI
    ͷΑ͏ʹ͢Ε͹Α͍

    View Slide

  9. IPUEFQMPZ
    w %/4ϥ΢ϯυϩϏϯͷͨΊִ཭͕ࠔ೉
    w ޿ࠂαʔόʔ͸"84Ͱ͸ͳ͍ͷͰ&-#͸࢖͑ͳ͍
    w QJYJWपลαʔϏε͸ίετ໘͔Β"84Λ࢖Θͳ͍
    w ௒େྔֆഅɾQJYJWࣣ༦୹࡭ࡇͳͲظؒݶఆͷ΋ͷʹ͸"84͸࢖
    ΘΕ͍ͯΔ
    w ݱࡏͷ޿ࠂۀքͰ͸"84Λ࢖͏͜ͱ͕ଟ͍ͷͰ&-#Λ࢖ͬͯ
    IPUEFQMPZΛ࣮ݱ͍ͯ͠Δձ͕ࣾଟ͍
    w ޿ࠂαʔόʔͳͷͰσϓϩΠ࣌ʹμ΢ϯλΠϜ͕ൃੜͯ͠͸͍͚ͳ͍

    View Slide

  10. $JSDVT
    w .P[JMMB͕࡞ͬͨ1ZUIPO੡ͷϓϩηε؅ཧπʔϧ
    w $JSDVTࣗମ͕ιέοτϑΝΠϧΛ࣋ͬͯɼΞϓϦέʔγϣϯ͸ϑΝΠϧσΟεΫϦϓ
    λΛ-JTUFOͤͯ͞ىಈ͢Δ
    w σϓϩΠ࣌ʹ৽͍͠ϓϩηε͕ىಈ͔ͯ͠Βݹ͍ϓϩηεΛLJMM͢Δ
    w μ΢ϯλΠϜͳ͠ͰΞϓϦέʔγϣϯΛೖΕସ͑Δ͜ͱ͕Ͱ͖Δ
    w ઃఆϑΝΠϧΛॻ͘ͱ͍͍ײ͡ʹىಈͯ͘͠ΕΔ
    w FYBNQMF͕๛෋ͳͷͰׂͱॻ͚Δ
    w (PଆͰ͸ϩά͸ඪ४ग़ྗͱඪ४Τϥʔग़ྗʹॻ͚ͩ͘Ͱ$JSDVT͕ϩάϑΝΠϧԽͱϩ
    άϩʔςʔτΛશͯ୲͏
    w (Pଆͷ։ൃίετΛԼ͛Δ
    w DJSDVTDUMͱ͍͏ίϚϯυπʔϧܦ༝Ͱૢ࡞͢Δ

    View Slide

  11. socket
    TPDLFU࡞੒
    ϑΝΠϧ
    σΟεΫϦϓλ
    FYFD
    socket
    ϑΝΠϧ
    σΟεΫϦϓλ
    ϓϩηε؂ࢹ
    DJSDVT͸ϓϩηε؂ࢹ͚ͩ
    ͰϦΫΤετ͸ײ஌͠ͳ͍
    BQQ͸ϑΝΠϧσΟεΫϦϓλΛ
    -JTUFO͢ΔαʔόʔͰ͋Δඞཁ͕͋Δ
    αʔόʔىಈ࣌
    αʔόʔىಈޙ
    circus
    app
    circus
    app

    View Slide

  12. circus
    socket
    ϑΝΠϧ
    σΟεΫϦϓλ
    app_old
    FYFD
    app_new
    ϓϩηε؂ࢹ
    αʔόʔϦϩʔυ
    αʔόʔϦϩʔυ
    BQQ@OFX͕ىಈ͢Δ·Ͱ଴ͭ
    BQQ@OFX͕ىಈͨ͠Β
    BQQ@PMEΛLJMM͢Δ
    circus
    socket
    ϑΝΠϧ
    σΟεΫϦϓλ
    app_old
    app_new
    ϓϩηε؂ࢹ
    LJMM

    View Slide

  13. w qBHͰίϚϯυϥΠϯΦϓ
    γϣϯΛ౉ͤΔΑ͏ʹ
    w TZTDBMM͸(PͰϑϦʔζ͞
    ΕΔͷͰ(PҎ߱͸࢖Θͳ
    ͍ํ͕ྑͦ͞͏
    w OFU-JTUFOFSΛ༻ҙ͢Δͱ෼
    ذ͕ͭͰࡁΉ
    w खݩͰͷ։ൃΛ͠ʹ͘͘͠ͳ
    ͍Α͏ʹUDQͰͷαʔόʔىಈ
    ΋αϙʔτͰ͖Δ

    View Slide

  14. $JSDVT΁ϓϧϦΫ
    w $JSDVT͸(JU)VCͰ։ൃ͞Ε͍ͯΔ
    w %FCJBOͷJOJUEεΫϦϓτ͸$JSDVTࣗମͷϩάΛग़ྗ͠ͳ͔ͬͨ
    w ग़ྗͰ͖ΔΑ͏ʹมߋͯ͠ϓϧϦΫ΋ͯ͠ΈΔ
    w NFSHF͞Εͨ
    w ϐΫγϒͰ͸ࣾ಺Ͱ࢖༻͍ͯ͠ΔΦʔϓϯιʔεϓϩμΫτʹύο
    νΛૹΔͷ͸ਪ঑͞Ε͍ͯΔ
    w .P[JMMBͷϓϩηε؅ཧπʔϧDJSDVTʹϓϧϦΫͨ͠࿩DBUBUTVZ
    ͱ͸IUUQDBUBUTVZIBUFCMPKQFOUSZ

    View Slide

  15. ΩϟογϡԽ
    w ΞΫηεͷ౓ʹNFNDBDIFEʹΞΫηεΛͨ͠Β஗্͍ʹ$16࢖༻཰΋্͕ͬͯ͠
    ·ͬͨ
    w QQSPG͔Β͸NFNDBDIFE͕஗͍ͱ͍͏͜ͱ͕Α͘෼͔Βͳ͔ͬͨ
    w ඇಉظʹσʔλΛऔಘ͢ΔͷͰQQSPGͰ͸͏·͘ग़ͯ͜ͳ͍
    w XBMGTUPQXBUDI
    w NFNDBDIFEͷऔಘ݁ՌΛΞϓϦέʔγϣϯଆͰΩϟογϡ͢Δ͜ͱʹ
    w ௕͗͢Δͱ޿ࠂσʔλͷ൓ө͕஗ΕΔ
    w QNZMVOEHPDBDIF
    w άϩʔόϧʹDBDIFͱ͍͏ม਺໊Λ࢖ͬͯ͠·͏ͷͰJNQPSU࣌ʹผͷ໊લΛ͚ͭ
    Δ͜ͱΛਪ঑

    View Slide

  16. σϓϩΠ
    w ࣾ಺σϓϩΠπʔϧʹ৐͔ͬΔ
    w ϒϥ΢β͔Βద౰ʹΫϦοΫ͢ΔͱσϓϩΠαʔόʔ্ͰγΣϧεΫϦϓτ
    Λ࣮ߦͰ͖Δ
    w ࣾ಺ͷαʔϏε͸$BQJTUSBOP͔͜ͷσϓϩΠπʔϧ͕࢖ΘΕΔ͜ͱ͕ଟ͍
    w qVFOUE͸)61γάφϧΛૹΔͱϦϩʔυͰ͖Δ
    w JOJUEεΫϦϓτΛࣗલͰ࡞੒
    w (P͸ϥΠϒϥϦʹґଘ͠ͳ͍࣮ߦόΠφϦΛίϯύΠϧͰੜ੒
    w σϓϩΠαʔόʔͰίϯύΠϧ֤ͯ͠αʔόʔ΁όΠφϦΛ഑෍

    View Slide

  17. git clone
    go build
    rsync
    circusctl reload && fluentd reload
    deploy server
    application server

    View Slide

  18. (PͷΞϓϦͷঢ়ଶΛݟ͍ͨ
    w SVOUJNF͕Ͳ͏ͳ͍ͬͯΔͷ͔ݟ͍ͨ
    w GVLBUBHPMBOHTUBUTBQJIBOEMFS
    w (PαʔόͷϞχλϦϯά2JJUBIUUQRJJUBDPNDVCJDEBJZBJUFNT
    CDBFBGC
    w ݱࡏ಺෦ʹऔΓࠐΜͰଞͷݟ͍ͨ৘ใΛݟΕΔΑ͏ʹͯ͠ศར"1*ʹ͍ͯ͠Δ
    w ΋ͪΖΜ/HJOYଆͰࣾ಺͔Β͔͠ݟΕͳ͍Α͏ʹ
    w σϓϩΠ͞ΕͨόʔδϣϯΛ஌Γ͍ͨ
    w HPCVJMEMEqBHT9NBJOBQQ7FSTJPOAHJUSFWMJTU)&"%OA
    w νϟωϧ͕٧·͍ͬͯͳ͍͔Έ͍ͨ
    w DBQ΍MFOͰঢ়ଶ͕ݟΕΔͷͰ+40/ܦ༝ͰݟΕΔΑ͏ʹ

    View Slide

  19. (Pͷύοέʔδ؅ཧ
    w ݱࡏ(PNΛ࢖͍ͬͯΔ͕׆༻͸Ͱ͖͍ͯͳ͍
    w ಺෦ϦϙδτϦͷ(JU-BCΛ͏·͘ѻ͑ͳ͍
    w ίϛοτ*%Λશ෦ॻ͍ͯΒΕͳ͍
    w ͦ΋ͦ΋ެࣜͰఏڙ͞Ε͍ͯͳ͍ͷͰͲ͏͠Α͏΋ͳ͍ؾ͕͢Δ
    w NFNDBDIFEͷFYQJSFΛར༻͢Δࡍʹ৽͠Ίͷ֎෦ϥΠϒϥϦΛ࢖͏ඞཁ͕ग़ͯ
    ͜ͷ໰୊͕࠶೩
    w ֎෦ϥΠϒϥϦΛৗʹ࠷৽ͷ΋ͷΛ࢖͏Α͏ʹ͢Δͱ(JU)VC͕ࢮΜͩΒσϓϩ
    ΠͰ͖ͳ͍BOE֎෦ϥΠϒϥϦͷߋ৽ͰʰԿ΋ͯ͠ͳ͍ͷʹʱࢮ͵Մೳੑ͕ग़
    Δ
    w ޿ࠂγεςϜͱͯ͠க໋త

    View Slide

  20. (Pͷϓϩηε͕ίΞ͔͠࢖Θͳ͍
    w NVOJOͷάϥϑ͕಄ΛଧͬͨΑ͏ʹͳΔ
    w ϨεϙϯελΠϜ͕ѱԽ͍ͯ͠ΔΘ͚Ͱ͸ͳ͍
    w /HJOYͷΞΫηεϩάΛղੳͯ͠HSPXUIGPSFDBTUͰάϥϑʹ͍ͯ͠ΔͷͰϨεϙϯε
    λΠϜͷѱԽ͕֬ೝ͞Εͳ͔ͬͨ
    w (0."9130$4Λม͑ͯ΋μϝ
    w ͣͬͱʹ͍ͯͨ͠ͷΛ΍ʹ͕ͨ͠େ͖ͳҧ͍͸ݟΒΕͣ
    w ࠓ͸શ୆ʹ͍ͯ͠Δ
    w ΞΫηε͕ҰఆྔΛ௒͑Δͱ/HJOYͷΞΫηεϩάΛૹΔqVFOUEͱϩάΛॻ͖ࠐΉDJSDVT
    ͕$16Λ͔ͳΓᷰ͏Α͏ʹͳΔͷͰ(Pͷϓϩηεʹ$16Λ࢖ΘͤΔඞཁ͸ݱঢ়ͳ͍
    w ͱΓ͋͑ͣ໰୊ͳ͍ͷͰ༷ࢠݟ

    View Slide

  21. 3VCZͷ໊࢒
    w ഑৴αʔόʔΛ౰ॳ3VCZͰ࡞Ζ͏ͱͯ͠಴࠳ͨ͠ܦҢ͕͋Δ͕ݩʑ3VCZͰ࡞Ζ͏ͱͨ͠
    ໊࢒͸ͨ͘͞Μ͋Δ
    w σΟϨΫτϦߏ੒͸ݩʑ$BQJTUSBOPͰσϓϩΠ͍ͯͨ࣌͠ͱม͍͑ͯͳ͍
    w $BQJTUSBOPͱಉ͡Α͏ͳಈ͖Λ͢ΔγΣϧεΫϦϓτΛࣗલͰ࡞੒
    w Ҡߦ࣌͸มߋ఺͕গͳ͍ํ͕Α͔ͬͨͨΊ͋Δఔ౓ϝϦοτ͕͕͋ͬͨɼ࠷దԽͷ༨஍
    ͕͔ͳΓ͋ΔͷͰॻ͖௚͍ͨ͠
    w STZOD͸ࠩ෼͚ͩɾෳ਺αʔόʔ΁ฒྻʹSTZODͳͲ
    w όονॲཧ͸3VCZͱ(Pͷ͕ͭ࢖ΘΕ͍ͯͨΓͱ౷Ұੑ͕ͳ͍
    w .Z42-΁ͷॻ͖ࠐΈͳͲ͸(Pʹ͢ΔϝϦοτ΋ͳ͍ͷͰࠓޙͲͷఔ౓։ൃϦιʔεΛ
    ׂ͚Δ͔͸ෆ໌
    w ਖ਼௚໰୊͕͋ΔΘ͚Ͱ͸ͳ͍ͷͰ௚͞ͳͦ͏

    View Slide

  22. (Pͷਖ਼௚ͳײ૝
    w +40/΍υϥΠόͳͲ͋·Γ଎͘ͳ͍΋ͷ΋͋Δ͕޻෉͢Ε͹͔ͳΓ଎͍αʔόʔ͕
    ࡞ΕΔ
    w ݱঢ়ͷ഑৴αʔόʔࣗମͷύϑΥʔϚϯεʹ͸ຬ଍͍ͯ͠Δ
    w ຊ֨Ҡߦޙ΋େ͖ͳ໰୊͸ى͍ͬͯ͜ͳ͍
    w ϗοτσϓϩΠͷͨΊʹDJSDVTΛબ୒ͨ͠ͱ͜Ζ(Pͷίʔυ͕ංେԽͤͣʹࡁΜͩ
    w σϓϩΠ͸όΠφϦΛ഑෍͢Δ͚ͩͳͷͰ؆୯
    w 3VCZ͸CVOEMFJOTUBMMͳͲ໘౗
    w HPSPVUJOFͰಈ͘αʔόʔ͸QSFGPSLͷαʔόʔͱ͸άϥϑͷܗ͕ҧ͏ͷͰࣾ಺Ͱ͸ݟ
    ׳Εͳ͍άϥϑʹͳΔ
    w ࣾ಺Ͱ͸1)1 "QBDIF
    ΍6OJDPSOͳͲQSFGPSLͷαʔόʔ͕ओྲྀ

    View Slide