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.4k
高速なシステムを作る方法
NewsPicksの広告配信システム(アドサーバー)を構築した際に高速に処理するためにアーキテクチャや設計上工夫したポイントの説明資料です。
emuaki
March 27, 2016
Tweet
Share
Other Decks in Technology
See All in Technology
関係性が駆動するアジャイル──GPTに人格を与えたら、対話を通してふりかえりを習慣化できた話
mhlyc
0
130
それでも私はContextに値を詰めたい | Go Conference 2025 / go conference 2025 fill context
budougumi0617
4
1.2k
AI Agentと MCP Serverで実現する iOSアプリの 自動テスト作成の効率化
spiderplus_cb
0
490
Why React!?? Next.jsそしてReactを改めてイチから選ぶ
ypresto
10
4.4k
動画データのポテンシャルを引き出す! Databricks と AI活用への奮闘記(現在進行形)
databricksjapan
0
140
Large Vision Language Modelを用いた 文書画像データ化作業自動化の検証、運用 / shibuya_AI
sansan_randd
0
100
生成AIを活用したZennの取り組み事例
ryosukeigarashi
0
200
Trust as Infrastructure
bcantrill
0
330
AIが書いたコードをAIが検証する!自律的なモバイルアプリ開発の実現
henteko
1
340
リーダーになったら未来を語れるようになろう/Speak the Future
sanogemaru
0
280
Goに育てられ開発者向けセキュリティ事業を立ち上げた僕が今向き合う、AI × セキュリティの最前線 / Go Conference 2025
flatt_security
0
350
社内お問い合わせBotの仕組みと学び
nish01
0
190
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
What's in a price? How to price your products and services
michaelherold
246
12k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Statistics for Hackers
jakevdp
799
220k
Gamification - CAS2011
davidbonilla
81
5.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Thoughts on Productivity
jonyablonski
70
4.9k
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 ⾼速なシステムを作るために