Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
高速なシステムを作る方法
Search
emuaki
March 27, 2016
Technology
10
8.3k
高速なシステムを作る方法
NewsPicksの広告配信システム(アドサーバー)を構築した際に高速に処理するためにアーキテクチャや設計上工夫したポイントの説明資料です。
emuaki
March 27, 2016
Tweet
Share
Other Decks in Technology
See All in Technology
管理者しか知らないOutlookの裏側のAIを覗く#AzureTravelers
hirotomotaguchi
2
430
ホワイトボードチャレンジ 説明&実行資料
ichimichi
0
130
Helm , Kustomize に代わる !? 次世代 k8s パッケージマネージャー Glasskube 入門 / glasskube-entry
parupappa2929
0
250
現場の種を事業の芽にする - エンジニア主導のイノベーションを事業戦略に装着する方法 -
kzkmaeda
2
2.1k
表現を育てる
kiyou77
1
210
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
57k
エンジニアの育成を支える爆速フィードバック文化
sansantech
PRO
3
1.1k
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
130
Platform Engineeringは自由のめまい
nwiizo
4
2.1k
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
970
利用終了したドメイン名の最強終活〜観測環境を育てて、分析・供養している件〜 / The Ultimate End-of-Life Preparation for Discontinued Domain Names
nttcom
2
200
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
140
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Rails Girls Zürich Keynote
gr2m
94
13k
Designing for Performance
lara
604
68k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Producing Creativity
orderedlist
PRO
344
39k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
Transcript
ߴͳγεςϜΛ ߴʹ࡞ͬͨ ਿӜਖ਼໌
NewsPicksͱ
ࠂ৴γεςϜͰߦ͍ͬͯΔ͜ͱ ࠂओ Ϣʔβʔ ສ ࠂ৴ γεςϜ 広告効果・利益・ユーザー体験の バランスをとりながら最適化 /FXT1JDLT ܝࡌ
ࠂ৴Ͱߦ͍ͬͯΔ͜ͱ ɾࠂΩϟϯϖʔϯͷܝࡌظؒνΣοΫ ɾࠂΩϟϯϖʔϯͷ༧ࢉνΣοΫ ɾ༗ޮɺແޮϑϥάఆ ɾࠂจͷࠂࢦఆɾΧςΰϦࢦఆνΣοΫ ɾ࠷ೖࡳֹͷνΣοΫ ɾϑϦʔΫΤϯγʔͷνΣοΫ ɾೖࡳՁ֨ͷൺֱ $1$จͷೖࡳՁ֨Λ$1.ࢉ ηΧϯυϓϥΠεΦʔΫγϣϯํࣜʹΑΔམࡳՁ֨ܭࢉ
ɾೖࡳ݁Ռͷه ۃ Ί ͯ ͍ ࣌ ؒ
ฏۉϨΠςϯγ 平均レイテンシは2ms - 5ms
ϨΠςϯγͷ҆ NTҎ্ Կ͔͓͔͍͠ NT Կߟ͑ͳ࣮ͯ͘ݱͰ͖Δ NT ϓϩϑΣογϣφϧͷඪ NT ͕ඞཁ NT
൚༻04ͷݶք NT ϦΞϧλΠϜ04'1("ͳͲͷॿ͚͕ඞཁ
Ͳ͏ͬͯߴԽͤ͞Δͷ͔ ͍ݪҼ*0ɻ*0Λগͳ͘͢ΕߴԽ͢Δɻ ɾ%#ΞΫηε ɾϑΝΠϧΞΫηε ɾωοτϫʔΫΞΫηε సૹ.#ඵ ϝϞϦ 44% )%%
Ͳ͏ͬͯߴԽͤ͞Δͷ͔ εέʔϧΞτ ͣ͠Β͘ͳΔ プロセス間でキャッシュを同期できない。 キャッシュサーバーを⽤意すると、スケールアウトし ない。単⼀障害点になりがち。 「全ての必要データ」をキャッシュする ACIDΛ ຬͨͤͳ͘ͳΔ メモリとDBで不整合が発⽣。
複数データソースを使った際にトランザクションが分 かれる。 େྔͷϝϞϦ͕ඞཁ 全てのデータをメモリに載せるためには多くのメモリ 容量が⾜りない。 ৭ʑͳ՝͕... ՝ ՝ ՝
Ͳ͏ͬͯߴԽͤ͞Δͷ͔ ΠϯϝϞϦ ΞʔΩςΫνϟ ・⾮同期DB書き込み ・定期的にメモリとDBを同期させる仕組み DDD ・集約(Aggrigate) 単位にキャッシュ
ΠϯϝϞϦΞʔΩςΫνϟ - αʔόʔஔਤ (؆қ൛)
"Eϓϩηε "Eϓϩηε "Eϓϩηε ΠϯϝϞϦΞʔΩςΫνϟ - ͞Βʹ؆қ൛ /FXT1JDLT αʔόʔϓϩηε %# %#ॻ͖ࠐΈ
ϓϩηε ɾ3&%0ϩάʢతͳϑΝΠϧʣΛ4ʹஔ ɾ%#ॻ͖ࠐΈΛฒྻඇಉظ࣮ߦʹ͢Δ ɾ%#ॻ͖ࠐΈΛϦϥϯՄೳʹ͢Δ ʢ͖ͱ͏ੑΛ࣋ͨͤΔʣ 4 ߋ৽௨ 3FEJT
ΠϯϝϞϦΞʔΩςΫ νϟͱͷ૬ੑͷྑ͞ ・集約(Aggrigate)をロードすれば後は処理するだけ ͳͥυϝΠϯۦಈͳͷ͔ ۀϩδοΫΛΓग़ ͍͢͠ ・アーキテクチャと業務ロジックを分離しやすい ・業務ロジック中にキャッシュ等システムを意識する コードを埋め込む必要がない 1
2
ͳͥυϝΠϯۦಈͳͷ͔
ͳͥυϝΠϯۦಈͳͷ͔
ΠϯϝϞϦ ΞʔΩςΫνϟ ・I/Oを少なくする ・全ての必要なデータをキャッシュする ・⾮同期にDB書き込みを⾏う ߴԽ·ͱΊ DDD ・業務を切り出す ・正しい設計を⾏い、適切なサイズでキャッシュ 1
2 ⾼速なシステムを作るために