Caching ガイダンスの話 
Japan Azure User Group 
Microsoft MVP for Microsoft Azure 
冨⽥田 順 (とみたすなお) 
http://twitter.com/harutama
カバーする範囲 
• CDPの話 
– Cachingガイダンス 
– Cache-Asideパターン 
• そもそもキャッシュって何なのかトーク 
• 次のサーバーインフラってどうなる? 
2
基本情報技術者試験より 
• 平成26年年 春期 午前 問10 
– 主記憶のアクセス時間60ナノ秒, 
キャッシュメモリのアクセス時間10ナノ秒の 
システムがある。 
キャッシュメモリを介して主記憶にアクセス 
する場合の実効アクセス時間が15ナノ秒である 
とき,キャッシュメモリのヒット率率率は幾らか。 
3
4 
Q. 
どうしてキャッシュを 
使うんですか?
5 
A. 
速い記憶装置は 
⾼高くて⼩小さいから
記憶階層 
6 
http://commons.wikimedia.org/wiki/File:Memory_̲hierarchy.svg#mediaviewer 
/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Memory_̲hierarchy.svg
CPU 周辺のキャッシュの話 
7 
ここらへんのエリア 
でのキャッシュの話
8
今どきの CPU の中⾝身 
http://pc.watch.impress.co.jp/docs/column/kaigai/20130602_̲601851.html9
10 
\  __  / 
_ (m) _  ピコーン 
   |ミ| 
/ `´  \ 
  ( ゚∀゚) 
レジスタを超巨大にしたら 
 ノヽノ | 
超高速になるんじゃね? 
   
11 
すごく正しい。 
けど、できない事情がある。
1ビット分のメモリ回路路 
DRAMSRAM 
12http://www.infonet.co.jp/ueyama/ip/logic/sram.html 
回路路規模 
⼩小さい 
トランジスタ1個 
コンデンサ1個 
⼤大きい 
トランジスタ6個 
(6個以上のバージョンも有り) 
価格安い⾼高い 
速度度普通⾼高速 
⽤用途メインメモリレジスタ・CPUキャッシュ
物理理的な話ですが 
• 2.0Ghz の CPU において、1クロックは何 
秒に相当するか? 
1 / (2.0×109) 
= 0.5 × 10-9 sec 
= 0.5 ナノ秒 
• 0.5ナノ秒で光はどのくらい進むか? 
(0.5 × 10-9) × (3.0 × 108) 
= 0.15m 
= 15cm 
13
キャッシュの理理屈 
14 
この絵が成り⽴立立っている 
基本的な理理屈
15 
Q. 
どうしてキャッシュは 
うまく機能するの?
参照の局所性 
16 
• 時間的局所性 
• 空間的局所性 
• 逐次的局所性というのもあるらしい
時間的局所性 
17 
さっき使ったものを 
ちょっと後でまた使う 
可能性は⾼高い
例例えばこんなとき 
18 
private 
static 
void 
Example(Liststring 
list) 
{ 
for 
(int 
i 
= 
0; 
list.Count 
 
i; 
i++) 
{ 
//この中で何かをするわけですが。 
Console.WriteLine(list[i]); 
} 
}
空間的局所性 
19 
今使ったものの 
近くにあるものは 
使われる可能性が⾼高い
例例えばこんなとき 
20 
private 
static 
void 
Example(Liststring 
list) 
{ 
foreach 
(string 
s 
in 
list) 
{ 
//この中で何かをするわけですが。 
Console.WriteLine(s); 
} 
}
ここまでまとめ 
• 時間的局所性と空間的局所性を根拠にして 
キャッシュは機能している。 
• 局所性のないデータはキャッシュしても効果 
が無い。 
⾔言い換えればキャッシュのヒット率率率が悪い。 
– 1回アクセスしたら2度度と使われない 
(時間的局所性が無い) 
– アクセスするデータに規則性がない 
(空間的局所性が無い) 
21
Caching ガイダンスの冒頭 
22 
キャッシュは、頻繁にアクセスされるデータをアプリケー 
ションの近くに位置する⾼高速記憶装置に⼀一時的にコピーする 
ことにより、システムのパフォーマンスとスケーラビリティ 
を改善することを⽬目的とする、⼀一般的な技術です。 
 
キャッシュは、アプリケーションインスタンスが同じデータ 
を何度度も読み込む場合(特にオリジナルのデータストアが 
キャッシュの速度度に⽐比べて低速な場合、または⾼高レベルの競 
合を受ける場合、あるいはデータストアが遠くにあり、ネッ 
トワークの遅延がアクセス遅延の原因となる場合など)に、 
最も効果的です。
商⽤用のキャッシュ 
23
Cache-Aside パターンより 
24 
商⽤用で提供されているキャッシュシステムの多くは、リード 
スルー⽅方式や、ライトスルー/ライトビハインド⽅方式を提供 
しています。 
これらのシステムでは、アプリケーションはキャッシュを参 
照し、データストアからデータを取り込みます。データが 
キャッシュにない場合は、ユーザーが意識識することなく透過 
的にデータストアからキャッシュに取り込まれます。 
キャッシュ内のデータに加えられたすべての修正は、データ 
ストア内の元データに⾃自動的に書き戻されます。
商⽤用で提供されるキャッシュ 
• 商⽤用キャッシュの例例 
– Oracle Coherence 
– IBM WebSphere eXtreme Scale 
– Pivotal GemFire 
• 商⽤用キャッシュは多くの透過性を提供する 
– 位置透過性、複製透過性、障害透過性とか。 
25
クラウドアプリケーションでの 
キャッシュ 
• インメモリキャッシュ 
– アプリケーションのインスタンスを実⾏行行して 
いるコンピューターのローカルにデータを保 
存する。 
 
• 共有キャッシュ 
– 異異なるコンピューターで実⾏行行されている複数 
のアプリケーションのインスタンスからアク 
セスすることができる。 
26
Azure Redis Cache の場合 
27 
http://azure.microsoft.com/ja-‐‑‒jp/services/cache/
Oracle Coherence のデプロイメント 
28 
https://docs.oracle.com/cd/E50629_̲01/core/FMWLC/products2.htm
Pivotal SQLFire 
SQLFire は純粋にSQL形式でデータストアにクエリするのに、 JDBC あ 
るいは ADO.NETを提供しているが、キーとインデックスは、メモリーに 
蓄え、⾼高度度なスケーラビリティと可⽤用性、そして優れたパフォーマンスを 
提供している。その点で、vFabric GemFire や Oracle Coherenceに似た 
分散キャッシング層として機能するが、「ディスク上の記憶アーキテク 
チャは従来のSQLデータベースとは根本的に違っている。全ての変更更は、 
⾼高度度なスケーラビリティと可⽤用性を⽬目指したもので、⽔水平のスケーリング 
により、負荷に関係なく、予想通りの低遅延を提供している。」と、 
SQLFire Chief Architectの Jags Ramnarayan⽒氏は語った。 
 
SQLFireはまた、永続化に RDBMSを使うことができ、「Oracle, 
MySQL, Sybase, DB2, SQLServer、PostGres を含む殆ど全てのデー 
タベース」をサポートする計画だ、と Ramnarayan⽒氏は⾔言った。こうして、 
VMwareのソリューションは、普通には適さないシナリオで今使うことが 
できるリレーショナル データベースの寿命を延ばしている。 
29 
http://www.infoq.com/jp/news/2011/06/VMware-‐‑‒vFabric-‐‑‒SQLFire
キャッシュの制御 
30
参考資料料 
• リードスルー、ライトスルー、ライトビ 
ハインドおよびリフレッシュアヘッドの 
キャッシュ 
– https://docs.oracle.com/cd/E23332_01/coh. 
360/b61368/cache_rtwtwbra.htm 
31
リードスルー その1 
32 
DBキャッシュアプリ 
① 
hogeのデータ 
ちょうだい 
② 
hogeのデータ 
持ってない!
リードスルー その2 
33 
DBキャッシュアプリ 
③ 
hogeのデータ 
ちょうだい 
④ 
はいはいどうぞ
リードスルー その3 
34 
DBキャッシュアプリ 
⑤ 
はいどうぞ 
(キャッシュを残しつつ)
CDP 本⽂文より 
35 
商⽤用で提供されているキャッシュシステムの多くは、リード 
スルー⽅方式や、ライトスルー/ライトビハインド⽅方式を提供 
しています。 
これらのシステムでは、アプリケーションはキャッシュを参 
照し、データストアからデータを取り込みます。データが 
キャッシュにない場合は、ユーザーが意識識することなく透過 
的にデータストアからキャッシュに取り込まれます。 
キャッシュ内のデータに加えられたすべての修正は、データ 
ストア内の元データに⾃自動的に書き戻されます。
ライトスルー その1 
36 
DBキャッシュアプリ 
① 
hogeのデータ 
とっておいて 
② 
すぐ DB に 
書き込もう
ライトスルー その2 
37 
DBキャッシュアプリ 
③ 
Hoge を 
書きこみ完了了 
④ 
Hoge を 
書きこみました
リードスルーとライトスルー 
• 両⽅方とも操作は同期的に⾏行行われる。 
• キャッシュにヒットすれば、読み込みの 
性能は向上する。 
• 書き込みの性能は向上しない。 
– 同期で書き込む 
=アプリは書き込み完了了まで待たされる 
=書き込みパフォーマンスは向上しない 
38
39 
書き込み性能を上げるには? 
↓ 
⾮非同期で書く!
40 
それが 
ライトビハインド!
ライトビハインド その1 
41 
DBキャッシュアプリ 
① 
hogeのデータ 
とっておいて 
② 
とっておきました! 
(まだ書いてないけど)
ライトビハインド その2 
42 
③ 
しばらく 
とっておく 
DBキャッシュアプリ
ライトビハインド その3 
43 
④ 
タイミングが 
来たら書く 
DBキャッシュアプリ
CDP 本⽂文より 
44 
商⽤用で提供されているキャッシュシステムの多くは、リード 
スルー⽅方式や、ライトスルー/ライトビハインド⽅方式を提供 
しています。 
これらのシステムでは、アプリケーションはキャッシュを参 
照し、データストアからデータを取り込みます。データが 
キャッシュにない場合は、ユーザーが意識識することなく透過 
的にデータストアからキャッシュに取り込まれます。 
キャッシュ内のデータに加えられたすべての修正は、データ 
ストア内の元データに⾃自動的に書き戻されます。
45 
Q. 
そんな機能 
キャッシュサービスに 
ありましたっけ?
46
47 
でも、その機能 
本当に必要ですか?
キャッシュの構築 
48
Cache-Aside パターン 
49
Cache-Aside パターン 
• サンプル 
– MVC Movie アプリと Azure Redis Cache を 
15 分で接続 
http://blogs.msdn.com/b/windowsazurej/ 
archive/2014/06/18/blog-mvc-movie-app-with-azure- 
redis-cache-in-15-minutes.aspx 
• 読み取りに特化している。 
書き込みに関しては考慮していない。 
50
結論論から⾔言うと 
51 
書き込みキャッシュを 
⾃自分で実装することは 
おすすめしません
ハードディスクのキャッシュ 
52
書き込みキャッシュの難点 
• キャッシュの内容が消える場合を想定する 
と、複数ノードへの分散が必要。 
– キャッシュしているノードが死ぬとか。 
• 書き込み操作の順序を、キャッシュ側で保 
証する必要が出てくる。 
– 複数インスタンスでアプリケーションとキャッ 
シュが動作していることを考慮しつつ。 
• 永続化のためのコードを、永続化の⼿手段に 
応じて⽤用意しなければいけない。 
– Webサービス、データベース、ファイル とか 
53
54 
ほんとにやる? 
(商⽤用のキャッシュは実際やっていますが…)
発想をかえてみる 
• 書き込み操作を⾮非同期にできれば、書き 
込みキャッシュと同等の効果が出るはず。 
– ライトビハインドキャッシュの本質は、⾮非同 
期で書き込みを⾏行行うこと。 
• 書き込む順序は⼤大事”かも” 
– 書き込む⼈人が “順序が⼤大事” or “そうでもない” 
を教えてくれたら解決する問題もある。 
55
56 
それって 
もしかして…
Queue なんじゃね? 
57
今⽇日のまとめ 
• 読み込みキャッシュには Azure Redis 
Cache を使って Cache-‐‑‒Aside パターンを 
実装すればいいと思います。 
• 書き込みキャッシュを実装するよりも、 
Queue を活⽤用する⽅方向の⽅方が良良いと考え 
ています。 
58
http://www.theregister.co.uk/2010/07/27/integrated_silicon_photonics/ 
コンピューティングの将来 
59
Intel の試作品 
60
こんなことをやろうとしてます 
61
何のために? 
62
本気でやろうとしています 
63 
\  __  / 
_ (m) _  ピコーン 
   |ミ| 
/ `´  \ 
  ( ゚∀゚) 
レジスタを超巨大にしたら 
 ノヽノ | 
超高速になるんじゃね? 
    
…っていうのに近いことを。
単⼀一レベル記憶 
単⼀一レベル記憶(たんいつレベルきおく、英: Single-level store, Single-level 
storage, SLS)は、コンピュータが使っている記憶装置について、アプリ 
ケーションソフトウェアに対して主記憶装置と補助記憶装置の区別を意識識さ 
せずに、ただ⼀一つの巨⼤大なアドレス空間で管理理する仮想記憶のメモリ管理理技 
術である。 
 
⼊入出⼒力力が⾮非常に⾼高速、プログラム実⾏行行の際に磁気ディスク装置から主記憶装 
置へのロードが不不要、ユーザー (やオペレータ) から⾒見見て、磁気ディスク装 
置の管理理が単純になる(たとえば、通常の管理理業務では必須となるファイル 
システムによるフォーマット等を必要とせず、単に新しいディスクを接続す 
ればシステムの使える資源が増える、といったように)、などの特⻑⾧長がある。 
 
単⼀一レベル記憶は、Multics、IBMの System/38 、AS/400 (およびその後継 
システムの eServer iSeries 、System i 、Power Systems i Edition)などで 
採⽤用されている。 
64
DIMM の形をした SSD 
65
不不揮発メモリー 
電源を切切っても記憶内容を保持することがで 
きるメモリのこと。ROMやフラッシュメモリ、 
強誘電体メモリ(FRAM)、磁気抵抗メモリ 
(MRAM)などがこれにあたる。 
DRAMやSRAMなどのように外部から電源を 
供給しないと記憶が保持できないものを「揮 
発メモリ」「揮発性メモリ」という。 
66 
http://e-‐‑‒words.jp/w/E4B88DE68FAEE799BAE383A1E383A2E383AA.html
Let’s dream and then let’s build. 
- Ray Ozzie 
冨⽥田 順 (@harutama) 
http://twitter.com/harutama

Caching ガイダンスの話