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

高速なシステムを作る方法

emuaki
March 27, 2016

 高速なシステムを作る方法

NewsPicksの広告配信システム(アドサーバー)を構築した際に高速に処理するためにアーキテクチャや設計上工夫したポイントの説明資料です。

emuaki

March 27, 2016
Tweet

Other Decks in Technology

Transcript

  1. ߴ଎ͳγεςϜΛ
    ߴ଎ʹ࡞ͬͨ࿩
    ਿӜਖ਼໌

    View Slide

  2. NewsPicksͱ͸

    View Slide

  3. ޿ࠂ഑৴γεςϜͰߦ͍ͬͯΔ͜ͱ
    ޿ࠂओ
    Ϣʔβʔ

    ޿ࠂ഑৴
    γεςϜ
    広告効果・利益・ユーザー体験の
    バランスをとりながら最適化
    /FXT1JDLT
    ܝࡌ࿮

    View Slide

  4. ޿ࠂ഑৴Ͱߦ͍ͬͯΔ͜ͱ
    ɾ޿ࠂΩϟϯϖʔϯͷܝࡌظؒνΣοΫ

    ɾ޿ࠂΩϟϯϖʔϯͷ༧ࢉνΣοΫ

    ɾ༗ޮɺແޮϑϥά൑ఆ

    ɾ޿ࠂ஫จͷ޿ࠂ࿮ࢦఆɾΧςΰϦࢦఆνΣοΫ

    ɾ࠷௿ೖࡳֹͷνΣοΫ

    ɾϑϦʔΫΤϯγʔͷνΣοΫ

    ɾೖࡳՁ֨ͷൺֱ
    $1$஫จͷೖࡳՁ֨Λ$1.׵ࢉ
    ηΧϯυϓϥΠεΦʔΫγϣϯํࣜʹΑΔམࡳՁ֨ܭࢉ

    ɾೖࡳ݁Ռͷه࿥
    ۃ
    Ί
    ͯ

    ͍

    ؒ

    View Slide

  5. ฏۉϨΠςϯγ
    平均レイテンシは2ms - 5ms

    View Slide

  6. ϨΠςϯγͷ໨҆
    NTҎ্ Կ͔͓͔͍͠
    NT Կ΋ߟ͑ͳͯ͘΋࣮ݱͰ͖Δ
    NT ϓϩϑΣογϣφϧͷ໨ඪ
    NT ޻෉͕ඞཁ
    NT ൚༻04ͷݶք
    NT ϦΞϧλΠϜ04΍'1("ͳͲͷॿ͚͕ඞཁ

    View Slide

  7. Ͳ͏΍ͬͯߴ଎Խͤ͞Δͷ͔
    ஗͍ݪҼ͸*0ɻ*0Λগͳ͘͢Ε͹ߴ଎Խ͢Δɻ
    ɾ%#ΞΫηε
    ɾϑΝΠϧΞΫηε
    ɾωοτϫʔΫΞΫηε
    సૹ଎౓.#ඵ
    ϝϞϦ
    44%
    )%%

    View Slide

  8. Ͳ͏΍ͬͯߴ଎Խͤ͞Δͷ͔
    εέʔϧΞ΢τ
    ͣ͠Β͘ͳΔ
    プロセス間でキャッシュを同期できない。
    キャッシュサーバーを⽤意すると、スケールアウトし
    ない。単⼀障害点になりがち。
    「全ての必要データ」をキャッシュする
    ACIDΛ
    ຬͨͤͳ͘ͳΔ
    メモリとDBで不整合が発⽣。
    複数データソースを使った際にトランザクションが分
    かれる。
    େྔͷϝϞϦ͕ඞཁ 全てのデータをメモリに載せるためには多くのメモリ
    容量が⾜りない。
    ৭ʑͳ՝୊͕...
    ՝


    ՝


    ՝


    View Slide

  9. Ͳ͏΍ͬͯߴ଎Խͤ͞Δͷ͔
    ΠϯϝϞϦ
    ΞʔΩςΫνϟ
    ・⾮同期DB書き込み
    ・定期的にメモリとDBを同期させる仕組み
    DDD ・集約(Aggrigate) 単位にキャッシュ

    View Slide

  10. ΠϯϝϞϦΞʔΩςΫνϟ - αʔόʔ഑ஔਤ (؆қ൛)

    View Slide

  11. "Eϓϩηε
    "Eϓϩηε
    "Eϓϩηε
    ΠϯϝϞϦΞʔΩςΫνϟ - ͞Βʹ؆қ൛
    /FXT1JDLT
    αʔόʔϓϩηε
    %#
    %#ॻ͖ࠐΈ
    ϓϩηε
    ɾ3&%0ϩάʢతͳϑΝΠϧʣΛ4ʹ഑ஔ
    ɾ%#ॻ͖ࠐΈΛฒྻඇಉظ࣮ߦʹ͢Δ
    ɾ%#ॻ͖ࠐΈΛϦϥϯՄೳʹ͢Δ
    ʢ΂͖ͱ͏ੑΛ࣋ͨͤΔʣ
    4
    ߋ৽௨஌
    3FEJT

    View Slide

  12. ΠϯϝϞϦΞʔΩςΫ
    νϟͱͷ૬ੑͷྑ͞
    ・集約(Aggrigate)をロードすれば後は処理するだけ
    ͳͥυϝΠϯۦಈͳͷ͔
    ۀ຿ϩδοΫΛ੾Γग़
    ͠΍͍͢
    ・アーキテクチャと業務ロジックを分離しやすい
    ・業務ロジック中にキャッシュ等システムを意識する
    コードを埋め込む必要がない
    1
    2

    View Slide

  13. ͳͥυϝΠϯۦಈͳͷ͔

    View Slide

  14. ͳͥυϝΠϯۦಈͳͷ͔

    View Slide

  15. ΠϯϝϞϦ
    ΞʔΩςΫνϟ
    ・I/Oを少なくする
    ・全ての必要なデータをキャッシュする
    ・⾮同期にDB書き込みを⾏う
    ߴ଎Խ·ͱΊ
    DDD
    ・業務を切り出す
    ・正しい設計を⾏い、適切なサイズでキャッシュ
    1
    2
    ⾼速なシステムを作るために

    View Slide