$30 off During Our Annual Pro Sale. View Details »

ピクシブ広告サーバー開発・運用の軌跡 2015春インターン講義資料

ピクシブ広告サーバー開発・運用の軌跡 2015春インターン講義資料

2015春インターン講義資料

これの続編です

ピクシブ新広告サーバー構築物語 // Speaker Deck https://speakerdeck.com/catatsuy/pikusibuxin-guang-gao-sabagou-zhu-wu-yu

Kaneko Tatsuya

March 04, 2015
Tweet

More Decks by Kaneko Tatsuya

Other Decks in Technology

Transcript

  1. ϐΫγϒ޿ࠂαʔόʔ
    ։ൃɾӡ༻ͷي੻
    ʙΠϯϑϥͬͯԿ͍ͯ͠Δͷʁʙ
    ϐΫγϒΠϯϑϥDBUBUTVZ

    View Slide

  2. ॾ஫ҙ
    • ՆΠϯλʔϯͷߨٛͱ಺༰͕ॏෳʢಛʹલ൒ʣ͍ͯ͠·͢
    • ՆΠϯλʔϯͷࢿྉΛݟͨਓ͸ͲΜͲΜ࣭໰͍ͯͩ͘͠͞ʂ
    • εϥΠυͷຕ਺͕ଟ͍ͷͰ͕Μ͹ͬͯ෇͍͖͍ͯͯͩ͘͞
    • ࣭໰׻ܴʂ
    • Ή͠Ζ࣭໰͕དྷΔ͜ͱલఏͷࢿྉͰ͢
    • جຊతͳ͜ͱͰ΋ฉ͚Δػձ͸গͳ͍ͱࢥ͏ͷͰԕྀͤͣ

    View Slide

  3. ࣗݾ঺հ
    • catatsuy ͱ͍͏ ID ͰΠϯλʔωοτ্Ͱ׆ಈ
    • ͔͍ͨͭͬͯݺ͹Ε͍ͯΔ
    • ౦ژ޻ۀେֶ޻ֶ෦৘ใ޻ֶՊଔۀ
    • 2013/9ʹେֶΛଔۀޙʹϐΫγϒೖࣾ
    • ΠϯϑϥͰमߦத
    • ޿ࠂαʔόʔͷΠϯϑϥ୲౰ʹ
    • ISUCON4४༏উ

    View Slide

  4. ࠓ೔࿩͢͜ͱ
    • ৽޿ࠂαʔόʔΛ࡞ͬͨཧ༝
    • ϐΫγϒͷΠϯϑϥͷڌ఺
    • ϐΫγϒ৽޿ࠂαʔόʔͷ։ൃͱឯ༨ۂં
    • ϐΫγϒ৽޿ࠂ഑৴αʔόʔΠϯϑϥશମ૾
    • ϐΫγϒ৽޿ࠂαʔόʔσϓϩΠ
    • ϐΫγϒ৽޿ࠂαʔόʔ؂ࢹํ๏
    • ຊ֨ӡ༻લʹىͬͨ͜໰୊ͱରԠ
    • ຊ֨ӡ༻ޙʹىͬͨ͜໰୊ͱରԠ

    View Slide

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

    View Slide

  6. ޿ࠂαʔόʔಛ௃
    • ؅ཧαʔόʔͱ഑৴αʔόʔͷ 2 ͕ͭ͋Δ
    • ؅ཧαʔόʔ͸ϚʔένʔϜ͕޿ࠂΛೖߘ͢Δ
    • ഑৴αʔόʔ͸ೖߘ͞Εͨ޿ࠂΛ഑৴ͯ͠ΠϯϓϨογϣϯ਺ʢද
    ࣔ਺ʣͱΫϦοΫ਺Λܭଌ͢Δ
    • ഑৴αʔόʔ͸গͳ͍αʔόʔ୆਺Ͱpixivͱಉఔ౓ͷΞΫηεʹ
    ଱͑ͳ͍ͱ͍͚ͳ͍
    • ॠ࣌ʹϨεϙϯεΛฦͤͳ͍ͱpixivͷϢʔβʔମݧͷ࣭͕௿Լ͢
    Δ

    View Slide

  7. چ޿ࠂαʔόʔ
    • Debian6/PHP5.3 ͱࣾ಺Ͱ͸ϨΨγʔ؀ڥ
    • Debian7/PHP5.5 ͕ࣾ಺ඪ४؀ڥ
    • APC ͱ͍͏ڞ༗ϝϞϦͷػߏΛϑϧ׆༻ͯ͠ߴ଎ʹϨεϙϯεΛฦ͢
    • APC ͸ PHP5.5 Ͱഇࢭ͞Ε͍ͯͯ pixiv Ͱ͸୅ସͷ APCu Λ࢖༻
    • ͔͠͠ APCu ͸όΪʔͳͷͰ pixiv Ͱ͸ݶఆతʹ࢖༻
    • ݱ޿ࠂαʔόʔ͸ APC ͷػೳΛ͔ͳΓ࢖͍ͬͯΔͨΊҠߦෆՄೳ
    • ΠϯϓϨογϣϯ਺ͷߋ৽͸ 1 ͓͖࣌ؒͳͲ͔ͳΓׂΓ੾ͬͨઃܭͰߴ଎ͳϨεϙϯεΛ࣮ݱ
    • ΠϯϓϨογϣϯ਺͕ϦΞϧλΠϜʹ෼͔Βͳ͍ͱ໨ඪΠϯϓ਺ʹ౸ୡͤ͞Δͷ͕೉͍͠
    • ࣗಈΠϯϓϨογϣϯ਺ௐઅػೳ΋ͳ͍ͷͰखಈରԠ
    • ػೳ֦ு΋΄΅ෆՄೳ

    View Slide

  8. ϐΫγϒͷαʔόʔڌ఺
    ࣗࣾαʔόʔϧʔϜ
    ϕχϠ൘αʔόʔ
    ։ൃ
    ৽॓%$
    QJYJW
    %#ɾը૾ɾ"1
    നՏ%$
    ը૾഑৴
    ޿ࠂαʔόʔ
    w ্ͷڌ఺ʢެ։৘ใʣ
    w ͦΕͧΕઐ༻ઢͰܨ͕͍ͬͯΔ
    w ࠓճͷ޿ࠂαʔόʔ͸നՏʹ͋Δ

    View Slide

  9. ؅ཧαʔόʔ
    • ϚʔένʔϜ͕޿ࠂΛೖߘ͢Δͷͱ഑৴αʔόʔͷܭଌ݁ՌΛอଘͯ͠ݟΕΔΑ
    ͏ʹ͢Δ
    • ࣾ಺ͷਓ͔ؒ͠৮Βͳ͍ͷͰϦιʔε͸͋·Γׂ͚ͳ͍͕ɼۀ຿ޮ཰ʹؔΘΔͷ
    ͰϚʔένʔϜͷػೳཁ๬ʹ͸ਝ଎ʹରԠ͢Δඞཁ͕͋Δ
    • ؅ཧαʔόʔ͕޿ࠂαʔόʔͷ୯Ұো֐఺ʹͳΒͳ͍Α͏ʹ͢Δඞཁ͕͋Δ
    • ؅ཧαʔόʔ͕ࢮΜͰ΋޿ࠂͷ഑৴͸΍Γଓ͚ΔΑ͏ʹ
    • Ruby on RailsͰগͳ͍ϦιʔεͰAPIΛؚΊͯ࡞੒͢Δ͜ͱʹ
    • Rails͸ϑϧελοΫϑϨʔϜϫʔΫͰ࠷খݶͷ࣮૷Ͱ༷ʑͳػೳ͕࢖͑Δ
    • JSONܗࣜͷAPI΋Rubyͩͱ࡞Γ΍͍͢

    View Slide

  10. ؅ཧαʔόʔ
    • σʔλϕʔε͸MySQLΛ࢖༻
    • pixiv͸MySQLͳͷͰେن໛MySQLӡ༻ͷϊ΢ϋ΢͕͋Δ
    • ޿ࠂσʔλ͸ফ͑Δͱ࠷ѱձ͕ࣾࢮ͵ͷͰ৴པੑͷߴ͍σʔλετΞΛ࢖͍͍ͨ
    • ࠓ·ͰMySQL͕ݪҼͰσʔλΛফࣦͨ͜͠ͱ͕ແ͍ͷͰ৴པੑ͸ߴ͍
    • ഑৴͢Δ޿ࠂσʔλΛJSONͷAPIܦ༝Ͱ഑৴αʔόʔʹ
    • ؅ཧαʔόʔ͕Ұ࣌తʹࢮΜͰ΋഑৴αʔόʔʹӨڹ͕ग़ͳ͍Α͏ʹ
    • ഑৴αʔόʔ͕දࣔɾΫϦοΫ਺ͷूܭ݁ՌΛ؅ཧαʔόʔͷMySQLʹ௚઀ॻ͖ࠐΉ
    • MySQLʹ௚઀τϥϯβΫγϣϯΛ࢖ͬͯॻ͖ࠐΉ
    • ࣦഊͨ͠ΒϩʔϧόοΫͯ͠Ұఆ࣌ؒޙʹfluentd͕ϦτϥΠ

    View Slide

  11. ؅ཧαʔόʔ
    • Ruby on Rails ͸ࣾ಺Ͱ΋࠾༻ྫ͕ଟ͍ͷͰϊ΢ϋ΢͕͋Δ
    • BOOTH/pixivFACTORY/WorldCosplay/pixivίϛοΫetc
    • αʔόʔ͸ Unicorn ͰσϓϩΠ͸ Capistrano
    • ࣾ಺Ͱ΋࠾༻࣮੷͕͋Δ
    • Capistrano ͸ Ruby ੡ͳͷͰ Ruby पΓͷػೳ͕ॆ࣮͍ͯ͠Δ
    • Unicorn ͸ Rack ΞϓϦέʔγϣϯ޲͚ͷ prefork ܕαʔόʔ
    • ΠϯϑϥΤϯδχΞͱͯ͠޻෉ͨ͠ͱ͜Ζ͸ಛʹͳ͍
    • ࣾ಺͔Β͔͠ΞΫηε͕དྷͳ͍ͷͰ Rails ΞϓϦ͕ಈ͔ͤΕ͹े෼

    View Slide

  12. Rack/Capistrano/Unicorn
    • Rack
    • RubyͷͨΊͷαʔόʔͱWebΞϓϦέʔγϣϯؒͷ΍ΓऔΓΛ୲౰
    • Rackʹଇͬͯ࡞ΒΕͨWebΞϓϦέʔγϣϯ͸Rack༻ͷαʔόʔͰಈ͔͢͜ͱ͕Մೳ
    • Rails/SinatraͳͲओཁͳRubyͷWebϑϨʔϜϫʔΫ͸ରԠ
    • Capistrano
    • σϓϩΠͳͲࣗಈԽ͍ͨ͠αʔόʔૢ࡞ΛࣗಈԽ͢Δπʔϧ
    • Ruby੡ͳͷͰRubyपΓͷػೳ͕ॆ࣮
    • γΣϧεΫϦϓτͩͱԿ͔ΒԿ·Ͱࣗ෼Ͱॻ͔ͳ͍ͱ͍͚ͳ͍ͷͰָͰอकੑ΋ߴ͘ͳΔ
    • Unicorn
    • ਓؾͷߴ͍Rack༻αʔόʔ

    View Slide

  13. • ਌ϓϩηε͕ΞϓϦέʔγϣϯΛϩʔυͯ͠ιέοτϑΝΠϧΛ࡞੒͢Δʢˠmasterϓϩηεʣ
    • forkͯ͠ࢠϓϩηεΛ࡞Δʢˠworkerϓϩηεʣ
    • forkͳͷͰιέοτϑΝΠϧͷϑΝΠϧσΟεΫϦϓλͳͲͷϦιʔε͸ڞ༗͞ΕΔ
    • Copy on WriteͳͷͰࢠϓϩηε͕վΊͯΞϓϦέʔγϣϯΛϩʔυ͢Δඞཁ͸ͳ͍
    • ͋Β͔͡ΊforkΛ͓ͯ͘͠ͷͰpreforkͱݺ͹ΕΔ
    • worker͕1 requestΛҾ͖ड͚ͯऴྃ࣍ୈ࣍ͷϦΫΤετΛड͚Δ
    • worker͸͋Δఔ౓ͷϦΫΤετΛड͚ΔͱmasterͱͷϝϞϦͷဃ཭͕େ͖͘ͳΓϝϞϦΛᷰ͏Α͏ʹͳΔͷ
    Ͱmasterϓϩηε͕workerΛఆظతʹkillͯ͠৽͘͠fork͢Δ
    unicorn(master) unicorn(worker)
    unicorn(worker)
    unicorn(worker)
    unicorn(worker)
    ਌ϓϩηε ࢠϓϩηε
    socket
    'PSL
    4PDLFU࡞੒
    ϑΝΠϧ
    σΟεΫϦϓλ

    View Slide

  14. ഑৴αʔόʔ
    • ࠷΋ٕज़త՝୊͕େ͖͍
    • গͳ͍αʔόʔ୆਺Ͱ pixiv ͱ΄΅ಉ͡ΞΫηε਺Λ͞͹͘ඞཁ͕͋Δ্ʹߴ଎ʹ޿ࠂσʔ
    λΛฦ͢ඞཁ͕͋Δ
    • ܭଌϛε͸͋ͬͯ͸ͳΒͳ͍ͷͰ৴པੑͷߴ͍γεςϜͰ͋Δඞཁ͕͋Δ
    • མͪͨΒͦͷ෼ձࣾͷऩӹ͕མͪΔ্ʹ௕࣌ؒ෮ؼͰ͖ͳ͍ͳΒิరͷඞཁ͕ग़ͯେ੺ࣈ
    • ΠϯϑϥΤϯδχΞͱͯ͠։ൃʹ΋ؔΘΔ
    • ϐΫγϒͰ͸ΠϯϑϥͰ΋ඞཁʹԠͯ͡։ൃ͢Δ
    • Πϯϑϥ͔ͩΒίʔυ͸ॻ͔ͳ͍Έ͍ͨͳձࣾ΋͋ΔΒ͍͕͠ɼϐΫγϒͰ͸ͦ͏͍͏
    ͜ͱ͸ͳ͍
    • ಛʹύϑΥʔϚϯεपΓ΍ϛυϧ΢ΣΞͷબ୒ͳͲ͸Πϯϑϥ͕ਂؔ͘ΘΔඞཁ͕͋Δ

    View Slide

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

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

    View Slide

  16. ഑৴αʔόʔઃܭ
    • ܰྔͳ KVS ʹ޿ࠂσʔλΛอଘ͓͍ͯͯ͠ϦΫΤετʹԠͯͦ͡ͷσʔλΛฦ͢ΞϓϦέʔ
    γϣϯ
    • ը૾σʔλ΋ಉ༷ʹ഑৴͢Δ͕Ωϟογϡ͓͖ͯ͠ը૾ੜ੒͕ෳ਺ճߦΘΕͳ͍Α͏ʹ͢Δ
    • ը૾σʔλࣗମͷදࣔ਺ΛܭଌΛ͢Δ͜ͱ͸ͳ͍
    • ը૾σʔλΛ౎౓ੜ੒ͨ͠Β͕͔͔࣌ؒΓ͗͢Δ
    • දࣔ΍ΫϦοΫ͕͞ΕΕ͹ϑΝΠϧʹॻ͖ࠐΉʢksk.logʣ
    • fluentd Ͱ ksk.log Λ؂ࢹͯ͠ܭଌ݁ՌΛ؅ཧαʔόʔͷ MySQL ʹॻ͖ࠐΉ
    • άϩʔόϧIPͰϢʔβʔͷϦΫΤετΛ௚઀ड͚Δ͜ͱͰߴ଎ʹϨεϙϯεฦ٫
    • DNSϥ΢ϯυϩϏϯෳ਺ͷάϩʔόϧIP͕ొ࿥͞Ε͍ͯΔͷͰͲΕ͔Λબ୒

    View Slide

  17. %/4
    w %/4͸*1ΞυϨεʹ໊લΛ෇͚Δ࢓૊Έ
    w %/4αʔόʔʹฉ͘ͱ*1ΞυϨεΛڭ͑ͯ͘ΕΔ
    w ෳ਺ͷ*1ΞυϨεΛొ࿥ͯ͠ΞΫηεΛ෼ࢄͤ͞Δͷ͕%/4ϥ΢ϯυϩϏϯ
    w XXXQJYJWOFUͷ৔߹
    w Ϣʔβʔ͕Ωϟογϡ%/4αʔόʔʹXXXQJYJWOFUͷ໊લղܾΛཁٻ͢Δ
    w Ωϟογϡ%/4αʔόʔ͕ϧʔταʔόʔʹOFUΛ؅ཧ͍ͯ͠ΔݖҖ%/4αʔόʔͷ*1ΞυϨεΛฉ͘
    w Ωϟογϡ%/4αʔόʔ͕OFUͷݖҖ%/4αʔόʔʹQJYJWOFUͷݖҖ%/4αʔόʔͷ*1ΞυϨεΛฉ͘
    ʢࣾ಺Ͱ؅ཧ͍ͯ͠Δαʔόʔʣ
    w QJYJWOFUͷݖҖ%/4αʔόʔʹXXXQJYJWOFUͷ*1ΞυϨεΛฉ͘
    %/4
    XXXQJYJWOFU

    View Slide

  18. fluentd
    • Ruby੡ͷϩάऩूιϑτ΢ΣΞ
    • DSLͰॲཧΛॻ͍͍ͯ͘
    • ϩάϑΝΠϧΛଞͷαʔόʔʹू໿ͤ͞Δ
    • ϩάΛղੳͯ݁͠ՌΛͲ͔͜ʹ౤͛Δ
    • ϓϥάΠϯ͕ॆ࣮͍ͯͯ͠ઃఆΛॻ͚ͩ͘Ͱ༷ʑͳػೳ͕ར༻Մೳ
    • ࣦഊ࣌ʹϦτϥΠͨ͠Γɼॏෳͯ͠ૹΒͳ͍ػೳͳͲ͕͋Δ
    • pixivͰ͸ओʹΞΫηεϩάɾΤϥʔϩάऩूΛͯ͠Ϣʔβʔͷಈ޲֬ೝ΍
    Τϥʔݕ஌ͳͲʹ࢖ΘΕΔ͜ͱ͕ଟ͍

    View Slide

  19. ωοτϫʔΫͷ৑௕Խ
    • άϩʔόϧIPͰ௨৴͢ΔͷͰԿ͔͕ނোͯ͠௨৴Ͱ͖ͳ͘ͳΔͱҰ੾Կ΋Ͱ͖ͳ
    ͘ͳΔ
    • έʔϒϧͷஅઢɾNICނোɾεΠονϙʔτނোɾεΠονނো
    • ͜͏͍ͬͨނো͸සൟʹى͜Δ
    • ނোͯ͠΋େৎ෉ͳΑ͏ʹ৑௕Խ͢Δඞཁ
    • ৑௕Խͱ͸Ұ෦ͷγεςϜো֐ʹඋ͑ͯ༧උ૷ஔͳͲΛ༻ҙ͓ͯ͘͜͠ͱ
    • ෳ਺ͷNICΛ༻ҙͯ͠ผͷεΠονʹ઀ଓ
    • ͦΕͧΕͷNICʹಉ͡IPΞυϨεΛ෇͚ͯยํ͕ނোͨ͠ΒࣗಈͰ੾ΓସΘΔ
    Α͏ͳ࢓૊Έʹ͍ͨ͠

    View Slide

  20. Bonding
    • LinuxΧʔωϧͷϞδϡʔϧͷ1ͭ
    • ෳ਺ͷNICΛ·ͱΊͯ1ͭͷ࿦ཧNICͱͯ͠ѻ͑ΔΑ͏ʹͳΔ
    • ϐΫγϒͰ͸جຊతʹނো͢Δ·Ͱ1ͭΊͷ෺ཧNICͷΈΛ࢖ͬͯނো࣌ʹ੾Γସ͑Δ
    active-backupΛ࢖༻
    • ͜Ε͕Ұ൪ѻ͍΍͍͢Β͍͠
    • ݱࡏMII(Media Independent Interface)؂ࢹΛ࢖ͬͯ෺ཧNICͷLink Downͯ͠ͳ͍͔؂ࢹ
    • ௿ίετʹ؂ࢹՄೳ
    • Link Downͯ͠ͳ͍ͷʹ௨৴Ͱ͖ͳ͍ঢ়گͰରԠ͕Ͱ͖ͳ͍
    • ARP؂ࢹΛ͢Ε͹௨৴Ͱ͖ͳ͍ঢ়گͰ΋೺ѲͰ͖Δ͕ߴίετ

    View Slide

  21. ഑৴αʔόʔϓϩτλΠϓ
    • ϓϩτλΠϓ͸RubyͷϑϨʔϜϫʔΫPadrino੡ͰσʔλετΞͱͯ͠GroongaΛ࢖༻
    • Groonga͸શจݕࡧΤϯδϯͱͯ͠։ൃ͞Ε͓ͯΓܰྔͳKVSͱͯ͠࢖͏ʹ͸޲͔ͳ͍
    • ଎౓ɾ҆ఆੑɾ৴པੑతʹࠓճͷ഑৴αʔόʔʹ͸޲͔ͳ͍ͱ൑அ
    • ܰྔͳKVSͱͯ͠memcachedΛఏҊ
    • ొ࿥͞Ε͍ͯΔ޿ࠂσʔλ͸๲େ͕࣮ͩࡍʹͦͷ࣌഑৴͠ͳ͚Ε͹޿ࠂσʔλ͸গ
    ͳ͍
    • ݩσʔλ͸؅ཧαʔόʔ͕શ͍ͯ࣋ͬͯΔͷͰ഑৴αʔόʔ্ʹӬଓσʔλΛ࣋ͭ
    ඞཁ͸ͳ͍
    • େن໛ͳ Web ΞϓϦέʔγϣϯͰ΋࠾༻ྫ͕ଟ͘ɼ଎౓ɾ҆ఆੑɾ৴པੑͲΕ΋
    ߴ͍

    View Slide

  22. Padrino
    • Sinatraϕʔεͷ Web ΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
    • Sinatra͸ඇৗʹγϯϓϧͳRackϕʔεͷWebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
    • جຊతʹDSLͰϧʔςΟϯάͷΈΛߦ͏
    • ੔ͬͨSinatraͱ͍͏ײ͡
    • Sinatraͷ஌ࣝ͸΄΅ͦͷ··׆͔ͤΔ
    • RailsΑΓ΋ػೳ͸গͳ͍͕΄ͱΜͲͷ৔߹ࠔΒͳ͍ͱࢥ͏
    • ࠓճ͸αʔόʔʹUnicornΛ࢖༻
    • RailsΞϓϦͰࣾ಺Ͱ΋ಋೖ࣮੷͕͋Δ
    • ؅ཧαʔόʔͰ΋࢖͍ͬͯΔ

    View Slide

  23. memcached
    • KVSͱͯ͠ͱͯ΋ஶ໊Ͱ࠾༻ྫ΋ଟ͍
    • Key-Value Store
    • memcached͸Ωʔ΋όϦϡʔ΋จࣈྻͷΈ
    • Facebook/GoogleͳͲ౤ೖ࣮੷͸਺஌Εͣ
    • ϝϞϦΩϟογϡͳͷͰӬଓσʔλ͸อଘͰ͖ͳ͍
    • ऴྃͨ͠Βσʔλ͸ফ͑ͯ͠·͏
    • อଘͰ͖Δ༰ྔ͸ϝϞϦΩϟογϡͳͷͰগͳ͍
    • ઃఆʹΑΔ͕౥ࡌϝϞϦҎ্͸อଘͰ͖ͳ͍
    • ߴ଎͔ͭ҆ఆ͍ͯ͠ΔͷͰΩϟογϡͱͯ͠Α͘ར༻͞ΕΔ

    View Slide

  24. RubyʹΑΔ഑৴αʔόʔ
    • Padrino੡ͰKVSͱͯ͠memcachedΛ࢖༻ͯ͠ݕূ
    • ϓϩϑΝΠϦϯάΛऔΓͳ͕ΒϘτϧωοΫΛͳ͍ͯ͘͘͠
    • ϓϩϑΝΠϦϯάʹϑϨʔϜϫʔΫ૚͔͠ग़ͯ͜ͳ͘ͳ͖ͬͯͨͷͰ Padrino ґଘΛ֎ͯ͠ Sinatra Ξ
    ϓϦʹ
    • ab(Apache Bench)/Apache JMeterΛ࢖ͬͯੑೳΛνΣοΫ
    • ͦΕͰ΋໨ඪͷੑೳ͕ग़ͤͣɼUnicornҎ֎ͷαʔόʔͰݕূ
    • Unicorn͕΋ͬͱ΋ੑೳ͕ߴ͍ͱ͍͏݁Ռʹ
    • JRubyͰಈ͘Α͏ʹϦϥΠτͯ͠JRuby༻ͷଞͷαʔόʔ΋ݕূ
    • ݁ہUnicornΛ௒͑ΔੑೳΛग़ͤͣRubyʹΑΔ࣮૷Λஅ೦
    • ࠓճͷ޿ࠂ഑৴αʔόʔͰͷ࿩ͰҰൠతʹUnicorn͕଎͍ͱ͍͏Θ͚Ͱ͸ͳ͍

    View Slide

  25. GolangͰϦϥΠτ
    • ύϑΥʔϚϯεΛٻΊͯGoݴޠͰͷϦϥΠτ
    • Goݴޠ͸Google͕࡞ͬͨ৽͍͠ϓϩάϥϛϯάݴޠ
    • LLΑΓ΋Cݴޠʹ͍ۙ
    • ίϯύΠϧܕ
    • GoroutinesΛ࢖͏ͱ؆୯ʹϚϧνεϨουʹ
    • GoroutinesΛ࢖ͬͯϚϧνεϨουͳαʔόʔΛ࣮૷
    • ୯७ʹϦϥΠτ͚ͩͰ଎͘ͳΔΘ͚Ͱ͸ͳ͔ͬͨ
    • memcachedΛ࢖͏఺ͳͲجຊతͳ෦෼͸શͯ౿ऻ
    • αʔόʔͱͯ͠ͷ౤ೖ͸౰࣌ࣾ಺ॳ

    View Slide

  26. ௒ࢲత PHP vs Ruby vs Go
    • PHP ͸ Apache ্Ͱಈ͘ศརςϯϓϨʔτΤϯδϯΛॻ͘ײ͡
    • ศརؔ਺͸ php.net Ͱݕࡧ͢Ε͹ḿΔ
    • Ruby ͸ϑϨʔϜϫʔΫΛ௨ͯ͡ Rack ΞϓϦέʔγϣϯΛॻ͘ײ͡
    • ϑϨʔϜϫʔΫͷίʔυΛಡΉ͜ͱ͕ଟ͍
    • ίʔυΛॻ͘ͱ͖͸ Rack ΑΓԼͷ͜ͱΛҙࣝ͢Δ͜ͱ͸͋·Γͳ͍
    • Go ͸ import ‘net’ ͱ͔͢Δͱ਺ߦͰαʔόʔΛىಈͰ͖ΔͷͰޙ͸Α͠ͳʹͰ͖Δ
    • godoc ͕෼͔Γ΍͍͢ͷͰͦΕΛಡΉ
    • جຊతʹඞཁͳॲཧΛશ෦ࣗ෼Ͱॻ͘ඞཁ͕͋Δ

    View Slide

  27. NginxͱGoΛܨ͙
    • ϢʔβʔͷϦΫΤετΛ௚઀ Go ͕ड͚ΔͷͰ͸ͳ͘ Nginx Ͱड͚͍ͨ
    • ϢʔβʔͷϦΫΤετΛόοϑΝϦϯάͯ͘͠ΕΔͷͰίωΫγϣϯͷอ࣋ͳͲ໘౗ͳ͜
    ͱΛߟ͑Δඞཁ͕ͳ͘ͳΔ
    • GoͰ͸௿஗ԆͰϨεϙϯεΛฦ͢͜ͱ͚ͩΛߟ͑Ε͹Α͍
    • ΞΫηεϩάͳͲ͕؆୯ʹ࢒ͤΔ
    • ΞΫηε੍ޚͳͲ؆୯
    • ΩϟογϡͷػߏͳͲ͕؆୯ʹ࢖͑Δ
    • ࣾ಺ʹϊ΢ϋ΢͕ଟ͋͘Δ
    • ޿ࠂ͸খ͍͞ύέοτΛ΍ΓͱΓ͢ΔͷͰtcpͩͱΦʔόʔϔου͕େ͖͍
    • UNIX domain socketܦ༝Ͱܨ͙ඞཁ͕͋Δ

    View Slide

  28. UNIX domain socket
    • ϓϩηεؒ௨৴
    • ಉҰϚγϯ্ͳΒ਌ࢠؔ܎ͳͲ͕ແͯ͘΋௨৴͕Ͱ͖Δ
    • tcpͳͲΑΓ΋҆ఆɾߴ଎ʹಈ͘
    • memcachedͱͷ௨৴ʹ΋࢖༻͢Δͱߴ଎͔ͭ҆ఆతʹಈ࡞ͤ͞Δ͜ͱ͕Ͱ͖Δ
    • ΋ͪΖΜ࢖༻͍ͯ͠Δ
    • ϐΫγϒࣾ಺Ͱ͸গͳ͍ϦιʔεͰେྔͷΞΫηεΛߴ଎ʹ͞͹ͨ͘ΊʹࢸΔͱ
    ͜ΖͰ࠾༻͞Ε͍ͯΔ
    • Go ͷ৔߹ net.Listen("unix", path) ͷΑ͏ʹ͢Ε͹Α͍

    View Slide

  29. hot deploy
    • DNSϥ΢ϯυϩϏϯͷͨΊִ཭͕ࠔ೉
    • ޿ࠂαʔόʔ͸AWSͰ͸ͳ͍ͷͰELB͸࢖͑ͳ͍
    • pixivपลαʔϏε͸ίετ໘͔ΒAWSΛ࢖Θͳ͍
    • ௒େྔֆഅɾpixivࣣ༦୹࡭ࡇͳͲظؒݶఆͷ΋ͷʹ͸AWS͸࢖ΘΕ͍ͯ
    Δ
    • ݱࡏͷ޿ࠂۀքͰ͸AWSΛ࢖͏ͷ͕ଟ͍ͷͰELBΛ࢖ͬͯhot deployΛ
    ࣮ݱ͍ͯ͠Δձ͕ࣾଟ͍
    • ޿ࠂαʔόʔͳͷͰσϓϩΠ࣌ʹμ΢ϯλΠϜ͕ൃੜͯ͠͸͍͚ͳ͍

    View Slide

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

    View Slide

  31. Circus΁ϓϧϦΫ
    • Circus͸GitHubͰ։ൃ͞Ε͍ͯΔ
    • Debianͷinit.dεΫϦϓτ͸CircusࣗମͷϩάΛग़ྗ͠ͳ͔ͬͨ
    • ग़ྗͰ͖ΔΑ͏ʹมߋͯ͠ϓϧϦΫ΋ͯ͠ΈΔ
    • merge͞Εͨ
    • ϐΫγϒͰ͸ࣾ಺Ͱ࢖༻͍ͯ͠ΔΦʔϓϯιʔεϓϩμΫτʹύονΛૹΔͷ͸ਪ
    ঑͞Ε͍ͯΔ
    • ༗໊ͳϓϩμΫτͰ΋ࡉ͔͍෦෼͸ద౰ͳ͜ͱ͕ଟ͍
    • Mozillaͷϓϩηε؅ཧπʔϧcircusʹϓϧϦΫͨ͠࿩ - catatsuyͱ͸ http://
    catatsuy.hateblo.jp/entry/2014/08/18/215602

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  35. ΩϟογϡԽ
    • ΞΫηεͷ౓ʹmemcachedʹΞΫηεΛͨ͠Β஗্͍ʹ CPU ࢖༻཰΋্͕ͬͯ͠·ͬͨ
    • memcachedͷऔಘ݁ՌΛΞϓϦέʔγϣϯଆͰ30ඵؒΩϟογϡ͢Δ͜ͱʹ
    • ௕͗͢Δͱ޿ࠂσʔλͷ൓ө͕஗ΕΔ
    • ΩϟογϡԽ͸ۜͷ஄ؙͰ͸ͳ͍
    • ifจ͸δϟϯϓ໋ྩͳͷͰҋӢʹ࢖͏ͱ஗͘ͳΔ
    • ܭࢉ݁ՌͷΩϟογϡͳͲ΋෼ذ༧ଌ͕౰ͨΓʹ͍͘ܗͩͬͨΓ͢Δͱ౎౓ܭࢉͤͨ͞ํ
    ͕଎͍ࣄ͕ଟ͍
    • ΞϓϦέʔγϣϯͷෳࡶ౓Λ্͛Δ
    • ΩϟογϡԽ͸ଌఆͯ͠ޮՌ͕͋Δ෺Ҏ֎͸࢖༻͠ͳ͍
    • ਪଌ͢Δͳ ܭଌͤΑ

    View Slide

  36. JSONͱMessagePack
    • memcachedͷόϦϡʔʹJSONΛೖΕͯGoଆͰparse͍͕ͯͨ͠ϓϩϑΝΠϦϯά
    ͔Βparseʹ͕͔͔͍࣌ؒͬͯΔ͜ͱ͕൑໌
    • JSONͱಉ͡Α͏ʹѻ͍΍͘͢ߴ଎ʹparseͰ͖ΔMessagePackΛ࢖༻͢Δͱߴ଎ʹ
    ಈ࡞ͨ͠
    • fluentdͷ಺෦Ͱ΋MessagePack͸࢖ΘΕ͍ͯΔ
    • Go͸JSONपΓͷػೳ͕ॆ࣮͍ͯ͠Δ͚ͩ஗͍
    • ஗͔ͬͨΒϓϩϑΝΠϦϯάΛऔΓϘτϧωοΫΛݟ͚ͭͯରࡦΛߟ͑Δ΂͖
    • Goʹͨ͠Βඞͣ଎͘ͳΔͱ͍͏͜ͱ͸ͳ͍
    • ਪଌ͢Δͳ ܭଌͤΑ

    View Slide

  37. σϓϩΠ
    • ࣾ಺σϓϩΠπʔϧpploy(OSS)Λ࢖͏
    • pixivͷσϓϩΠΛࢧ͑Δpploy - pixiv engineering blog http://inside.pixiv.net/entry/
    2014/12/25/102410
    • σϓϩΠαʔόʔ্ͰεΫϦϓτΛ࣮ߦग़དྷΔ
    • γΣϧεΫϦϓτͰ΋PHPͳͲͰ΋Α͍ʢࠓ͸શ෦γΣϧεΫϦϓτʣ
    • fluentd͸HUPγάφϧΛૹΔͱϦϩʔυͰ͖Δ
    • init.dεΫϦϓτΛࣗલͰ࡞੒
    • Go͸ϥΠϒϥϦʹґଘ͠ͳ͍࣮ߦόΠφϦΛίϯύΠϧͰੜ੒
    • σϓϩΠαʔόʔͰίϯύΠϧ֤ͯ͠αʔόʔ΁όΠφϦΛ഑෍

    View Slide

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

    View Slide

  39. ϓϩηε؂ࢹ
    • ΞϓϦέʔγϣϯ͸Circus
    • memcached, fluentd͸monitΛར༻
    • monit͸pidϑΝΠϧΛ࡞Δinit.dεΫϦϓτ͕͋ΔͳΒ؆୯ʹ
    ϓϩηε؂ࢹ͕Ͱ͖Δ
    • memcached͸init.dεΫϦϓτ͕طʹ͋ͬͨ
    • fluentd͸reload࣌ʹHUPγάφϧΛૹΔͨΊʹinit.dεΫϦ
    ϓτΛࣗ࡞͍ͯͨ͠

    View Slide

  40. ࢮ׆؂ࢹ
    • ϐΫγϒ͸NagiosΛ࢖͍ͬͯΔͷͰNagiosͰ؂ࢹ
    • ΞϓϦέʔγϣϯ͸εςʔλείʔυ200൪Λฦ͚ͩ͢ͷϧʔςΟϯάΛ༻ҙͯ͠؂ࢹ
    • fluentd͸monitor_agentΛ࢖ͬͯ؂ࢹ
    • Nginx͸stub_statusΛ࢖ͬͯ؂ࢹ
    • Circus͸circusctl statusͷ݁Ռ͔Β؂ࢹ
    • memcached͸tcp͕ૄ௨͍ͯ͠Δ͔Ͳ͏͔Λ؂ࢹ
    • memcached͸ύονΛ౰ͯΔͱTCPιέοτͱUNIXυϝΠϯιέοτΛಉ࣌ʹ
    listenͰ͖Δ

    View Slide

  41. ىͬͨ͜τϥϒϧɾ՝୊ͱ
    ղܾࡦ
    ʙຊ֨ӡ༻લฤʙ

    View Slide

  42. ഑৴தͷ޿ࠂσʔλ͕৽͍͠
    ޿ࠂΛೖߘ్ͨ͠୺ʹফ͑ͨ

    View Slide

  43. ഑৴தͷ޿ࠂσʔλ͕৽͍͠
    ޿ࠂΛೖߘ్ͨ͠୺ʹফ͑ͨ
    • telnet localhost 11211Ͱ11211ϙʔτͰىಈ͍ͯ͠Δmemcachedͱձ࿩Ͱ͖Δ
    • statsͰىಈதͷmemcachedͷঢ়ଶΛ֬ೝͰ͖Δ
    • evictions͕େྔൃੜ
    • ༰ྔෆ଍Ͱmemcached͕௥͍ग़ͨ͠ճ਺
    • limit_maxbytes͕૝ఆΑΓ͔ͳΓখ͍͞
    • ࠷େ༰ྔ͕খ͍͞ͷͰ௥͍ग़͞Ε͍ͯͨ
    • ઃఆ஋ͷ༩͑ํΛؒҧ͍͑ͯͨ
    • ઃఆΛมߋͨ͠Β൓ө͞Ε͍ͯΔ͔֬ೝ͢Δ͜ͱ
    w ΦϯϝϞϦܕͷϛυϧ΢ΣΞ͸ϝϞϦ࢖༻཰Λ؂ࢹ͢΂͖

    View Slide

  44. NginxͰ഑৴͍ͯ͠Δ޿ࠂͷը
    ૾ΛϢʔβʔͷϒϥ΢β͕Ωϟο
    γϡͯ͘͠Εͳ͍

    View Slide

  45. /(*/9
    ը૾
    $"$)&
    ը૾͍ͩ͘͞ʂ
    ը૾͋͛Δ͚Ͳ
    Ωϟογϡͯ͠Ͷ
    application
    ը૾͕ͳ͍ͷͰ
    ը૾͍ͩ͘͞
    ը૾ૹΓ·͢
    /(*/9
    ը૾
    $"$)&
    ͜ͷը૾ͷΩϟογϡΛ
    ࣋ͬͯΔ͚Ͳߋ৽͋Δʁ
    ߋ৽ͳ͍͔Β
    ͦͷ··࢖ͬͯʂ
    application
    Ұ౓ը૾ΛૹͬͨΒ
    ͠͹Β͘Ωϟογϡ͞ΕΔ
    ͷͰϦΫΤετ͞Εͳ͍
    ճ໨
    ճ໨
    ͱͳΔ͸͕ͣ໰౴ແ༻Ͱ
    ը૾ΛૹΓ͚͍ͭͯͨʜ
    ࠷ॳͷճ͚ͩͰͦͷޙ͸
    ը૾Ωϟογϡ͕ฦ͢ͷͰ
    ϦΫΤετ͞Εͳ͍

    View Slide

  46. NginxͰ഑৴͍ͯ͠Δ޿ࠂͷը૾ΛϢʔβʔ
    ͷϒϥ΢β͕Ωϟογϡͯ͘͠Εͳ͍
    • ϒϥ΢βʹΩϟογϡͯ͠ཉ͍͠ͳΒHTTPͷϨεϙϯεϔομʔʹLast-Modified/
    Expires/Cache-ControlΛ෇͚Δ
    • ϒϥ΢β͸ಉ͡URL΁ͷϦΫΤετͷϔομʔʹIf-Modified-SinceΛ෇͚ͯϒϥ΢β
    ͕औಘͨ͠೔࣌Λ஌Βͤͯ͘ΕΔ
    • If-Modified-SinceΑΓޙʹߋ৽͞Ε͍ͯΕ͹৽͍͠σʔλΛɼߋ৽͕ͳ͚Ε͹εςʔ
    λείʔυ304(Not Modified)Λฦͯ͠ΩϟογϡΛͦͷ··࢖ͬͯ΋Β͏
    • ࠓճͷ޿ࠂαʔόʔͰ͸ը૾͕มΘΕ͹URL͕มΘΔͨΊը૾σʔλʹߋ৽͕ೖΔ͜
    ͱ͸ͳ͍
    • ͦ΋ͦ΋ը૾͸NginxଆͰΩϟογϡ͞Εͯ͠·͏ͷͰΞϓϦέʔγϣϯͷϨεϙϯ
    ε಺༰͕มΘ͍ͬͯͯ΋Nginx͸ؾ෇͔ͳ͍

    View Slide

  47. Nginx͕ϑΝΠϧͷߋ৽༗ແΛͲ͏൑அ͢Δͷ͔
    • If-Modified-SinceΛݟͯ200͔304͔Λ൑அ͢ΔͷͰNginx͕ը૾σʔλͷλΠϜελϯϓΛ೺Ѳͯ͠
    ͍ͳ͍ͱμϝͰ͸ʁ
    • Goͷαʔόʔ͕ฦ͢ͳΒλΠϜελϯϓͰ͸ͳ͘Last-ModifiedϔομʔͰ൑அ͍ͯ͠Δʁ
    • memcachedʹ޿ࠂσʔλ͕͍ͭೖߘ͞Εͨͷ͔ͷ৘ใΛೖΕͯͳ͔ͬͨͷͰ1970/1/2ʹ
    • ͋·Γྑ͘ͳ͍͕ը૾σʔλ͕มΘΕ͹URL͕มΘΔͷͰ࣮༻্໰୊͸ͳ͍
    • ͜ͷͨΊʹmemcachedʹ֨ೲ͢ΔσʔλΛ૿΍͢ͷ͸खؒΛߟ͑Δͱׂʹ߹Θͳ͍
    • epoch Time 0ͷ1970/1/1ͩͱόάͩͱࢥΘΕΔՄೳੑ͕͋ΔͷͰආ͚ͨ
    • NginxͷΩϟογϡ͕ݹ͍··ͰҰ෦ͷը૾ͰΩϟογϡ͞Εͣ
    • ΩϟογϡΛ࡟আͨ͠Βશը૾Ͱ૝ఆ௨Γͷಈ͖ʹ
    • যΒͣʹҰͭҰͭ֬ೝͯ͠ঢ়گΛ೺Ѳ͠ͳ͕Β࢓༷Λௐ΂Δ͜ͱ

    View Slide

  48. GoͷΤϥʔϩάʹϢʔβʔͷ
    IPΞυϨεΛද͍ࣔͨ͠

    View Slide

  49. GoͷΤϥʔϩάʹϢʔβʔͷ
    IPΞυϨεΛද͍ࣔͨ͠
    • ߈ܸ͞Ε͍ͯΔՄೳੑ͕͋ΔͷͰΤϥʔΛى͍ͯ͜͠ΔϢʔβʔͷIPΞυϨεΛ஌Γ͍ͨ
    • ϑϩϯτ͕NginxͰproxyͯ͠Goଆʹ౉͢
    • ϢʔβʔͷϦΫΤετ͕ͦͷ··౉ΔΘ͚Ͱ͸ͳ͍
    • ૹ৴ݩIPΞυϨε͸ϢʔβʔͰ͸ͳ͘Nginx͕ಈ͍͍ͯΔαʔόʔ
    • proxy_set_headerͰϢʔβʔͷIPΞυϨεΛผͷϔομʔʹ෇͚Δ
    • X-Real-IP΍X-Forwarded-Forʹ෇͚Δ
    • GoଆͰϔομʔΛ͏·͘ಡΊͳ͍
    • Goͷίʔυʹ໰୊͕͋Δͷ͔Nginxͷઃఆʹ໰୊͕͋Δͷ͔੾Γ෼͚͕Ͱ͖ͳ͍
    • tcpͳΒtcpdumpΛ͢Ε͹ϦΫΤετͷύέοτ͕௚઀ݟ͑ΔͷͰ੾Γ෼͚͕Ͱ͖Δ͕NginxͱGoͷ௨
    ৴ʹ࢖͍ͬͯΔUNIXυϝΠϯιέοτ͸؆୯ʹݟΕͳ͍

    View Slide

  50. straceͰγεςϜίʔϧΛݟΔ
    • UNIXυϝΠϯιέοτͰ΍ΓऔΓ͢ΔͳΒγεςϜίʔϧͷwrite͸૸Δ
    • γεςϜίʔϧ͕૸ΔͳΒstraceΛ࢖͑͹ݟΕΔ
    • straceͰ΋ྲྀΕͳ͍…
    • ϢʔβʔͷϦΫΤετΛड͚͍ͯΔͷ͸GoroutineͰεϨουͰಈ͍͍ͯΔ
    • straceͷ-fΦϓγϣϯΛ࢖͏ͱεϨου΋τϨʔεͯ͘͠ΕΔ
    • -sΦϓγϣϯͰ௕͍ϦΫΤετͰ΋શ෦ݟΕΔΑ͏ʹͳΔ
    w ໰୊͕ىͬͨ͜Β·ͣݪҼΛ੾Γ෼͚Δ
    • nginx - UNIXυϝΠϯιέοτ௨৴ͷ಺༰Λݟ͍ͨ - Qiita http://qiita.com/catatsuy/items/
    e514e8bd45270106b17e

    View Slide

  51. ͏Θͬ…ࢲͷϖʔδΩϟο
    γϡ૿͑͗͢…ʁ

    View Slide

  52. ͏Θͬ…ࢲͷϖʔδΩϟογϡ૿͑͗͢…ʁ
    • ࠓճͷ޿ࠂαʔόʔ͸େྔͷϩάΛग़ྗ͢Δ
    • ࢖༻͍ͯ͠ͳ͍ϩά΋ϖʔδΩϟογϡʹࡌ͍ͬͯΔͷͰ࢖༻͠ͳ͍ϩάϑΝ
    Πϧ͸cronͰఆظతʹϖʔδΩϟογϡ͔Β࡟আ͢Δඞཁ͋Γ
    • cpanϞδϡʔϧͷSys::PageCacheͰ࡟আͰ͖Δ
    • ͜ΕͰϖʔδΩϟογϡΛ཈͍͑ͯͨ͸͕ͣmuninͷάϥϑΛݟΔͱ͋Δ࣌
    ͔Βಥવ૿͍͑ͯΔ
    • ϖʔδΩϟογϡ͕૿͑͗͢Δͱswapͯ҆͠ఆՔಇʹ໰୊͕ग़ΔՄೳੑ͕ߴ
    ͘ରԠ͕ඞཁ
    • ͲͷϩάϑΝΠϧ͕ϖʔδΩϟογϡΛ͍ᷰͬͯΔͷ͔෼͔Βͳ͍

    View Slide

  53. View Slide

  54. find / -type f -name "*" -size +1000k -mmin -60 2> /dev/null \
    | xargs sudo pagecache-check.pl 2> /dev/null \
    | perl -ne 'if ((m{(.*?)\s.*cached/total_pages=(.*)/.*}) && ($2
    > 0)) { print $2, "\t", $1, "\n"; }' \
    | sort -nr
    w 6/*9Β͘͠ίϚϯυΛ૊Έ߹ΘͤͯQFSMͰ੔ܗ͢Δ
    w ϩάϩʔςʔτͷࣦഊɾϩάΛ΄ͱΜͲग़ྗ͍ͯ͠ͳ͔ͬͨΞϓϦ
    έʔγϣϯ͕ಥવϩάΛ͍͢͝੎͍Ͱग़ྗ͢Δ͜ͱ͕ݪҼͩͬͨ
    w άϥϑͰҧ࿨ײΛײͨ͡ΒઈରʹԿ͔͋ΔͷͰೲಘͷ͍͘·Ͱௐ΂
    Δ
    ϖʔδΩϟογϡΛᷰ͏ϩάΛݟ͚ͭΔ

    View Slide

  55. ϩάղੳ༻ͷfluentd
    ͱͷ֨ಆ

    View Slide

  56. ϩάղੳ༻ͷfluentdͱͷ֨ಆ
    • ࠓճ͸ΞϓϦέʔγϣϯʹ΋fluentdΛ࢖͍ͬͯΔ͕ϐΫγϒࣾ಺తʹ͸ϩάղੳ༻్ʹ࢖ΘΕΔ
    • ΞϓϦέʔγϣϯͷΤϥʔϩάΛૹΔ࢓૊Έ
    • Ϣʔβʔղੳ༻ʹΞΫηεϩάΛऩू͢Δ࢓૊Έ
    • ޿ࠂ഑৴αʔόʔʹҟৗ͕ͳ͍͔Nginxͷϩά͔Β؂ࢹ͍ͨ͠
    • εςʔλείʔυ400൪୆͕ಥવ૿͑ͨͳͲ
    • ϨεϙϯελΠϜʹҟৗ͕ͳ͍͔؂ࢹ͍ͨ͠
    • ͜͜਺೔Ͱҟৗʹ଎౓͕མ͍ͪͯΔͳͲ
    • ֤഑৴αʔόʔͷNginxͷϩάΛղੳͯ͠άϥϑԽ
    • άϥϑԽʹ͸σʔλΛPOST͚ͨͩ͠Ͱάϥϑʹͯ͘͠ΕΔGrowthForecastͰ

    View Slide

  57. fluentdͰϩάΛղੳ͢Δ
    • in_tailϓϥάΠϯΛ࢖༻͢ΔͱϩάϑΝΠϧΛtailͰ͖Δ
    • ਖ਼نදݱͳͲͰϩάϑΝΠϧΛղੳͤͯ݁͞ՌΛGrowthForecastʹPOST
    • શϩάΛਖ਼نදݱͰղੳ͍ͯ͠ΔͷͰCPUύϫʔΛ࢖͏
    • ޿ࠂ഑৴αʔόʔ͸ϢʔβʔͷϦΫΤετΛड͚ΔͨΊCPUύϫʔΛ࢖͍ͨ͘ͳ͍
    • ϢʔβʔͷϦΫΤετΛड͚͍ͯͳ͍ผαʔόʔʹϩάΛૹͬͯͦ͜Ͱղੳ͍ͨ͠
    • ͦͷࡍʹͲ͜ͷαʔόʔͷϩά͔͸෼͔ΔΑ͏ʹ͍ͨ͠
    • ϗετ໊΋ؚΊͯૹͬͯ͏·͘ϩάͰղੳ͢Δඞཁ͕͋Δ
    • ଓ͖͸WebͰ
    • fluentdͰϗετ໊෇͖ͰϩάΛड͚औͬͯղੳͯ͠άϥϑʹ͍ͨ͠ - Qiita http://qiita.com/
    catatsuy/items/6755a796423067a77acd

    View Slide

  58. ىͬͨ͜τϥϒϧɾ՝୊ͱ
    ղܾࡦ
    ʙຊ֨ӡ༻ޙฤʙ

    View Slide

  59. .Z42-ͷ༰ྔരൃ

    View Slide

  60. .Z42-ͷ༰ྔരൃ
    w ഑৴αʔόʔ͕ॻ͖ࠐΉϨίʔυΛͦͷ··શ෦࢒͍ͯͨ͠Βσʔλྔ͕΋ͷ͍͢͝੎͍
    Ͱ૿͑ͨ
    w ඞཁͳͷ͸όονॲཧͰੜ੒͞ΕΔϨϙʔτͷσʔλͳͷͰϨϙʔτ͕࡞੒͞Ε͍ͯΕ͹
    ෆཁͷσʔλ
    w ύʔςΟγϣχϯάͰఆظతʹ࡟আ͍ͨ͠
    w .Z42-ͷύʔςΟγϣχϯάͰ͸ϓϥΠϚϦʔΩʔʹύʔςΟγϣχϯά͍ͨ͠Χϥ
    Ϝؚ͕·Ε͍ͯΔඞཁ͕͋Δ
    w NJHSBUJPOͰ"-5&35"#-&ͯ͠"3Ͱ͸໌ࣔతʹQSJNBSZ@LFZΛJEʹ͢Δ
    w ύʔςΟγϣχϯάࣗମ͸ຖ೔࡞ͬͯ͸ফ͢Λ܁Γฦ͢ͷͰNJHSBUJPO͸࡞Βͣʹ୯७ͳ
    όονͰ࣮ߦ͢ΔΑ͏ʹ
    w "-5&35"#-&ͱ࠷ॳͷύʔςΟγϣχϯάΛ࡞Δ࡞ۀ͸͕͔͔࣌ؒΔͷͰࣄલʹ༰ྔΛ
    ༧ଌͯ͠ύʔςΟγϣχϯά͕ඞཁͳ΋ͷΛચ͍ग़͓ͯ͘͠

    View Slide

  61. w ϨίʔυΛظؒͳͲͰ෼ׂ͢Δ͜ͱͰࢀর͠ͳ͚Ε͹ͳΒͳ͍ϨίʔυͷྔΛݮΒ͢
    w શظؒΛݟΔඞཁ͕͋ΔΫΤϦͳΒΉ͠Ζ஗͘ͳΔ
    w ΦϓςΟϚΠβ͕ͲͷύʔςΟγϣϯΛݟΕ͹͍͍͔൑அ͢ΔͷͰͦͷ࣌఺ͰҰ෦ͷύʔςΟγϣ
    ϯͷΈͷࢀরʹͰ͖Ε͹ߴ଎ʹ
    w ಛఆͷύʔςΟγϣϯΛߴ଎ʹ࡟আͰ͖Δ
    w ΠϯσοΫε͕షͬͯ͋ͬͯ΋࡟আ͸௨ৗ஗͍͕ύʔςΟγϣϯͷ࡟আ͸Ұॠ
    w ΠϯσοΫεͷ౷ܭ৘ใ͕յΕͨΓɼϑϥάϝϯςʔγϣϯ͕ൃੜ͢Δ͜ͱ͸ͳ͍
    Ϩίʔυ
    Ϩίʔυ
    Ϩίʔυ
    Ϩίʔυ
    ύʔςΟγϣχϯάղઆ

    View Slide

  62. ϩά͕SSDͷ༰ྔΛṧഭ

    View Slide

  63. ϩά͕44%ͷ༰ྔΛṧഭ
    w LTLMPHΛूܭͯ͠.Z42-ʹॻ͖ࠐΉεΫϦϓτ͕ు͘ϩάΛ೔ճMPHSPUBUF͢ΔΑ͏ʹ͍ͯͨ͠
    w ഑৴ྔ͕૿͑ͯ೔ճͰ͸ڊେ͗ͨ͢
    w σΟεΫ༰ྔ΋ṧഭ͍ͯͨ͠
    w ࣌ؒຖʹMPHSPUBUF͢ΔΑ͏ʹ
    w MPHSPUBUFGϑΝΠϧ໊ͰMPHSPUBUFΛ࣮ߦͰ͖Δ
    w /HJOYͷϩάΛগ͠௕Ίʹ࢒͢Α͏ʹ
    w ೔Ͱ44%ͷ༰ྔΛṧഭˠҰେࣄʹͳΔͱ͜ΖΛةػҰ൅ͰରԠʜ
    w qVFOUEͰϩάΛૹ͍ͬͯΔͷͰૹΓઌʹอଘ͢ΔΑ͏ʹ
    w ޿ࠂαʔόʔ͸ΞϓϦέʔγϣϯͷಛੑ্େྔͷϩάΛు͘ͷͰMPHSPUBUFͷλΠϛϯά΍࢒͢ϩά
    ͷྔΛߟ͑ͳ͍ͱࢮ͸͍ۙ
    w ϩάΛ෠ΔͱҰॠͰࢮʹࢸΔͷͰϩάͷྔͱ44%ͷۭ͖༰ྔʹ஫ҙ͢Δ͜ͱ

    View Slide

  64. Goͷϓϩηε͕
    1ίΞ͔͠࢖Θͳ͍

    View Slide

  65. (Pͷϓϩηε͕ίΞ͔͠࢖Θͳ͍
    w NVOJOͷάϥϑ͕಄ΛଧͬͨΑ͏ʹͳΔ
    w (0."9130$4Λม͑ͯ΋μϝ
    w ͣͬͱʹ͍ͯͨ͠ͷΛ΍ʹ͕ͨ͠େ͖ͳҧ͍͸ݟΒΕͣ
    w ࠓ͸શ୆ʹ͍ͯ͠Δ
    w ΞΫηε͕ҰఆྔΛ௒͑Δͱ/HJOYͷΞΫηεϩάΛૹΔqVFOUEͱϩάΛॻ͖ࠐΉDJSDVT
    ͕$16Λ͔ͳΓᷰ͏Α͏ʹͳΔͷͰ(Pͷϓϩηεʹ$16Λ࢖ΘͤΔඞཁ͸ݱঢ়ͳ͍
    w QQSPGΛݟΕΔΑ͏ʹͯ֬͠ೝ
    w LTLMPHͷॻ͖ࠐΈ͕௚ྻʹ͔࣮͠ߦͰ͖ͳ͍͜ͱ͕ݪҼͱߟ͑ΒΕ͍ͯΔ
    w ݱঢ়େ͖ͳ໰୊͕ൃੜͯ͠ͳ͍ͷͰ༷ࢠݟঢ়ଶ
    w άϥϑͰҧ࿨ײΛײͨ͡ΒઈରʹԿ͔͋ΔͷͰೲಘͷ͍͘·Ͱௐ΂Δ

    View Slide

  66. View Slide

  67. αʔόʔҠߦʹ͍ͭͯ

    View Slide

  68. αʔόʔҠߦͷཧ༝ͱखॱ
    w αʔόʔͷ෺ཧతͳ഑ஔͷؔ܎Ͱ؅ཧαʔόʔͱ഑৴αʔόʔͱόοναʔόʔΛҠߦ͢Δඞཁ͕ग़ͨ
    w ΦϯϓϨͳΒͰ͸ʁ
    w ͦ΋ͦ΋ҠߦͰ͖Δߏ੒ʹ͢Δͱ͜Ζ͔Β։࢝
    w Ҡߦ͢ΔՄೳੑΛߟྀ͍ͯ͠ͳ͔ͬͨ
    w .Z42-αʔόʔʹԾ૝*1ΛৼΔʢ෺ཧ*1ܦ༝ͩͬͨʣ
    w NBTUFSTMBWFߏ੒ͷ୆ߏ੒ʹ
    w ؅ཧαʔόʔ"1ͷ"1*Λ%/4ܦ༝Ͱୟ͘Α͏ʹʢ෺ཧ*1Λࢦఆ͍ͯͨ͠ʣ
    w Ծ૝*1͸ಛఆͷ໾ׂͷͨΊʹ෇͚Δ*1ΞυϨε
    w ෺ཧ*1͸Ծ૝*1ͱͷൺֱͷͨΊͷศٓతͳݺͼํͰαʔόʔͷ৔ॴ΍ηοτΞοϓॱͳͲͰ෇
    ͚ΒΕΔαʔόʔݻ༗ͷ*1
    w ഑৴αʔόʔ͸άϩʔόϧ*1Λ࣋ͭͷͰάϩʔόϧ*1Λ৐ͬऔΔඞཁ͕͋Δ

    View Slide

  69. .Z42-αʔόʔҠߦ

    View Slide

  70. .Z42-ͷNBTUFSTMBWF
    w .Z42-ͷNBTUFSαʔόʔʹॻ͖ࠐΉͱ֤TMBWFͰಉ༷ͷߋ৽Λߦ͏
    w ϨϓϦέʔγϣϯͱݺͿ
    w QJYJWͰ͸ߋ৽ͷΈΛNBTUFSͰߦ͍ࢀরΛTMBWFͰߦ͏͜ͱͰෛՙ෼ࢄΛ͍ͯ͠Δ
    w ࠓճ͸ෛՙ෼ࢄ͕໨తͰ͸ͳ͍ͷͱ3BJMTͰ͸೉͍͠ͷͰͲͪΒ΋NBTUFSʹ
    w NBTUFS͕ࢮΜͩ࣌͸TMBWFͷͲΕ͔ΛNBTUFSঢ֨͢Δ͜ͱͰμ΢ϯλΠϜΛ࠷খʹ͢Δ͜
    ͱ͕ग़དྷΔ
    NBTUFS
    TMBWF
    ϨϓϦέʔγϣϯ
    ߋ৽

    View Slide

  71. .Z42-αʔόʔҠߦ
    w .Z42-αʔόʔͷ෺ཧ*1Λશ഑৴αʔόʔʹઃఆ͍ͯͨ͠
    w Ծ૝*1Λ෇༩ͯ͠શͯͷߋ৽ɾࢀরΛԾ૝*1ܦ༝Ͱߦ͏Α͏ʹ
    w .BTUFS4MBWFߏ੒ʹ
    w ݩʑ͸όοΫΞοϓ༻ͷTMBWF͔͍͠ͳ͔ͬͨ
    w Ҡߦޙ΋ݱࡏͰ͸୆ߏ੒Ͱ৑௕Խ
    w ޿ࠂαʔόʔͷߏ੒తʹ.Z42-͸Ұ࣌తʹఀࢭͯ͠΋޿ࠂ഑৴͸ࢭ·ΒͣϩάूܭͳͲ΋Ұ࣌తʹ
    ஗Ԇ͢Δ͚ͩ
    w NBTUFSαʔόʔΛ3&"%-0$,
    w τϥϯβΫγϣϯ͕ࣦഊͨ͠ΒϦτϥΠ͞ΕΔ
    w TMBWFαʔόʔΛNBTUFSʹঢ֨͢ΔͨΊԾ૝*1Λ৐ͬऔΔ
    w ഑ԼͷTMBWFͰDIBOHFNBTUFS΋࣮ࢪͯ͠NBTUFSঢ֨

    View Slide

  72. ഑৴αʔόʔҠߦͱࣄނ

    View Slide

  73. "31ɾ."$ΞυϨεɾ*1
    w ωοτϫʔΫͰ͸."$ΞυϨεͱ*1ΞυϨεͷͭͷΞυϨε͕͋Δ
    w ."$ΞυϨε͸/*$ʹম͖෇͍͍ͯΔ෺ཧతͳΞυϨε
    w *1ΞυϨε͸04ଆͰઃఆ͢Δ࿦ཧతͳΞυϨε
    w "31 "EESFTT3FTPMVUJPO1SPUPDPM
    ʹΑͬͯ*1ΞυϨεΛ."$ΞυϨεʹม׵Ͱ͖Δ
    w "313FRVFTUΛಉ͡ωοτϫʔΫ಺ͷશαʔόʔʹૹΔʢϒϩʔυΩϟετʣ
    w ʰ͜ͷ*1Λ͍࣋ͬͯΔਓ͸ͲΕͰ͔͢ʔʱͱ͍͏ײ͡
    w ͦͷ*1Λ͍࣋ͬͯΔαʔόʔ͕"313FQMZΛͯͦ͠ΕҎ֎ͷαʔόʔ͸ഁغ
    w *1ΞυϨεΛม׵͢Δ౓ʹϒϩʔυΩϟετ͍ͯ͠ΔͱτϥϑΟοΫ͕͍͢͜͝ͱʹ
    w "31ςʔϒϧͱ͍͏."$㱻*1ม׵දΛΩϟογϡͰ͓࣋ͬͯ͘
    w 8JOEPXT͸෼Ͱ$JTDPػث͸࣌ؒΩϟογϡ͢Δ
    w TFOE@BSQίϚϯυͰ্ॻ͖͕Մೳ

    View Slide

  74. ഑৴αʔόʔҠߦͰͷࣄނ
    چ ৽
    " #
    *1ΞυϨε"Λ৐ͬऔΔલʹ
    FUDOFUXPSLJOUFSGBDFTͰ
    *1ΞυϨε#Λ෇͚ͯಈ࡞֬ೝ

    JQBEESBEEͱTFOE@BSQ
    Ͱ*1ΞυϨε"Λ৐ͬऔΓ
    چ ৽
    # "
    48
    TFOE@BSQ


    # "
    º
    JQBEESEFMͰෆཁͳ#Λ
    མͱͨͭ͠΋Γ͕৐ͬऔͬͨ"΋ফ͑ͨ
    º

    "
    JQBEESBEEͰ"Λ
    ෇͚͕ͨ௨৴͕෮׆͠ͳ͍
    ௨৴ෆՄ

    View Slide

  75. ഑৴αʔόʔͷࣄނղઆ
    w ςετ༻ͷ*1ΞυϨεΛ෇͚͔ͯΒຊ൪༻ͷ*1Λ෇͚ͨͨΊʹςετ༻͕QSJNBSZͰຊ൪༻ͷ*1͕
    TFDPOEBSZʹͳͬͨ
    w /*$ͷQSJNBSZͷ*1Λফ͢ͱTFDPOEBSZ΋Ζͱ΋མͪΔ
    w ֘౰/*$ʹ෇͚ΒΕΔωοτϫʔΫ಺ͷ*1͕શͯམͪͨͷͰ֘౰ωοτϫʔΫͷϧʔςΟϯά͕ফࣦ
    w JQBEESBEEͯ͠෮چͰ͖ͳ͔ͬͨݪҼ
    w JQSPVUFBEEͯ͠෮چ
    w %/4ϥ΢ϯυϩϏϯͰϢʔβʔ͕഑৴αʔόʔΛબͿͨΊʹͦ͜·Ͱେ͖ͳඃ֐ʹ͸ͳΒͳ͔ͬͨΑ͏
    w μ΢ϯλΠϜࣗମ͸෼΋ͳ͔ͬͨ͸ͣ
    w ςετ༻ͷ*1Λ෇͚ͯ໰୊͕ͳ͚Ε͹ɼςετ༻ͷ*1Λফͯ͠JQBEEͱJQSPVUFBEEΛͯ͠໨తͷ*1Λ෇
    ͚Δͷ͕ྑͦ͞͏
    w ͦͷޙ͜ͷํ๏Ͱ΍ͬͯ໰୊͸ग़ͳ͔ͬͨ
    w ࣄނ͕ىͬͨ͜ͱ͖͔ͦ֬͜ͳ஌͕ࣝੜ͖Δ

    View Slide

  76. ࢀߟURL
    • ZendOpcacheͱAPCuͰ͸͡ΊΔϋΠύϑΥʔϚϯεPHP - pixiv engineering blog
    • http://inside.pixiv.net/entry/2014/02/27/002433
    • [Fluentd Advent Calendar]޿ࠂ഑৴ʹFluentdΛ࢖͍ͬͯ·͢ͱ͍͏࿩ @katzchang.gist
    • https://gist.github.com/katzchang/7925728
    • Go Ͱॻ͍ͨαʔόʔΛ؅ཧ͢Δʹ͸ circus ͕ศར - methaneͷϒϩά
    • http://methane.hatenablog.jp/entry/2013/11/11/Go_Ͱॻ͍ͨαʔόʔΛ؅ཧ͢Δʹ͸
    _circus_͕ศར
    • Server::Starter͔ΒֶͿhot deployͷ࢓૊Έ - $shibayu36->blog;
    • http://shibayu36.hatenablog.com/entry/2012/05/07/201556
    • Frequently Asked Questions — Circus 0.12.0 documentation
    • http://circus.readthedocs.org/en/latest/faq/

    View Slide

  77. ࢀߟURL
    • pixivͷ։ൃɾσϓϩΠ؀ڥͷมભʢ2014೥य़൛ʣ - pixiv engineering blog
    • http://inside.pixiv.net/entry/2014/03/26/100539
    • pixivͷσϓϩΠΛࢧ͑Δpploy - pixiv engineering blog
    • http://inside.pixiv.net/entry/2014/12/25/102410
    • memcached͔ΒKyotoTycoon΁
    • http://www.slideshare.net/cubicdaiya/memcached2kyototycoonkey
    • ׽(Φτί)ͷίϯϐϡʔλಓ: ύʔςΟγϣχϯάͷ࢖༻ྫ
    • http://nippondanji.blogspot.jp/2009/04/http-session.html
    • strace ίϚϯυͷ࢖͍ํΛ·ͱΊͯΈͨ - sonots:blog
    • http://blog.livedoor.jp/sonots/archives/18193659.html

    View Slide

  78. ݸਓత͓͢͢Ίຊʢશһʣ
    • ମܥతʹֶͿ҆શͳ Web ΞϓϦέʔγϣϯͷ࡞Γํʢಙؙຊʣ
    • ಡ·ͣʹ Web ΞϓϦ։ൃෆՄೳ
    • Ϧʔμϒϧίʔυ
    • ಡΈ΍͍͢ίʔυͷॻ͖ํͳͲ
    • ϋΠύϑΥʔϚϯε Web αΠτ
    • ߴ଎ʹWebαΠτΛදࣔ͢Δํ๏͕جຊ͔Βॻ͍ͯ͋Δ
    • HTTP2ͷલͰ͸ແྗ͕ͩ·ͩ໾ʹཱͭ
    • SQLΞϯνύλʔϯ
    • SQLͰ΍ͬͯ͸͍͚ͳ͍΂͔Βͣू
    • Team Geek
    • ٕज़ॻͰ͸ͳ͍͕άϧʔϓ։ൃʹ͓͚Δ৺ߏ͑ͳͲ

    View Slide

  79. ࠓճͷࢀߟจݙ
    ʢ͞Βʹ஌Γ͍ͨਓ޲͚ʣ
    • αʔό/ΠϯϑϥΛࢧ͑Δٕज़
    • গ͠ݹ͍͕ࠓճͷ࿩ʹڵຯ͕͋Ε͹
    • ͳΔ΄ͲUnixϓϩηε - RubyͰֶͿUnixͷجૅ
    • preforkͳͲϓϩηεʹ͍ͭͯ
    • Πϯϑϥ/ωοτϫʔΫΤϯδχΞͷͨΊͷωοτϫʔΫٕज़ˍઃܭೖ໳
    • Πϯϑϥͷ࢓ࣄ಺༰͕஌Γ͍ͨਓʹ
    • ωοτϫʔΫपΓ΋ॻ͍ͯ͋Δ
    • ࣮ફDNS DNSSEC࣌୅ͷDNSͷઃఆͱӡ༻
    • DNSʹ͍ͭͯ

    View Slide