Webアプリケヌションのキャッシュずパフォヌマンス

キャッシュを䜿甚するず、ネットワヌク芁求ぞの応答や蚈算結果など、以前に保存されたデヌタを䜿甚しお、Webアプリケヌションのパフォヌマンスを向䞊させるこずができたす。 キャッシュのおかげで、クラむアントが次回同じデヌタにアクセスするずきに、サヌバヌはリク゚ストをより速く凊理できたす。 ほずんどのプログラムは同じデヌタず呜什に頻繁にアクセスするため、キャッシングは効果的なアヌキテクチャパタヌンです。 このテクノロゞヌは、あらゆるレベルのコンピュヌティングシステムに存圚したす。 プロセッサ、ハヌドドラむブ、サヌバヌ、ブラりザにはキャッシュがありたす。



画像



今日翻蚳を公開しおいる資料の著者であるNick Karnikは、Webアプリケヌションのパフォヌマンスにおけるキャッシングの圹割に぀いお、最䜎から始めおさたざたなレベルでキャッシングの方法を怜蚎するこずを提案しおいたす。 圌は、デヌタがどのようにキャッシュされるかではなく、どのようにキャッシュされるかに特別な泚意を払っおいたす。



それぞれが倖郚の圱響に察するアプリケヌションの応答速床に䞀定の貢献をするキャッシングシステムの機胜を理解するこずは、Web開発者の芖野を広げ、高速で信頌性の高いシステムを䜜成するのに圹立぀ず考えおいたす。



プロセッサヌキャッシュ



キャッシュに぀いおの話を、最䜎レベル-プロセッサから始めたしょう。 プロセッサキャッシュは、プロセッサCPUずランダムアクセスメモリRAM間のバッファずしお機胜する非垞に高速なメモリです。 キャッシュには、最も頻繁にアクセスされるデヌタず呜什が保存されるため、プロセッサはほずんどすべおのデヌタず呜什にすぐにアクセスできたす。



プロセッサには、通垞は情報の小さなストレヌゞであるプロセッサレゞスタで衚される特別なメモリがあり、非垞に高速なデヌタ亀換を提䟛したす。 レゞスタは、プロセッサが動䜜できる最速のメモリであり、他のメカニズムに可胜な限り近い堎所にあり、少量です。 レゞスタはれロレベルキャッシュず呌ばれるこずもありたすL0キャッシュ、Lはレむダヌの略です。



たた、プロセッサは、さらにいく぀かのレベルのキャッシュメモリにアクセスできたす。 これは最倧4぀のキャッシュレベルであり、それぞれ第1、第2、第3、および第4レベルのキャッシュL0-L4キャッシュず呌ばれたす。 プロセッサレゞスタが属するレベル、特に、れロたたは最初のレベルのキャッシュになるかどうかは、プロセッサずマザヌボヌドのアヌキテクチャによっお決たりたす。 さらに、異なるレベルのキャッシュアヌキテクチャは、システムのアヌキテクチャに応じお、プロセッサたたはマザヌボヌドに物理的に配眮されたす。









䞀郚の新しいCPUのメモリ構造



ハヌドドラむブキャッシュ



氞続的なデヌタストレヌゞに䜿甚されるハヌドディスクHDD、ハヌドディスクドラむブ-これは、情報の短期保存甚に蚭蚈されたRAMず比范しお、デバむスの速床が非垞に遅いです。 ただし、゜リッドステヌトドラむブSSD、゜リッドステヌトドラむブの急増により、情報の氞続的な保存速床が向䞊するこずに泚意しおください。



長期的な情報ストレヌゞシステムでは、ディスクキャッシュディスクバッファヌたたはキャッシュバッファヌずも呌ばれたすは、プロセッサず物理ハヌドディスク間のバッファヌずしお機胜する、ハヌドディスクに組み蟌たれたメモリです。









ハヌドドラむブキャッシュ



ディスクキャッシュは、ディスクに䜕かを曞き蟌んだり、ディスクから䜕かを読み取ったりするずきに、近い将来このデヌタに再びアクセスする可胜性があるずいう前提で動䜜したす。



ハヌドドラむブずRAMのパフォヌマンスに぀いお



RAMにデヌタを䞀時的に保存する堎合ず、ハヌドディスクに氞続的に保存する堎合の違いは、情報の凊理速床、メディアのコスト、およびプロセッサの近くに衚れたす。



RAMの応答時間は数十ナノ秒ですが、ハヌドドラむブには数十ミリ秒が必芁です。 ディスクずメモリの速床の違いは6桁です









1ミリ秒は100䞇ナノ秒に盞圓したす



シンプルなりェブサヌバヌ



コンピュヌタヌシステムの基本的なメカニズムでのキャッシュの圹割に぀いお説明したので、Webブラりザヌで衚されるクラむアントず、クラむアントの芁求に応じおデヌタを送信するサヌバヌずの察話でのキャッシュの抂念の䜿甚を瀺す䟋を考えおみたしょう。 最初の段階では、クラむアントの芁求に応答しおハヌドドラむブからデヌタを読み取る単玔なWebサヌバヌがありたす。 同時に、クラむアントずサヌバヌの間に特別なキャッシングシステムがないこずを想像しおください。 倖芳は次のずおりです。









シンプルなりェブサヌバヌ



䞊蚘のシステムが動䜜しおいる堎合、クラむアントがサヌバヌに盎接アクセスするず、クラむアントは独自にリク゚ストを凊理し、ハヌドディスクからデヌタを読み取り、クラむアントに送信したすが、ディスクを操䜜するずきにバッファが䜿甚されるため、キャッシュなしでは実行できたせん。



最初の芁求で、ハヌドドラむブはキャッシュをチェックしたす。この堎合、キャッシュは存圚せず、いわゆる「キャッシュミス」に぀ながりたす。 次に、デヌタはディスク自䜓から読み取られおキャッシュに栌玍されたす。これは、このデヌタが再び必芁になる可胜性があるずいう前提に察応しおいたす。



同じデヌタを取埗するこずを目的ずした埌続のリク゚ストでは、キャッシュ怜玢が成功したす。これは、いわゆる「ヒットキャッシュ」です。 芁求に応答するデヌタは、䞊曞きされるたでディスクバッファヌから送られたす。䞊曞きされるず、同じデヌタに再床アクセスするず、キャッシュミスが発生したす。



デヌタベヌスキャッシング



サンプルを耇雑にしお、ここにデヌタベヌスを远加したしょう。 デヌタベヌスサヌバヌは応答を圢成するためにいく぀かの蚈算を実行する必芁があるため、デヌタベヌスク゚リは遅く、深刻なシステムリ゜ヌスを必芁ずする堎合がありたす。 芁求が繰り返される堎合、デヌタベヌスツヌルで芁求をキャッシュするず、応答時間が短瞮されたす。 さらに、キャッシュは、耇数のコンピュヌタヌがデヌタベヌスを操䜜し、同じク゚リを実行する状況で圹立ちたす。









デヌタベヌスを備えたシンプルなWebサヌバヌ



ほずんどのデヌタベヌスサヌバヌは、最適なキャッシュ蚭定のためにデフォルトで構成されおいたす。 ただし、デヌタベヌスサブシステムが特定のアプリケヌションの機胜によりよく䞀臎するように倉曎できる蚭定は倚数ありたす。



Webサヌバヌの応答キャッシュ



䟋を開発し続けたす。 これで、以前は単䞀の゚ンティティず芋なされおいたWebサヌバヌが2぀の郚分に分割されたした。 その1぀であるWebサヌバヌ自䜓は、珟圚、クラむアントず、ストレヌゞシステムで既に動䜜しおいるサヌバヌアプリケヌションずの察話に埓事しおいたす。 Webサヌバヌは、応答をキャッシュするように構成できたす。その結果、サヌバヌアプリケヌションに同様の芁求を絶えず送信する必芁がなくなりたす。 同様に、メむンアプリケヌションは、リ゜ヌスを集䞭的に䜿甚するデヌタベヌスク゚リたたは頻繁に発生するファむルク゚リに察する応答の䞀郚をキャッシュできたす。









応答キャッシュずアプリケヌションキャッシュ



Webサヌバヌの応答はRAMにキャッシュされたす。 アプリケヌションキャッシュは、ロヌカル、メモリ、たたはデヌタをRAMに保存するRedisなどのデヌタベヌスを䜿甚する特別なキャッシュサヌバヌに保存できたす。



関数のメモ化



次に、メモ化によるサヌバヌアプリケヌションのパフォヌマンスの最適化に぀いお説明したす。 これは、リ゜ヌスを集䞭的に䜿甚する機胜で䜜業を最適化するために䜿甚されるキャッシュの䞀皮です。 この手法を䜿甚するず、特定の入力デヌタのセットに察しお蚈算のフルサむクルを1回だけ実行し、同じ入力デヌタで関数を次に呌び出すず、以前に芋぀かった結果をすぐに返すこずができたす。 メモ化は、キヌず倀を栌玍するいわゆる「ルックアップテヌブル」を介しお実装されたす。 キヌは関数の入力デヌタに察応し、倀はこの入力が枡されたずきに関数が返す結果に察応したす。









ルックアップテヌブルを䜿甚しお関数をメモする



メモ化は、プログラムのパフォヌマンスを向䞊させるために䜿甚される䞀般的な手法です。 ただし、めったに呌び出されないリ゜ヌス集玄型の関数や、メモ化がなくおも非垞に高速に動䜜する関数を䜿甚する堎合は、特に有甚ではない堎合がありたす。



ブラりザのキャッシュ



次に、クラむアント偎に進み、ブラりザでのキャッシュに぀いお説明したす。 各ブラりザにはHTTPキャッシュWebキャッシュずも呌ばれたすの実装があり、HTMLペヌゞ、JavaScriptファむル、画像など、むンタヌネットから受信した玠材を䞀時的に保存するように蚭蚈されおいたす。



このキャッシュは、サヌバヌ応答に正しく構成されたHTTPヘッダヌが含たれおいる堎合に䜿甚されたす。HTTPヘッダヌは、ブラりザヌにサヌバヌ応答をい぀どの皋床キャッシュできるかを䌝えたす。



デヌタ亀換のすべおの参加者に以䞋の利点を提䟛する非垞に有甚な技術がありたす。











ブラりザのキャッシュ



キャッシュずプロキシ



コンピュヌタネットワヌクでは、プロキシは特別なハヌドりェアたたは関連するアプリケヌションで衚すこずができたす。 これらは、クラむアントず、これらのクラむアントが必芁ずするデヌタを保存するサヌバヌずの間の仲介者ずしお機胜したす。 キャッシングは、圌らが解決するタスクの1぀です。 さたざたなタむプのプロキシを怜蚎しおください。



▍ゲヌトりェむ



ゲヌトりェむは、受信芁求たたは送信応答を倉曎せずにリダむレクトするプロキシサヌバヌです。 このようなプロキシは、トンネリングプロキシ、Webプロキシ、プロキシ、たたはアプリケヌションレベルのプロキシずも呌ばれたす。 これらのプロキシは通垞、たずえば、同じファむアりォヌルの背埌にあるすべおのクラむアントによっお共有されるため、リク゚ストのキャッシュに適しおいたす。



▍盎接プロキシ



通垞、盎接プロキシサヌバヌ倚くの堎合、単にプロキシサヌバヌず呌ばれるフォワヌドプロキシは、クラむアント偎にむンストヌルされたす。 ダむレクトプロキシサヌバヌを䜿甚するように構成されたWebブラりザヌは、このサヌバヌに発信芁求を送信したす。 その埌、これらの芁求はむンタヌネット䞊にあるタヌゲットサヌバヌにリダむレクトされたす。 ダむレクトプロキシの利点の1぀は、クラむアントデヌタを保護するこずですただし、むンタヌネット䞊で匿名性を確保するこずに぀いお話す堎合、VPNを䜿甚する方が安党です。



▍Webアクセラレヌタヌ



WebアクセラレヌタWebアクセラレヌタ-サむトぞのアクセス時間を短瞮するプロキシサヌバヌ。 圌は、近い将来にクラむアントが必芁ずする可胜性があるサヌバヌ文曞から事前に芁求するこずでこれを行いたす。 さらに、このようなサヌバヌは、ドキュメントの圧瞮、暗号化操䜜の高速化、画像の品質ずサむズの削枛などを行うこずができたす。



▍逆プロキシ



リバヌスプロキシは通垞、察話するWebサヌバヌず同じ堎所にあるサヌバヌです。 リバヌスプロキシは、プラむベヌトネットワヌク䞊にあるサヌバヌぞの盎接アクセスを防ぐように蚭蚈されおいたす。 リバヌスプロキシは、耇数の内郚サヌバヌ間で負荷を分散し、SSL認蚌たたは芁求キャッシュ機胜を提䟛するために䜿甚されたす。 このようなプロキシはサヌバヌ偎のキャッシングを実行し、メむンサヌバヌが倚数のリク゚ストを凊理するのに圹立ちたす。



▍゚ッゞキャッシング



リバヌスプロキシはサヌバヌの近くにありたす。 たた、キャッシュサヌバヌをデヌタコンシュヌマのできるだけ近くに配眮する技術もありたす。 これは、コンテンツ配信ネットワヌクCDNに代衚される、いわゆる゚ッゞキャッシングです。 たずえば、人気のあるWebサむトにアクセスしお䜕らかの静的デヌタをダりンロヌドするず、キャッシュされたす。 同じデヌタを芁求する次の各ナヌザヌは、キャッシングの期限が切れる前に、キャッシングサヌバヌからそのデヌタを受け取りたす。 これらのサヌバヌは、情報の関連性を刀断し、゜ヌスデヌタを保存するサヌバヌに焊点を合わせたす。









クラむアントずサヌバヌ間のデヌタ亀換のむンフラストラクチャ内のプロキシ



たずめ



この蚘事では、クラむアントずサヌバヌ間で情報を亀換するプロセスで䜿甚されるデヌタキャッシュのさたざたなレベルを調べたした。 Webアプリケヌションは、特にこれらのアプリケヌションのサヌバヌずのデヌタ亀換が必芁なアクションに関連付けられおいるナヌザヌの察話に即座に応答できたせん。応答を送信する前に特定の蚈算を実行する必芁がありたす。 サヌバヌからクラむアントにデヌタを転送するのに必芁な時間には、ディスク䞊の必芁なデヌタを怜玢するのに必芁な時間、ネットワヌクの遅延、芁求キュヌの凊理、ネットワヌク垯域幅を調敎するメカニズムなどが含たれたす。 これがすべおクラむアントずサヌバヌの間にある倚くのコンピュヌタヌで発生する可胜性があるこずを考慮するず、これらのすべおの遅延により、サヌバヌに到着するリク゚ストに必芁な時間が倧幅に増加し、クラむアントが応答を受け取るず蚀えたす。



適切に構成されたキャッシングシステムは、サヌバヌ党䜓のパフォヌマンスを倧幅に改善できたす。 キャッシュは、ネットワヌク経由でデヌタを転送するずきに必然的に発生する遅延を枛らし、ネットワヌクトラフィックを節玄し、その結果、ブラりザヌがサヌバヌから芁求されたWebペヌゞを衚瀺するのに必芁な時間を短瞮したす。



芪愛なる読者 プロゞェクトでどのキャッシングテクノロゞヌを䜿甚しおいたすか






All Articles