Redisのは、ホットキーの問題を解決する方法について話します

 

入門

数日の記事のデータベースシリーズを告げ、我々は終了していない、実際には、疲れて見なければなりません。(以下万語を省略しました)。
今日は解決され、どのようにホットキーの問題について話をし、Redisの側面の内容を書くために、味の変化が。
実際には、ホットキーの質問は、状況キャッシングサービスによってそう圧倒感じリクエストRedisの上の固定キーの数十万人に瞬時にアクセスがある、と言うことは非常に簡単です。
実際には、生活にも多くのそのような例がありますされています。例えばXXのスターが結婚しました。XXの星のためのキーが瞬時に増加します次に、ホットデータに問題があるでしょう。
ps:ホットキーと大きな重要な問題は、我々は理解しなければなりません。
この論文は、以下のようにいくつかの部分に分けることが予想されます

  • ホットキーの問題
  • どのように見つけますか
  • 業種別ソリューション

テキスト

サーマル主要な問題

前述したように、いわゆるホットキーの問題は、突然のRedis上の特定のキーにアクセスする要求の数十万人があるということです。だから、これはこのRedisのサーバーのダウンタイムで、その結果、物理ネットワークアダプタの上限に到達し、トラフィックがあまりにも集中している原因となります。
キーは、次の要求は、データベースに直接憎むあなたのサービスが利用できない原因になりますということです。

どのようにホットキーを見つけました

方法の一つ:ホットキー実行推定されているビジネス経験を持つ
という事実を、この方法は、まだ非常に実行可能です。例えば、商品のスパイクは行う際に、このキーの商品は、ホットキーを決定することができます。明らかな欠点は、すべての企業は、キーがホットキーであるから姿を推定することができません。
方法2:クライアントを収集するための
コードの統計情報の行を追加し、操作のRedisの前に、この方法があります。この方法は、多くの統計情報があるので、それは外部の通信システムにすることができ、通知メッセージを送信します。欠点は、クライアントコードの侵入によって引き起こされます。
方法3:プロキシ層を収集しない
、いくつかのクラスタアーキテクチャは以下の通りです、プロキシはTwemproxy、統一入学することができます。コレクションのレポートプロキシが層を行うことができますが、欠点がない、すべてのRedisのクラスタアーキテクチャは、プロキシを持っていることは明らかです。

方法IV:独自のコマンドをRedisの
本当のRedisは、サーバによって受信され、その後、コードキーが有効な統計熱で書き込みコマンドつかむことができるコマンドを監視する(1)。もちろん、既製の分析ツールあなたは、たとえば、使用与えることができますがありますredis-fainaしかし、高い同時実行の条件の下で順序は、メモリは、爆発の危険性が増加するだけでなく、Redisののパフォーマンスが低下しています。
(2)ホットキーパラメータ、Redisの4.0.3はRedisの-CLIの実施-hotkeysオプションと相まって、発見のキーホットスポットのRedis-CLIを提供します。キーが多い場合でも、実施の過程での引数は、実装が比較的遅いです。
方法5:Etherealの独自のアセスメント
対話するためにTCPプロトコルを使用してサーバーとのRedisのクライアントは、使用される通信プロトコルは、RESPです。ポートをリスニング独自のプログラムを書く、分析のためのプロトコルルールRESPに応じてデータを解析します。欠点は、開発の高コスト、メンテナンスの難しさ、損失の可能性があるです。

これらの5つのプログラム、利点と欠点を持つ各。これは、独自のビジネス・シナリオに基づいて選択を行うことができます。だから、ホットキーの発見後、どのようにそれを解決するには?

解決方法

2つの現在の業界があり
、二次キャッシュ使用して(1)
このような使用ehcache、またはHashMap缶を。あなたがホットキーを見つけた後、ホットキーは、JVMシステムにロードされます。
要求のためのこのホットキーは、JVMから直接取られますが、Redisの層を来ることはありません。
ローカルキャッシュは同じRedisのアップに嫌いに直接、百万人の要求を同じキーのための千100以上の要求があると仮定すると、そうでない場合。
今すぐあなたのアプリケーション層は50機を持っていると仮定し、OK、あなたはJVMのキャッシュを持っています。10万平均は要求を広げ、マシンごとに2,000のリクエストがあり、JVMは、値の値から取られ、その後、データを返します。同じRedisの状況に憎む10万要求をすることは避けてください。
(2)ホットバックアップキー
このプログラムには非常に簡単です。キーがリストにない同じRedisの上で行かせてはいけません。私たちは、預金の十分ではありません複数のRedisに、このキーを置きます。次に、ホットキーの要求が来る時間がある、我々はランダムにRedisの上のバックアップ、訪問値を選択し、データを返します。
Redisのは、N、図に示したステップにクラスタ数を仮定した。

注:必ずしも2Nではない、あなたが3Nを取りたい、4Nは要求を見ることができます。
擬似コード

const M = N * 2
//生成随机数
random = GenRandom(0, M) //构造备份新key bakHotKey = hotKey + “_” + random data = redis.GET(bakHotKey) if data == NULL { data = GetFromDB() redis.SET(bakHotKey, expireTime + GenRandom(0,5)) }

業種別ソリューション

OK、実際には、上記を読んだ後、あなたは疑問を持っていることがあります。

弟の煙、プロジェクト作業の過程での方法があり、ホットキーの自動検出、その後、プログラムが自動的にそれを扱いますか?

ああ、良い質問は、我々はどのように行うために、業界について何かを言います。実際には、2つだけのステップ
(1)ホットキーを監視する
(2)処理通知システムはない
数日前のように、と題した記事で、「透明マルチレベルのキャッシュソリューションを賞賛する(TMC)」を起こり、内部の、ホットスポットは重要な問題に言及があります私達はちょうど示す必要がある
(1)ホットキーを監視
:ところで賞賛があり、監視のホットキーの面では、クライアントを収集するには
で「透明マルチレベル・キャッシング・ソリューション(TMC)がある賞賛」を参照してありますと言っています

JedisPoolネイティブパッケージのTMCとJedisクラスがjedis転換をした、統合されたJedisPool初期化TMC +初期化ロジック「ローカルキャッシュ」機能のエルメス-SDKパッケージの「ホットスポットが見つかりました」。

人々は、彼はエルメス-SDKパッケージに入社し、書き換えjedisネイティブのjarパッケージを言うだろう。
エルメス-SDKパッケージはやってするために使用しましたか?
OK、それが行うことです発見熱いローカルキャッシュを
監視の観点から、すべてのパケットJedisクライアントアクセス要求のキー値、ヘルメス-SDK非同期イベントが報告されたデータに応じてその通信モジュールを介して、「ホットプローブ」とへのアクセスキーヘルメスクラスタサーバに報告されます。

:もちろん、これは唯一の方法である、いくつかの企業は、監視が道5で使用して自分のキャプチャ評価
特に、コンピューティングシステムを構築するフローFLINKの第1のセットを使用して、そうします。そして、カフカに失われたデータに巻き込まれた後、ポートをリスニングプログラムの漁獲データキャプチャのRedisを書きます。
次に、消費者カフカデータのフロー・コンピューティング・システム、統計データとすることができるだけでなく、ホットキーを監視する目的を達成します。

(2)プロセスを行うためのシステム通知
処理のための二次キャッシュを使用する:この時点では、溶液と上記のような存在です。
同様にホットキーを監視した後、エルメスのクラスタサーバは、「ローカルキャッシュを行うことを覚えて、バディを、このキーはホットキーである」それらを教え:.、すべての手段によってエルメス-SDKの業務システムが通知されます
エルメス-SDKだからキーは、後続の要求のために、ローカルにキャッシュされます。エルメス-SDKは、クラスタにアクセスするには取る、直接ではなく、地元から、これはホットキーで見つかりました。

この通知方法に加えて。私たちは、このようなホットキーを監視するために、あなたのストリーム・コンピューティング・システムとして、同じことを行うことができ、かつ飼育係内のノードへの書き込みを。次に、あなたのビジネスシステムは、ノード、ノード検出データの変更を監視し、代わってホットキーを発見。最後に、ローカルキャッシュに書き込むことも可能です。

あなたが自由のために遊ぶことができるさまざまな方法に注目してください。この記事では、唯一のアイデアを提供します。

概要

我々は生産に遭遇したホットキーの問題に対処する方法を理解し、この論文を願っています。

入門

数日の記事のデータベースシリーズを告げ、我々は終了していない、実際には、疲れて見なければなりません。(以下万語を省略しました)。
今日は解決され、どのようにホットキーの問題について話をし、Redisの側面の内容を書くために、味の変化が。
実際には、ホットキーの質問は、状況キャッシングサービスによってそう圧倒感じリクエストRedisの上の固定キーの数十万人に瞬時にアクセスがある、と言うことは非常に簡単です。
実際には、生活にも多くのそのような例がありますされています。例えばXXのスターが結婚しました。XXの星のためのキーが瞬時に増加します次に、ホットデータに問題があるでしょう。
ps:ホットキーと大きな重要な問題は、我々は理解しなければなりません。
この論文は、以下のようにいくつかの部分に分けることが予想されます

  • ホットキーの問題
  • どのように見つけますか
  • 業種別ソリューション

テキスト

サーマル主要な問題

前述したように、いわゆるホットキーの問題は、突然のRedis上の特定のキーにアクセスする要求の数十万人があるということです。だから、これはこのRedisのサーバーのダウンタイムで、その結果、物理ネットワークアダプタの上限に到達し、トラフィックがあまりにも集中している原因となります。
キーは、次の要求は、データベースに直接憎むあなたのサービスが利用できない原因になりますということです。

どのようにホットキーを見つけました

方法の一つ:ホットキー実行推定されているビジネス経験を持つ
という事実を、この方法は、まだ非常に実行可能です。例えば、商品のスパイクは行う際に、このキーの商品は、ホットキーを決定することができます。明らかな欠点は、すべての企業は、キーがホットキーであるから姿を推定することができません。
方法2:クライアントを収集するための
コードの統計情報の行を追加し、操作のRedisの前に、この方法があります。この方法は、多くの統計情報があるので、それは外部の通信システムにすることができ、通知メッセージを送信します。欠点は、クライアントコードの侵入によって引き起こされます。
方法3:プロキシ層を収集しない
、いくつかのクラスタアーキテクチャは以下の通りです、プロキシはTwemproxy、統一入学することができます。コレクションのレポートプロキシが層を行うことができますが、欠点がない、すべてのRedisのクラスタアーキテクチャは、プロキシを持っていることは明らかです。

方法IV:独自のコマンドをRedisの
本当のRedisは、サーバによって受信され、その後、コードキーが有効な統計熱で書き込みコマンドつかむことができるコマンドを監視する(1)。もちろん、既製の分析ツールあなたは、たとえば、使用与えることができますがありますredis-fainaしかし、高い同時実行の条件の下で順序は、メモリは、爆発の危険性が増加するだけでなく、Redisののパフォーマンスが低下しています。
(2)ホットキーパラメータ、Redisの4.0.3はRedisの-CLIの実施-hotkeysオプションと相まって、発見のキーホットスポットのRedis-CLIを提供します。キーが多い場合でも、実施の過程での引数は、実装が比較的遅いです。
方法5:Etherealの独自のアセスメント
対話するためにTCPプロトコルを使用してサーバーとのRedisのクライアントは、使用される通信プロトコルは、RESPです。ポートをリスニング独自のプログラムを書く、分析のためのプロトコルルールRESPに応じてデータを解析します。欠点は、開発の高コスト、メンテナンスの難しさ、損失の可能性があるです。

これらの5つのプログラム、利点と欠点を持つ各。これは、独自のビジネス・シナリオに基づいて選択を行うことができます。だから、ホットキーの発見後、どのようにそれを解決するには?

解決方法

2つの現在の業界があり
、二次キャッシュ使用して(1)
このような使用ehcache、またはHashMap缶を。あなたがホットキーを見つけた後、ホットキーは、JVMシステムにロードされます。
要求のためのこのホットキーは、JVMから直接取られますが、Redisの層を来ることはありません。
ローカルキャッシュは同じRedisのアップに嫌いに直接、百万人の要求を同じキーのための千100以上の要求があると仮定すると、そうでない場合。
今すぐあなたのアプリケーション層は50機を持っていると仮定し、OK、あなたはJVMのキャッシュを持っています。10万平均は要求を広げ、マシンごとに2,000のリクエストがあり、JVMは、値の値から取られ、その後、データを返します。同じRedisの状況に憎む10万要求をすることは避けてください。
(2)ホットバックアップキー
このプログラムには非常に簡単です。キーがリストにない同じRedisの上で行かせてはいけません。私たちは、預金の十分ではありません複数のRedisに、このキーを置きます。次に、ホットキーの要求が来る時間がある、我々はランダムにRedisの上のバックアップ、訪問値を選択し、データを返します。
Redisのは、N、図に示したステップにクラスタ数を仮定した。

注:必ずしも2Nではない、あなたが3Nを取りたい、4Nは要求を見ることができます。
擬似コード

const M = N * 2
//生成随机数
random = GenRandom(0, M) //构造备份新key bakHotKey = hotKey + “_” + random data = redis.GET(bakHotKey) if data == NULL { data = GetFromDB() redis.SET(bakHotKey, expireTime + GenRandom(0,5)) }

業種別ソリューション

OK、実際には、上記を読んだ後、あなたは疑問を持っていることがあります。

弟の煙、プロジェクト作業の過程での方法があり、ホットキーの自動検出、その後、プログラムが自動的にそれを扱いますか?

ああ、良い質問は、我々はどのように行うために、業界について何かを言います。実際には、2つだけのステップ
(1)ホットキーを監視する
(2)処理通知システムはない
数日前のように、と題した記事で、「透明マルチレベルのキャッシュソリューションを賞賛する(TMC)」を起こり、内部の、ホットスポットは重要な問題に言及があります私達はちょうど示す必要がある
(1)ホットキーを監視
:ところで賞賛があり、監視のホットキーの面では、クライアントを収集するには
で「透明マルチレベル・キャッシング・ソリューション(TMC)がある賞賛」を参照してありますと言っています

JedisPoolネイティブパッケージのTMCとJedisクラスがjedis転換をした、統合されたJedisPool初期化TMC +初期化ロジック「ローカルキャッシュ」機能のエルメス-SDKパッケージの「ホットスポットが見つかりました」。

人々は、彼はエルメス-SDKパッケージに入社し、書き換えjedisネイティブのjarパッケージを言うだろう。
エルメス-SDKパッケージはやってするために使用しましたか?
OK、それが行うことです発見熱いローカルキャッシュを
監視の観点から、すべてのパケットJedisクライアントアクセス要求のキー値、ヘルメス-SDK非同期イベントが報告されたデータに応じてその通信モジュールを介して、「ホットプローブ」とへのアクセスキーヘルメスクラスタサーバに報告されます。

:もちろん、これは唯一の方法である、いくつかの企業は、監視が道5で使用して自分のキャプチャ評価
特に、コンピューティングシステムを構築するフローFLINKの第1のセットを使用して、そうします。そして、カフカに失われたデータに巻き込まれた後、ポートをリスニングプログラムの漁獲データキャプチャのRedisを書きます。
次に、消費者カフカデータのフロー・コンピューティング・システム、統計データとすることができるだけでなく、ホットキーを監視する目的を達成します。

(2)プロセスを行うためのシステム通知
処理のための二次キャッシュを使用する:この時点では、溶液と上記のような存在です。
同様にホットキーを監視した後、エルメスのクラスタサーバは、「ローカルキャッシュを行うことを覚えて、バディを、このキーはホットキーである」それらを教え:.、すべての手段によってエルメス-SDKの業務システムが通知されます
エルメス-SDKだからキーは、後続の要求のために、ローカルにキャッシュされます。エルメス-SDKは、クラスタにアクセスするには取る、直接ではなく、地元から、これはホットキーで見つかりました。

この通知方法に加えて。私たちは、このようなホットキーを監視するために、あなたのストリーム・コンピューティング・システムとして、同じことを行うことができ、かつ飼育係内のノードへの書き込みを。次に、あなたのビジネスシステムは、ノード、ノード検出データの変更を監視し、代わってホットキーを発見。最後に、ローカルキャッシュに書き込むことも可能です。

あなたが自由のために遊ぶことができるさまざまな方法に注目してください。この記事では、唯一のアイデアを提供します。

概要

我々は生産に遭遇したホットキーの問題に対処する方法を理解し、この論文を願っています。

おすすめ

転載: www.cnblogs.com/leeego-123/p/11588429.html