この記事では、Redis に関する関連知識を提供します。主に Redis ホット キーのラージ バリュー ソリューションに関する関連問題を紹介します。一緒に見てみましょう。皆様のお役に立てれば幸いです。 。
推奨される学習: Redis ビデオ チュートリアル
Redis のホット データと重要な重要な価値のある質問も簡単に尋ねることができます。レベルの質問 すぐに問題を理解し、面接官を言葉を失う方が良いです。私の個人的な仕事の経験では、雪崩よりもホットなデータの問題が職場で遭遇する可能性が高くなります。しかし、ほとんどの場合、ホット スポットはホットではありません。しかし、この問題を制御できなくなると、オンライン上で発生した問題によって、今年のパフォーマンスが最下位に陥るだけで十分です。
通常の状況では、Redis クラスター内のデータは各ノードに均等に分散され、リクエストは各シャードに均等に分散されます。ただし、外部クローラー、攻撃、注目の製品などの特殊なシナリオでは、最も典型的な例は、有名人が Weibo で離婚を発表し、メッセージを残そうと人々が殺到し、Weibo のコメント機能がクラッシュする場合です。この短期間で特定のキーへのアクセス数が多すぎて、リクエストが送信されます。同じデータシャードに対して同じキーに対して作成されるため、シャードの負荷が高くなりボトルネックとなり、雪崩などの一連の問題が発生します。
問題分析: 前回、グループ面接で偉い上司である Ali p7 の話を聞いたときに、この質問をされました。難易度の指標は 5 つ星です . 待ってください。初心者であることは本当にプラスです。
回答: ホット データ について言いたいことがあります。私は Redis の使用を初めて学んだときからこの問題を認識していました。ホットスポット データに関する最大の問題は、Redis クラスター内の負荷の不均衡 (データ スキュー) によって障害が発生することであり、これらの問題は Redis クラスターにとって致命的な打撃となります。
まず、Reids クラスターの負荷不均衡障害の主な理由について説明します。
ホット キーまたは大きな値によってどのような障害が発生するか:
回答: この問題の解決策は比較的広範囲にわたります。さまざまなビジネス シナリオによって異なります。たとえば、企業がプロモーション活動を組織する場合、次のような方法が必要です。プロモーションに参加する製品を事前にカウントするため、このシナリオは推定メソッドを通過できます。緊急時や不確実性のために、Redis はホットスポット データを独自に監視します。要約:
public Connection sendCommand(final ProtocolCommand cmd, final byte[]... args) { //从参数中获取key String key = analysis(args); //计数 counterKey(key); //ignore }
Redis クラスター プロキシ レイヤー統計:
Twemproxy や codis などのエージェント ベースの Redis 分散アーキテクチャには統合された入り口があり、プロキシ レイヤーで収集およびレポートできます。ただし、欠点は明らかで、すべての Redis クラスター アーキテクチャにプロキシがあるわけではありません。
Redis サーバーの収集:
単一の Redis シャードの QPS を監視し、QPS がある程度傾けられたノードを監視してホットスポット キーを取得します。 Redis には監視コマンドが用意されており、一定期間内の特定の Redis ノード上のすべてのコマンドをカウントし、ホット キーを分析できます。高い同時実行条件では、メモリ爆発と Redis パフォーマンスの潜在的な危険があるため、この方法が適しています短期間の使用のため; また、Redis ノードのホットスポット キーをカウントすることしかできませんが、クラスターの場合は要約統計が必要ですが、ビジネスの観点からは少し面倒です。
上記の 4 つの方法は業界で一般的に使用されていますが、Redis のソース コードを調べて新しいアイデアを思いつきました。タイプ 5: Redis ソース コードを変更します。
Redis ソース コードを変更する: (ソース コードを読んでアイデアを考える)
Redis4.0 が多くのことをもたらしてくれることがわかりました。新しい機能 LFU ベースのホットスポット キー検出メカニズムを含むこの新機能により、これに基づいてホットスポット キー統計を実装できます。これは単なる私の個人的なアイデアです。
面接官の心理: この青年はとても思慮深く、視野が広く、ソースコードの修正にも気を配っていますが、私にはそんな野心はありません。私たちのチームにはこのような人材が必要です。
(問題を発見し、問題を分析し、問題を解決し、面接官の質問を待たずにホットデータの問題の解決方法を直接伝える。これが核となるコンテンツです)
回答: ホット データの問題を管理する方法に関して、この問題を解決するために主に 2 つの側面を考慮します。 1 つはデータのシャーディングであり、単一マシンのハングを防ぐためにクラスターの複数のシャードに圧力が均等に分散されます。2 つ目は移行の分離です。
概要の概要:
インタビュアー: とても丁寧に答えていただき、非常に総合的に検討していただきました。
問題分析: ホット キーという大きな概念と比較して、大きな値という概念は理解しやすいです。Redis はシングル スレッドで実行されるため、操作が非常に大きい場合、操作全体に影響します。Redis は Key-Value 構造のデータベースであるため、Redis の応答時間は悪影響を及ぼします。値が大きいということは、単一の値が大量のメモリを占有することを意味します。最も直接的なものは、 Redis クラスターへの影響は データ スキュー です。
回答: (私を困らせたいのですか? 私は準備ができています。)
まず、会社の価値に基づいて与えられる価値がどれほど大きいかについて話しましょう。
注: (経験値は標準ではなく、クラスタの運用保守担当者によるオンライン事例の長期観察に基づいてまとめられています)
Redis は単一スレッドで実行されるため、操作の値が非常に大きい場合、Redis 全体の応答時間に悪影響を及ぼします。事業の観点から分割することができます。典型的な分割をいくつか示します: 解体計画:
类似于场景一中的第一个做法,可以将这些元素分拆。
以 hash 为例,原先的正常存取流程是:
hget(hashKey, field); hset(hashKey, field, value)
现在,固定一个桶的数量,比如 10000,每次存取的时候,先在本地计算 field 的 hash 值,模除 10000,确定该 field 落在哪个 key 上,核心思想就是将 value 打散,每次只 get 你需要的。
newHashKey = hashKey + (hash(field) % 10000); hset(newHashKey, field, value); hget(newHashKey, field)
推荐学习:Redis学习教程
以上がRedis のホットデータ問題の解決策を一緒に分析しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。