こんにちは。プロダクト開発部のサーバサイドエンジニアの荒川です。普段はSansanのスマホアプリのAPIの開発をしています。
今回扱うテーマは皆さん大好きキャッシュ(Cache) です。
Webアプリケーションを開発するエンジニアである以上、キャッシュの存在からは逃れられないでしょう。 例えばパフォーマンスを向上させる手段として、キャッシュを仕込むことは往々にしてあるかと思います。
キャッシュを使えばパフォーマンスが向上しそう、というイメージも強いため安易に選択する戦略になりがちですが、正しく扱うことは本質的に難しいです。 しかしキャッシュを上手に使えば、ユーザ体験を圧倒的に向上させることができます。
そんな諸刃の剣キャッシュ💰について考慮するべきこと、その戦略を改めてまとめてみました。
今回の対象
今回の対象は、アプリケーションレベルでのキャッシュ戦略を取り扱います。 いわゆるキャッシュメモリ、ブラウザのキャッシュ、HTTPにおけるキャッシュ、CDNにおけるキャッシュなどとは文脈上異なるので注意してください。
さて整理すべきは、クライアント(Client)、サーバ(Server)、キャッシュ(Cache)、データベース(Database)の4つです。 本エントリでは以下のアーキテクチャをベースとしていきます。
システム構成はシンプルなクライアントサーバのWebシステムです。 説明の都合上、各種サーバの分散化や冗長化などは割愛しています。
その他の用語を軽く説明します。
クライアント(Client)は、Webアプリケーションにおいてはブラウザに該当します。
サーバ(Server)は、アプリケーションサーバです。キャッシュサーバやデータベースと通信をするためにアプリケーションコードが動いています。
キャッシュ(Cache)は、キャッシュサーバです。当たり前ですが、I/Oについてはデータベースよりも高速でなければいけません。
データベース(Database)は、基本的にRDBMSと理解してもらって問題ありません。またS3などのストレージを追加で置いてもらってもOKです。
続きを読む