2016.01.25

キャッシュとは?ウェブサイト高速化で活用したい4つのキャッシュを知ろう

難易度
2
カテゴリー
技術ナレッジ
タグ
Web開発
環境構築

20160125

一言でCache(キャッシュ)と言っても、人によって思い浮かべることはさまざまでしょう。今日はキャッシュとはなにか、なんのためにあるのかをご紹介し、システム開発にどうキャッシュを活かせばよいか、考えるヒントをご提供します。

Ⅰ.データの隠し場所cache(キャッシュ)

cacheという単語は「隠し場所」というような意味で、フランス語のcaché(隠された)が語源と言われています。Caché(キャシエ)という高速が売りのデータベース管理ソフトがありますが、その高速さはデータを極力メモリ上に置こうとすることで実現するので、だからCachéというネーミングにしたのかもしれません。本編が始まる前に脱線してしまいました。cacheに話を戻して、今回はシステムを高速化するためのcacheについてその概要を紹介したいと思います。

キャッシュとは一体どのようなところで使われているのでしょうか。
CPUキャッシュ、GPUキャッシュ、Diskキャッシュ、Webキャッシュ、ブラウザキャッシュ、アプリケーションキャッシュ、データベースキャッシュなどハードウェアやソフトウェアのいたるところでキャッシュは使われています。

コンピューターの部品でもっともスピードを気にする部分と言えばCPUですよね。例えばintel Core i7は、1cm~2cm四方のチップ上になんと70~140億個ものトランジスタが入っているわけですが、演算に使用されているのはごくわずかで、ほとんどがキャッシュメモリーとして使用されています。この世の中でもっとも高い家賃のマンションと例えられるICチップの大きな面積を専有するのがキャッシュメモリーということからも、いかにスピードアップにはキャッシュが有効なのかイメージしていただけるのではないでしょうか。


Ⅱ.ウェブ開発におけるキャッシュ利用の重点項目は?

いろいろなシーンで活躍しているキャッシュですが、今回はウェブ開発ということにフォーカスしてご紹介します。

さて一般的なウェブ開発ではどの部分でスピードの差が生じるのでしょう?ファイルを読み書きするときのディスクアクセス、データベースを読みに行くときは、データベースファイルシステムをクエリします。またユーザーとしてウェブサイトを閲覧するときのウェブデータファイルへのアクセスなど、さまざまなポイントが考えられます。その中でもそれ自体がボトルネックになり得るRDBMS(リレーショナルデータベースマネ-ジメントシステム)でスピードの差が生じることが多いのです。

MySQLなど古くからあるRDBMSはもちろん、 SQLserverやOracleなどのエンタープライズデータベースシステムにおいても10億単位のオンラインユーザーを抱えるとなるとシステム的に危ういものになってしまいます。
※2016.02.01 編集部注
一部記事内容に関してご指摘をいただきましたため、修正いたしました。

もうひとつ、データベースにはTPS(トランザクション/秒)においてボトルネックが存在します。多くの同時アクセスが発生する大規模ウェブシステムではTPSを考慮しなくてはなりません。1日あたりのPV(ページビュー)が1000万クラスのウェブサイトではデータベースへの同時読み書きが頻繁に起こり、もし十分なキャッシュシステムがない場合、ピーク時には大惨事に見舞われることになります。


Ⅲ.優先して利用したい4種類のキャッシュ

さて、実際の開発において私たちは、ウェブサイトの高速化のために、現在は次の4種のキャッシュを優先して利用するようにしています。

  • 1.ローカルキャッシュ
  • 2.分散キャッシュ
  • 3.クライアントサイドキャッシュ
  • 4.データベースキャッシュ

それではひとつひとつ概要をご紹介していきます。

1.ローカルキャッシュは、サーバーマシンのハードディスクやメモリを利用するキャッシュで、もっとも一般的で手軽に高速化できる手段です。唯一の欠点としては、ロードバランサーにて分散化された環境では使えない(使おうと思えば使えますが、同期をとるのに苦労するので実用的とは言えません)ということがあります。

2.分散キャッシュは、分散化サーバーにおける利用を考慮されたキャッシュシステムです。よく知られたものとして「Memcached」「Redis」といったキャッシュメモリシステムがあります。通常のRDBとは大変な性能差があり、サンプルコードによるテストでは、メモリーエンジンを使ったMySQLよりも2倍以上高速化したという結果が出ています。

3.クライアントサイドキャッシュも、パフォーマンスを上げるのには欠かせませんね。クライアントキャッシュすなわちブラウザキャッシュは、サンドボックスなどブラウザのセキュリティにより制限はありますが、複数のキャッシュシステムを組み合わせて効果を上げます。

  • Cookie:ユーザーデータを保管しておくという意味でキャシュの1つと言えます。
  • ブラウザローカルキャッシュ:コンテンツを更新したのにお客さまから「直ってない!」というのはこのブラウザローカルキャッシュが原因のことが多いですね。
  • Flashローカルキャッシュ:Flashプレーヤーもそれ自体でローカルファイルシステムにデータをキャシュします。
  • HTML5アプリケーションキャッシュ: HTML・CSS・JavaScript・イメージなどウェブアプリケーションの利用に必要となるファイルをクライアント環境にキャッシュして、 次回からはオフラインでもウェブアプリケーションを利用できるようにするというものです。HTML5が標準化しつつある今、積極的に利用できるようになりました。

4.データベースキャッシュでは、クエリのキーと結果をセットにしてキャッシュします。頻度の高いクエリからキャッシュするようにします。キャッシュサイズが大きくなるのには気をつけねばなりませんが、うまく使えば劇的なスピードアップが実現できます。
20160125_01


Ⅳ.キャッシュ利用計画のために

キャッシュ利用計画と言うと消費者金融の広告のようですが、冗談はさておき、今回はウェブ高速化のためのキャッシュの利用の導入として書かせていただきました。キャッシュは突き詰めていくと、もっとも深く、もっとも悩ましいテーマでもあります。キャッシュ設計ストラテジー、キャッシュオブジェクトデザイン規定、キャッシュデータ構成、キャッシュオブジェクトシリアライゼーションなどなど、ひとつひとつのトピックが多くの議論を必要とします。

この記事をきっかけにして、キャッシュというパンドラの箱を開いていただき、スピード向上の手段としてキャッシュを活用していただけることを願っております。

この記事を書いた人

植月泰彦 & Wang Baoxing

TV番組制作、PCメーカー総合企画などを経て、1991年東京都日本橋で広告制作会社を設立。1995年よりホームページ開発に専念。数多くのウェブサイトの制作に携わる。過去15年で40回渡米し、つねに最先端のインターネットビジネスを吸収。現在はITコンサルティングとビジネスプランニングの分野で活動中。(社)知財ブランド協会パートナー /知財登録コンサルタント。プライベートではオートバイ、ゴルフ、料理、合気道など多趣味。浜松在住(自称浜松観光大使)

ご相談はお気軽に⇒http://www.hghg.co/

Wang Baoxing
米国大手IT企業の開発部門シニアマネージャー。10億ドルを売り上げる大規模企業向けソフトウェアをはじめ、企業のデータ移行プロジェクト、エンタープライズ製品のチューニング、大規模ECサイトの開発・管理も行っている。現在は常に15以上のプロジェクトを管理し、これまでも30以上のメガプロジェクトの責任者として成功を収めた。来日経験があり、日本料理をこよなく愛し、日本文化にはまっている日々を過ごす。

GMOクラウドアカデミーYouTubeチャンネルはこちらから

アカデミー用バナー

メルマガ会員募集中!

アカデミーの最新情報や会員限定のお得な情報をお届けします。

メルマガ登録はこちら