I.概要
- 原理:
1)データの書き込み/読み出し速度より速い記憶装置(デバイス)
2)最も近い位置にデータキャッシュからアプリケーション
3)データは、ユーザの位置に最も近いキャッシュ - キャッシュ分類
1)CDNキャッシング
2)リバースプロキシキャッシュ
キャッシュ分散3)
4)ローカル・アプリケーション・キャッシュ - メディアバッファ
ワニス、Ngnix、イカ、Memcacheの:1)を使用するミドルウェア 、Redisの、Ehcacheの等
2)キャッシュの内容を:ファイル、データは、オブジェクト
3)培地を緩衝:CPU、メモリ(ローカル、分散型)、ディスク(ローカル分散) - キャッシュ設計
1)キャッシュの内容:ホットトランザクション2つの静的リソース。
2)キャッシュ位置:CDN、リバースプロキシ、分散キャッシュサーバ、機械(メモリ、ハードディスク) - キャッシュポリシー
1)有効期限ポリシー:(1)一定時間は、たとえば、指定された時間は、30分のキャッシュである;(2)相対時間:例えば、最後の10分間でないデータアクセス;
2)同期機構:(1)リアルタイム書き込み; (2)非同期リフレッシュ - バッファの目的:メディアへの熱いまたはユーザーに最も近い高速アクセスへのデータは、応答時間を短縮し、データアクセスを高速化します
二、CDNキャッシュ
- 原理:ユーザーがサイトにアクセスしたときにキャッシュサーバが直接ユーザの要求に応じて、キャッシュサーバ、正常に動作しているグローバルロード技術が最も近いキャッシュサーバへのユーザのアクセスポイントを使用する、比較的高密度のユーザアクセスやネットワークを地域に配布しました
- メリット
1)ローカル・キャッシュ・アクセラ:アクセス速度、特に多くの画像と静的ページのサイト高めるため
2)ミラーサービスを:その異なるネットワークを確保するために、キャリア間のネットワーク・アクセラレーションを実現するために、異なる事業者のボトルネックとの間の相互接続の影響を排除ユーザーは、良い品質へのアクセスを得ることができます
3)リモート加速を:リモートアクセスユーザーは、自動的に最速のキャッシュサーバ、リモートアクセス速度を選択し、技術のバランスをとるキャッシュDNSサーバベースのインテリジェントなロードを選択するために、
4)帯域幅の最適化を:サーバの自動生成リモートミラー(鏡)キャッシュサーバ、データにアクセスするリモートユーザーは、元のサイトの削減、ネットワークトラフィックの共有、リモートアクセスのための帯域幅を減少させる、キャッシュサーバから読み取るには、Webサーバーの負荷などの機能
広範なCDNノードプラス:攻撃に対する5)クラスタサービスの質の向上を確保しつつ、ノード間のインテリジェントな冗長機構は、ハッキング防止に効果的であることやウェブサイト上の様々なDDoS攻撃の影響を低減することができます - 欠点
1)動的リソースのキャッシング、我々はソリューション(リアルタイムに注意を払う必要があります。メインキャッシュの静的リソース、動的なマルチレベル・キャッシュ・リソースまたは準リアルタイム同期を確立)
:データの一貫性と適時性を確保するための方法2)はトレードオフ(ソリューションを検討する必要がありますキャッシュの有効期限を設定し(1時間、最終的一貫性))
第三に、リバースプロキシキャッシュ
- 原則:リバースプロキシサーバルームは、アプリケーション・プロセスWEBサーバに対するすべての要求に位置しています。ユーザーは、プロキシサーバー上のページバッファを要求した場合、プロキシサーバは、直接ユーザーにコンテンツを送信バッファ。リクエストXianxiangのWEBサーバーをバッファリングすることなく、データを取得し、ユーザーにローカルキャッシュ。これにより、WEBサーバの負荷を軽減、WEBサーバへのリクエストの数を減少させることによって
- プロキシキャッシュの比較:一般的に使用されるプロキシキャッシュニス、イカ、nginxのがされている
1)ワニスキャッシュとイカがプロのサービスである、nginxのモジュールサードパーティのサポートを必要とする
2)ワニスキャッシュが使用するメモリの種類、メモリの頻繁な交換を避けるために、ディスク・ファイル、パフォーマンスイカよりも高い;
3)はワニスであるため、メモリキャッシュは、そのようなCSS、JS、素晴らしいサポートは、バックエンドの永続キャッシュはイカやATS使用することができるかの小さな絵のような小さなファイルので
4)イカと大はフル機能を備えました様々な静的ファイルキャッシュに適した、通常HAProxy nginxの又は負荷の先端に取り付けられた複数のインスタンスを実行バランシング
、nginxのサードパーティのモジュールは、一般的にリバースプロキシとして使用される実質的にワニス達した性能を、緩衝NCACHE使用して行わ5)あなたは、単純なキャッシュを実現することができます
第四に、分散キャッシュ-memecache
- 特徴:
1)キャッシュなどの物理メモリは、別のサーバ上で実行することができます。あなたはより多くのデータ・キャッシュを使用する場合は、あなたがより多くのmemcacheのプロセス(別のポート)を開くか、memcacheのはキャッシュを分散使用することができ、各プロセスの最大2Gは、データを別の物理マシンまたは仮想マシン上でキャッシュされている
キー-を使用して)2単一のインデックスに編成構造化データの形式で格納データ値への途中、データ項目がOの時の複雑さを問い合わせることができる(1)
3)単純なプロトコル:プロトコルベースのテキスト行、直接memcachedのTelnetサーバを介してデータ操作にアクセスし、簡単な、便利なことができ
、内蔵メモリ管理)4:メモリがいっぱいになると、すべてのデータは、より高速なハードディスクよりもデータにアクセスし、メモリに格納され、キャッシュは自動的にLRUアルゴリズムによって削除され使用されていませんが、データの災害復旧の問題を考慮し、サービスを再起動していない、すべてのデータが失われることはありません
分散)5:何の相互通信、各memcachedサーバ間でのデータへの独立したアクセスを、任意の情報を共有することはありません。Serverは、分散機能を持っていない、分散配置がmemcacheのクライアント依存
の戦略をキャッシュ)6:Memcachedのキャッシング戦略はLRUである(最低使用)ポリシーを失効します。場合は、ストレージのデータ項目memcachedを、それがキャッシュ失敗で指定することができ、デフォルトは永久的です。サーバが割り当てられてmemcachedを出て実行すると、それは最初のデータ障害を交換され、そのデータは、最近使用されていません。LRU、memcachedの使用においてレイジーの有効期限ポリシーは、それが預金キー/ vlueを有効期限が切れたかどうかを監視しませんが、キーの値を取得するに記録されているタイムスタンプを見て、期限が切れているキー/値ペアのスペースをチェックし、これは、サーバの負荷を軽減することができます - ワークフロー
クライアントがmemcachedをしているかどうかを確認するために1)のデータを要求するが、そうならば、いや、直接データベースのいずれかの操作要求されたデータを返し
、要求されたデータは、memcachedをしていない場合)2を、よりデータベース、データベースをチェックするために行ってきましたでmemcachedのにデータキャッシュながら(memcachedのクライアントは責任を負いません、プログラムを達成するために必要)、クライアントにデータを取り戻す
の一貫性を保証するために、同時にmemcachedの内の各更新データをデータベースを更新するために)3
に割り当てた場合)4 memcachedのメモリ空間は、LRU(最低使用、LRU)戦略を加えた有効期限ポリシーを使用して、なくなった後、最初の障害データが交換され、その後、データを置き換える最近使用されていません - 分散アルゴリズム:
:1)アルゴリズム残部:欠点簡単な計算、および効率的な整数ハッシュ値最初のキーによって得られた、及び、サーバの数で割った、アクセスサーバは、残り(利点決定memcachedサーバを増加または減少、ほとんどのすべてのキャッシュは失敗し、すべての圧力のバックエンドに直接アクセス)データベースがクラッシュします:、危険
2)ハッシュアルゴリズム:最初の計算memcachedサーバのハッシュ値を、そして0-2の32番目のラウンドに配布しました、キーのハッシュ値は、データを記憶するのと同じ方法を用いて計算した円にマッピングされ、最終的に開始位置を右に見つけることがデータからマッピングし、セーブデータ最初のサーバを見つけるために、それは2を超えた場合にされています32番目、依然としてサーバを見つけることができない、データが最初にmemcachedサーバに保存されますが(最初のサーバが影響されることをサーバー上の反時計回りの円キーでのみ増加をmemcachedサーバを追加します)
第五に、分散キャッシュ-redis
- 導入:
1)Redisのは、オープンソース(BSDライセンス)、メモリベース、マルチ構造データストレージシステムです。データベース、キャッシュやメッセージングミドルウェアとして使用することができる
2)データの文字列などの構造、(文字列)、ハッシュのハッシュ()、リスト(リスト)、セット(セット)、順序集合(ソートされたセット)を複数種類をサポートしています範囲クエリ、ビットマップ、hyperloglogsインデックスクエリの地理空間(地理空間)半径
3)内蔵レプリケーション(複製)、LUAスクリプト(Luaスクリプト)、LRU駆動イベント(LRUエビクション)、トランザクション(取引)とディスクの永続性(永続性)の異なるレベル、およびRedisのセンチネル(センチネル)および自動パーティション(BYクラスタ)ハイアベイラビリティ(高可用性)を提供 - センチネルモード:
1)センチネル(見張り)は、マスターとスレーブが正常に機能しているかどうかをチェックしていきます
Redisのノードを監視すべき問題がある場合、センチネル(センチネル)はAPIや他のアプリケーションを経由して管理者に通知を送信することができます)2。
3)自動フェイルオーバー(自動フェイルオーバー):マスターは仕事、センチネル(見張り)は自動フェイルオーバー操作を開始しますしない場合、それは新しいマスターにアップグレードスレーブマスターの障害の一つである、とマスターの障害をできるようになります他のスレーブは、新しいマスターをコピーするように変更。接続マスターへのクライアントの試みが失敗した場合、クラスタはクラスタが現在のマスターがマスターに失敗置き換えるために使用することができる作り、新しいマスターのクライアント側のアドレスに戻ります。
4)マスタおよびスレーブ・サーバ・スイッチング、redis.confマスター後、スレーブプロファイルとredis.conf sentinel.confコンテンツ、すなわち、マスターredis.confマスターサーバープロファイルが複数の行になり、それに応じて変化しますslaveofの構成、ターゲットsentinel.confの監視は、スワップ続く
5)利点:システムがより堅牢、高可用性
6)欠点:Redisのは、オンライン容量拡張をサポートすることはより困難である、オンライン容量拡張は上限が非常にクラスタ容量が複雑になります達します。この問題を回避するには、運用、保守担当者がシステム上のラインは、リソースの無駄の多くを引き起こした十分なスペースを持っていることを確認する必要があります。configureが複雑 - クラスタモードトランク
N Redisのマスターノードを支持する、マスタノードの各々は、スレーブノード(別読み書き複数のマウントすることができ:書き込みマスターを、それをマーテルスレーブに対応する読み出しから読み出される)アーキテクチャモデル1)
2)を使用しシーンは:あなたのデータが大きい場合、クラスタRedisの使用が推奨され、主に大量データ並行性の高いシナリオの+ +可用性、データの膨大な量のために、クラスタをのRedis
:3)スロットハッシュアルゴリズム
(1)固定Redisのクラスタを16384ハッシュスロットは、各キーのCRC16値を算出し、16384を法、ハッシュに対応するキースロットを取得することができる
(2)各マスターRedisのクラスタは、いくつかのスロットを保持する、3つのそのようなマスターがあり、それはそれぞれかもしれませんマスターハッシュスロットは5000以上保持している
ノードの追加と削除が簡単であることができ、マスタを追加し、意志ハッシュスロット過去の他のマスタの一部を移動させる、マスターを低減、そのハッシュスロットを移動します(3)ハッシュスロット他のマスターは(モバイルハッシュスロットのコストが非常に低い)まで行く
API(4)クライアントは、彼らがにハッシュタグを使用して、ハッシュスロットに行かせ、データを指定することができます 今
4)通信機構
(1)ゴシップ:利点は、別の更新要求の後に、意志を散乱し、一箇所に集中しないのメタデータを更新し、すべてのノードにヒットするまで更新されていること、特定の遅延は、圧力を減少させます。欠点は、メタデータは遅延がある更新し、一部の操作は、いくつかのヒステリシスのクラスタにつながる可能性があるだろう
(2)各ノードは、ノード間の通信のための専用ポートを有し、ポート番号+10000は、7001などのサービス自体、提供され、その後、ノード間通信ポートに随時17001(各ノードの意志でその他の点ポンがpingを受信しながら、いくつかの他のノードを返すようにpingメッセージを送信した後)
5)ゴシッププロトコル:ピング、ピンポン、ミート、失敗、等を含むメッセージを複数、備える
(1)を満足する:ノードを送信新しいノードがクラスタに参加できるように、新しいノードを満たすために、新しいノードは他のノードと通信を開始します
(2)のping:他のノードへの各ノードが頻繁に自身の状態を含んでいるのpingを送信し、独自のメンテナンスを有していますクラスタメタデータピング互いにメタデータの交換を介して、
(3)ピンポン:会うとリターンのpingを、それ自身のステータスおよび他の情報を更新し、報知情報にも使用することができる含ま
失敗(4):別のノード失敗するノードを決定しますその後、それは他のノードに通知することができない他のノードに送信し、指定されたノードがダウンしている
6)、高可用性
ノードがノードpfailを考慮した場合(1)、及び ノードの半分以上がpfail考慮される場合、メッセージは、それが失敗となるであろう、他のノードへのpingは、pingをゴシップます
スイッチを選択し、すべてのスレーブノードから、ダウンタイムの(2)ノードマスターマスタノード(スレーブノードをチェックマスターノードが複数のクラスタ・ノード・タイムアウトより*クラスタ-た場合、切断されるたびに 、スレーブ妥当性因子は、 次にマスタに切り替えない修飾されていません)
各ノード(3)から、全ての選挙の時間を設定し、マスタ上のデータの独自のコピーを相殺するために応じて、ノードから大きい(複数のコピーデータ)オフセット、より前方選挙時間、優先選挙
(4)すべてマスターノード開始スレーブ選挙、マスターノード(N / 2 + 1のほとんどがあれば、投票に選挙にスレーブに ) 、その後の選挙を通じて、それはマスターにノードから切り替えることができ、いずれかのノードに投票しています
( 5)を行うには、マスタノードからスイッチングノードからマスターノードにスイッチオーバー
六、memcacheのとRedisのコントラスト
- データ構造:Memcacheのが唯一のキー値ストレージをサポートし、Redisのは、このようなキー値、ハッシュ、リスト、セット、ZSETなど複数のデータ型をサポートしています
- マルチスレッド:; MemcacheのRedisのよりもCPU使用率Memcacheのサポートマルチスレッド、Redisのは、シングルスレッドをサポート
- 永続性:Memcacheのは、永続性、Redisの永続性のサポートをサポートしていません。
- (Memcacheのより高い圧縮を用いた場合よりも)メモリキャッシュのハイ、ローのRedis:メモリ使用率
- 有効期限ポリシー:memcacheの有効期限が切れて後、キャッシュデータをクリアし、Redisのは特殊な糸を持って、データがデータを取るために、次の問題につながる、キャッシュを削除しないでください
七つのローカルキャッシュ
- ディスクキャッシュ:ハードディスクから読み込むハードディスクにキャッシュデータ、。原理は直接速くより高速なネットワークを介してデータベースを読むより、ネットワーク伝送の消費量を削減する、ネイティブファイルを読み込んであります。高速で使用することができ、非常に高いではありませんが、キャッシュメモリのシーンの多くを必要と
- キャッシュメモリ:マシンのメモリに直接データを格納するために、キャッシュは、オブジェクトプログラムによって直接維持(小さなキャッシュのため、スピードに敏感なシーン)にアクセスする最速の方法です
八のキャッシュ・アーキテクチャの例
- 職務分掌(推奨される方法、非取得することはありません):
1)CDN:保存する静的リソースHTML、CSS、JS、等;
2)リバースプロキシ:静的および動的な分離、ユーザが要求したキャッシュのみ静的リソース
キャッシュ分散3):キャッシュデータベースホットデータ
4)ローカルキャッシング:キャッシュアプリケーションデータ及び他の一般的に使用される辞書 - 要求処理
CDN直接戻さキャッシュがある場合1)ブラウザは、クライアントに要求を送信する
2無CDNキャッシュリバースプロキシサーバがアクセスされていない場合);リバースプロキシキャッシュサーバがある場合、直接戻さ
3)リバースプロキシサーバ場合いかなるキャッシュまたはダイナミック要求、アクセス・アプリケーション・サーバ
4)ローカル・キャッシュ・サーバ・アプリケーションにアクセスするため、キャッシュが存在する場合、プロキシサーバーが返され、データキャッシュ(動的要求がキャッシュされていない)
はデータをローカルにキャッシュされていない場合は5)、次いで分散を読みませんバッファと、アプリケーション・サーバへ戻り、アプリケーションサーバのローカル・キャッシュ・データ・キャッシュ(部分)に
6)は、データがキャッシュに分散されていない場合、アプリケーションは、分散キャッシュにデータベースのデータを読み出して
九、データの一貫性(永続的なデータのコピーに属するキャッシュ、データの矛盾が必然的に起こります)
- 利用シーン
1)は、書き込みキャッシュ、データベースの書き込みに最初:成功を書くときにキャッシュの場合、しかし、次のリード(同時読み取り)、キャッシング、データベースや応答遅れを書き込むことができませんでした、)この使用は推奨されません(ダーティリードを登場
2 )データベース、書き込みキャッシュを書くために:データベースが成功したとき、あなたが書いたが、書き込みキャッシュは、次の読み取り(同時読み取り)キャッシュを失敗した場合、データが読み込まれていません(読み取りキャッシュがデータベースを読み取ることができなかった場合は、ライト・バッファに戻ります実装)
3)非同期リフレッシュキャッシュ:、経験値が妥当な時間一貫性のないデータに応じて決定(ユーザデータを適時性とキャッシュフラッシュの書き込みデータを検討リフレッシュ時間間隔) - 他の最適化方法:
1)タイムアウト:妥当なタイムアウトを設定する;
2)更新:時間データに応じて一定の範囲(バージョン番号)内のリフレッシュタイマ。 - マルチレベルを検討するためにキャッシュの問題
1)は、キャッシュとデータベース間の一貫性;
2)マルチレベルのキャッシュ・コヒーレンシの前に;
3)以前のキャッシュされたコピーの一貫性。
X.キャッシュ雪崩:データベースサーバーを引き起こしてデータベースにアクセスするための多数の要求が生じたキャッシュ無効化の数が多い、要求は耐えることや状況を掛けることができない雪崩の手段
- 合理的な計画の有効期限は、キャッシュされました。
- データベースの負荷圧力の合理的な評価。
- 制限データベースやアプリケーション層の過負荷
- マルチレベルキャッシュ設計、キャッシュの可用性
XIキャッシュ浸透
- 現象は:1このキーは、データベースへのアクセスに圧力が生じ、頻繁に要求データベースを存在していないされている場合キーは、データベースを照会します存在しない場合、キャッシュが一般的にキーで、値の方法が、あります
- 解決策:
このキーデータ1)ナルデータも、結果としてキャッシュすることができ、キャッシュクリア
2)をキーに大きなビットマップを確立し、ブルームフィルタを使用して、存在してはならない、ビットマップによってクエリ濾過