Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

NewsPicksͱ͸

Slide 3

Slide 3 text

޿ࠂ഑৴γεςϜͰߦ͍ͬͯΔ͜ͱ ޿ࠂओ Ϣʔβʔ ສ ޿ࠂ഑৴ γεςϜ 広告効果・利益・ユーザー体験の バランスをとりながら最適化 /FXT1JDLT ܝࡌ࿮

Slide 4

Slide 4 text

޿ࠂ഑৴Ͱߦ͍ͬͯΔ͜ͱ ɾ޿ࠂΩϟϯϖʔϯͷܝࡌظؒνΣοΫ
 ɾ޿ࠂΩϟϯϖʔϯͷ༧ࢉνΣοΫ
 ɾ༗ޮɺແޮϑϥά൑ఆ
 ɾ޿ࠂ஫จͷ޿ࠂ࿮ࢦఆɾΧςΰϦࢦఆνΣοΫ
 ɾ࠷௿ೖࡳֹͷνΣοΫ
 ɾϑϦʔΫΤϯγʔͷνΣοΫ
 ɾೖࡳՁ֨ͷൺֱ $1$஫จͷೖࡳՁ֨Λ$1.׵ࢉ ηΧϯυϓϥΠεΦʔΫγϣϯํࣜʹΑΔམࡳՁ֨ܭࢉ
 ɾೖࡳ݁Ռͷه࿥ ۃ Ί ͯ ୹ ͍ ࣌ ؒ

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

ͳͥυϝΠϯۦಈͳͷ͔

Slide 14

Slide 14 text

ͳͥυϝΠϯۦಈͳͷ͔

Slide 15

Slide 15 text

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