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
Claude Code に プロジェクト管理やらせたみた
unson
6
3.9k
「良さそう」と「とても良い」の間には 「良さそうだがホンマか」がたくさんある / 2025.07.01 LLM品質Night
smiyawaki0820
1
550
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
680
自律的なスケーリング手法FASTにおけるVPoEとしてのアカウンタビリティ / dev-productivity-con-2025
yoshikiiida
1
16k
スタートアップに選択肢を 〜生成AIを活用したセカンダリー事業への挑戦〜
nstock
0
170
united airlines ™®️ USA Contact Numbers: Complete 2025 Support Guide
flyunitedhelp
1
300
CDKTFについてざっくり理解する!!~CloudFormationからCDKTFへ変換するツールも作ってみた~
masakiokuda
1
130
事業成長の裏側:エンジニア組織と開発生産性の進化 / 20250703 Rinto Ikenoue
shift_evolve
PRO
2
21k
IPA&AWSダブル全冠が明かす、人生を変えた勉強法のすべて
iwamot
PRO
2
120
ビズリーチが挑む メトリクスを活用した技術的負債の解消 / dev-productivity-con2025
visional_engineering_and_design
3
7.5k
PO初心者が考えた ”POらしさ”
nb_rady
0
210
American airlines ®️ USA Contact Numbers: Complete 2025 Support Guide
airhelpsupport
0
380
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Visualization
eitanlees
146
16k
The Invisible Side of Design
smashingmag
301
51k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
How GitHub (no longer) Works
holman
314
140k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Designing for humans not robots
tammielis
253
25k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
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 ⾼速なシステムを作るために