memcached を使用してサイトのパフォーマンスを高める(情報元のブックマーク数)

初めてmemcacheを使うときはかなり理解に苦しんだけど、こういうのがあったら、もうちょっと早く理解できたかも。

memcached を使用すると、データベースからロードされてフォーマット設定された情報を、Web ページに直接使用できる形式で格納することができます。そしてこの情報は RAM からロードされ、データベースや他の処理を介してディスクからロードされるわけではないため、情報へのアクセスはほとんど瞬時に行われます。
繰り返すと、memcached は頻繁に使用される情報を格納し、ディスクやデータベースといった低速ソースからの情報のロードや処理を減らすためのキャッシュです。
memcached とのインターフェースはネットワーク接続によって提供されます。これはつまり、1 つの memcached サーバーを複数のクライアントで共有できるということです (または、この記事の後の方で説明するように、複数の memcached サーバーを複数のクライアントで共有することもできます)。このネットワーク・インターフェースは高速であり、また memcached サーバーはパフォーマンスを向上させるために、意図的に認証やセキュアな通信をサポートしていませんが、それによって memcached の使用方法が制限されることはないはずです。memcached サーバーはネットワークの内側部分に存在する必要があります。実用的なネットワーク・インターフェース、そして複数の memcached インスタンスを使用できるという手軽さのため、複数のマシン上にある、使用されていない RAM を活用し、全体としてのキャッシュ・サイズを大きくすることができます。

memcached を使用してサイトのパフォーマンスを高める

memcached を使ってはならない場合

memcached は単純ですが、memcachedインスタンスを想定外の方法で使ったり、また場合によると望ましくない方法で使ったりしたくなる場合があります。

memcached はデータベースではない

memcached の誤った使い方として最もよくあるのは、キャッシュとしてではなく、データ・ストアとして使用する使い方です。memcached の一番の目的は、memcached を使わない場合には他のソースから取得したり、取得して組み立てたりすることになるデータに対し、そのデータを取得するまでの時間を短縮することです。その一例は、データベースから情報を取得する場合で、特に、取得した情報をフォーマット設定したり、操作したりしてからユーザーに表示する場合などです。memcached は、こうして加工された情報をメモリーに格納しておくことで、データが必要になるたびにそのタスクを繰り返し実行する必要がないように作られています。
アプリケーションを実行するための唯一の情報ソースとして memcached を使ってはいけません。memcached に含まれるデータは、いつでも他のソースから取得できる必要があります。また、memcached はキーと値の単なるストアにすぎないことを頭に入れておく必要があります。memcached に含まれているデータに対してクエリーを実行したり、memcached の内容を繰り返し処理して情報を抽出したりすることはできません。memcached は、何度も使用する必要のあるデータのブロックやオブジェクトを保存するために使用すべきものです。

データベースの行やファイルをキャッシュしない

データベースからロードされた何行ものデータを格納するのに memcached を使うことはできますが、その使い方は実際にはクエリー・キャッシュであり、大部分のデータベースには専用のクエリー・キャッシュ・メカニズムが用意されています。同じことは、画像やファイルシステムのファイルなど、他のオブジェクトにも言えます。多くのアプリケーションや Web サーバーには、そうした種類の作業のために、十分に最適化されたソリューションが既に用意されています。
情報をロードしてフォーマット設定した後、memcached を使って情報の全ブロックを格納すると、使い勝手とパフォーマンスを向上させることができます。ブログの例の場合、情報を格納するのに最も適したタイミングは、ブログのカテゴリーをオブジェクトとしてフォーマット設定した時点、あるいは HTML のフォーマットにした後です。するとブログ・ページの作成は、コンポーネント (ブログ・ポスト、カテゴリー・リスト、投稿履歴など) を memcached からロードし、完成した HTML をクライアントに書き戻すだけでよくなります。

memcached はセキュアではない

memcached は確実に最高のパフォーマンスが得られるようにするために、認証であれ、暗号化であれ、どんな形のセキュリティーも提供していません。これはつまり、アプリケーションをデプロイした環境と同じプライベート側のゾーンに memcached サーバーを配置して memcached サーバーへのアクセスを処理する必要があり、またセキュリティーが必須の場合には UNIXR のソケットを使用し、現在のホスト上にあるアプリケーションのみが memcached サーバーにアクセスできるようにする必要がある、ということです。
そうした対策により、柔軟性やレジリエンシーが多少失われ、またネットワークを介して複数のマシンで RAM キャッシュを共有することができなくなりますが、memcached のデータをセキュアにする必要がある場合には、上記の方法が唯一のソリューションです。

memcached を使用してサイトのパフォーマンスを高める

screenshot