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.5k
高速なシステムを作る方法
NewsPicksの広告配信システム(アドサーバー)を構築した際に高速に処理するためにアーキテクチャや設計上工夫したポイントの説明資料です。
emuaki
March 27, 2016
Tweet
Share
Other Decks in Technology
See All in Technology
20260320_JaSST26_Tokyo_登壇資料.pdf
mura_shin
0
120
プログラミング不要! テスト自動化における生成AI使いこなし術
magicpod
1
110
BFCacheを活用して無限スクロールのUX を改善した話
apple_yagi
0
110
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
22
11k
Phase07_実務適用
overflowinc
0
1.7k
Phase02_AI座学_応用
overflowinc
0
2.6k
LLMに何を任せ、何を任せないか
cap120
10
4.5k
「お金で解決」が全てではない!大規模WebアプリのCI高速化 #phperkaigi
stefafafan
5
2.2k
Phase01_AI座学_基礎
overflowinc
0
3.6k
モジュラモノリス導入から4年間の総括:アーキテクチャと組織の相互作用について / Architecture and Organizational Interaction
nazonohito51
3
1.7k
ThetaOS - A Mythical Machine comes Alive
aslander
0
140
テストプロセスにおけるAI活用 :人間とAIの共存
hacomono
PRO
0
160
Featured
See All Featured
How to Ace a Technical Interview
jacobian
281
24k
How to build a perfect <img>
jonoalderson
1
5.3k
Balancing Empowerment & Direction
lara
5
960
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
sira's awesome portfolio website redesign presentation
elsirapls
0
200
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
460
Context Engineering - Making Every Token Count
addyosmani
9
770
Joys of Absence: A Defence of Solitary Play
codingconduct
1
320
Designing for Timeless Needs
cassininazir
0
170
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
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 ⾼速なシステムを作るために