【キャッシュ】システムにはたくさんのキャッシュの種類がある?! ひとくくりにしてはいけないよ!(PART3)
アプリ開発をしていると必ず出てくると言ってもいい「キャッシュ」!!
キャッシュを用意することで処理時間を削減し、パフォーマンスを良くすることができます
「そんなことは知っているよ!」という人は多いとは思いますが、
前回に引き続き、改めてどんな種類があるのか、どんなデータを保管しているのか確認していきましょう!!
今回も3つ紹介していきます!!(おそらく今回が最後かな…(゜.゜))
1. CDNキャッシュ
CDN(Content Delivery Network)キャッシュはウェブコンテンツを高速かつ安定的に配信するために使用される技術の一つで
CDNは地理的な距離やネットワークの帯域幅の問題を克服し、コンテンツを最も近い場所のキャッシュサーバーにキャッシュすることで、ユーザーにより速くコンテンツを配信することができます
CDNキャッシュでは、主に2つの方法があります。
プッシュキャッシュ
プッシュキャッシュはコンテンツを事前にキャッシュサーバーにアップロードしておく方法です
最初のリクエスト時にすでにキャッシュされているコンテンツを返すことができ、コンテンツのダウンロード時間を大幅に短縮することができます
プルキャッシュ
プルキャッシュは最初のリクエスト時にコンテンツをキャッシュする方法です
ユーザーがリクエストを送信すると、キャッシュサーバーは最も近いオリジンサーバーにアクセスし、コンテンツをダウンロードしてキャッシュします。次のリクエスト時には、すでにキャッシュされたコンテンツを返すことができます
CDNキャッシュには以下のようなメリットがあります。
- ユーザーへのコンテンツ配信速度が向上する
- サーバーの負荷を軽減し、安定的なサイト運営を可能にする
- 地理的な距離やネットワークの帯域幅の問題を解決する
- コンテンツのキャッシュにより、サイトのセキュリティを向上することができる
ただし、CDNキャッシュはコンテンツの更新やキャッシュされたコンテンツの削除が必要になった場合には、注意が必要です
また、CDNキャッシュによる配信はコンテンツの一貫性に関する問題がある場合があります
このような問題を避けるために、適切なCDNキャッシュの設定が必要になります
2. セッションキャッシュ
セッションキャッシュとはウェブアプリケーションにおいて、同じセッションに関連する複数のリクエストで利用されるデータを一時的に保存するためのキャッシュです
セッションはウェブサイトにアクセスしたユーザーのブラウザとウェブサーバーの間で、一定期間にわたって維持される情報のことで、セッションキャッシュはこの期間において利用されるデータを保存するために使用されます
セッションキャッシュは通常、セッションが維持される期間に限られるため、データが一時的であり、永続的な保存が必要ではないため、メモリ内に保持されます!
セッションキャッシュはウェブアプリケーションのパフォーマンスを向上させるために重要であり、データベースやファイルストレージなどの永続的なストレージを使用するよりも高速にアクセスできるため、リクエストに対する応答時間を短縮することができます
セッションキャッシュにはいくつかの種類があります
例えば、アプリケーションサーバー側でセッションを管理するセッションキャッシュや、ロードバランサーによって複数のアプリケーションサーバーの間でセッションを分散管理するセッションスティッキーキャッシュがあります
セッションキャッシュには有効期限を設定することができます
有効期限を設定することで、セッションが自動的に破棄され、メモリリークを防止することができるのです
さらに、セッションキャッシュに保存されたデータが古いデータも更新されますね
ただ、危険性はやはりあります。。。
セッションキャッシュを適切に設定しないと、重要な情報が不正にアクセスされる可能性があります
適切なセキュリティメカニズムが必要ですぞ。。。
3. オブジェクトキャッシュ
オブジェクトキャッシュとはウェブアプリケーションにおいて、データベースや外部APIから取得したオブジェクト(例:ユーザー情報、商品情報、画像ファイルなど)を一時的に保存するためのキャッシュのことです
オブジェクトキャッシュを使用することで、同じデータを取得するためにデータベースや外部APIにアクセスする回数を減らすことができるため、ウェブアプリケーションのパフォーマンスを向上させることができます
オブジェクトキャッシュは通常、オブジェクトが比較的小さいため、データが一時的であり、永続的な保存が必要ではないため、メモリ内に保持されます
他キャッシュにもあるように有効期限を設定することができるため、オブジェクトが自動的に破棄され、メモリリークを防止することができます
オブジェクトキャッシュにはキャッシュヒット率を高めるために、キャッシュアルゴリズムを適切に選択することが重要です
代表的なアルゴリズムとしてはLeast Recently Used (LRU) や Least Frequently Used (LFU) などがあります
(どんなものかは今度調べてみます(゜-゜))
オブジェクトが更新された場合にキャッシュを更新することも重要です
更新されたオブジェクトをキャッシュに保存しなければ、再度リクエストした際にはデータベースや外部APIから再度オブジェクトを取得することになります
レスポンスが遅くなるという事です
オブジェクトキャッシュでも、もちろんセキュリティ上の問題には注意しなくてはなりません
たとえば、キャッシュされたオブジェクトが誰でもアクセス可能である場合、機密性の高い情報が漏洩する可能性があります
そのため、オブジェクトキャッシュに保存する情報にはアクセス権限を設定するなどの適切なセキュリティ対策が必要です
キャッシュの種類についてpart1から始まりpart3にかけて紹介しました!
キャッシュはアプリケーションのパフォーマンスを向上させるために非常に重要なものであるということがわかったのではないでしょうか?
非常に大事な技術ではあるのですが
設定やメンテナンスをしていないとセキュリティ上の脆弱性、逆に負荷がかかりパフォーマンスが悪くなるといったことを生み出します
キャッシュをマスタしていくことで良い製品が生み出せそうですね!!
ではっ
是非フォローしてください
最新の情報をお伝えします