なぜこの記事を書くのですか? まず、キャッシュは、その高い同時実行性と高いパフォーマンスにより、プロジェクトで広く使用されてきました。キャッシュの読み取りに関しては、誰もが疑問を抱くことはなく、すべての業務操作は次の図のプロセスに従って実行されます。 しかし、キャッシュを更新する場合、データベースを更新した後、キャッシュを更新するか、キャッシュを削除するべきでしょうか?または、最初にキャッシュを削除してからデータベースを更新することもできます。実際、これについては多くの論争があります。現在、これらのソリューションを分析する包括的なブログはありません。そこでブロガーは、皆から批判されるリスクを冒して、恐る恐るこの記事を書いた。文章 まず説明させてください。理論的には、キャッシュの有効期限を設定することが最終的な一貫性を保証する解決策となります。このスキームでは、キャッシュに保存されたデータの有効期限を設定できます。すべての書き込み操作はデータベースに基づいており、キャッシュ操作は最善を尽くすだけで済みます。つまり、データベースへの書き込みは成功したがキャッシュの更新に失敗した場合、有効期限が切れている限り、後続の読み取り要求によってデータベースから新しい値が読み取られ、キャッシュが埋め戻されます。したがって、以下で説明するアイデアは、キャッシュの有効期限を設定することに依存しません。 ここでは、3 つの更新戦略について説明します。
最初にデータベースを更新し、次にキャッシュを更新します この計画は一般に皆から反対されている。なぜ?理由は2つあります。 理由1(スレッドの安全性の観点) リクエストAとリクエストBの両方が同時に更新されている場合、
これは、リクエスト A がリクエスト B よりも早くキャッシュを更新する必要があるが、ネットワーク上の理由により、B が A よりも早くキャッシュを更新することを意味します。これによりダーティ データが生成されるため、考慮されません。 理由2(ビジネスシナリオの観点) ポイントは2つあります。
まずキャッシュを削除し、次にデータベースを更新します この方式が矛盾を生じる理由は次のとおりです。同時に、更新操作のリクエスト A とクエリ操作のリクエスト B が存在します。すると、次のような状況が発生します。
中国語に翻訳された説明は
これにより、1 秒以内に作成されたキャッシュ ダーティ データを再度削除できるようになります。 では、この 1 秒はどのように決定され、どのくらいの時間眠るべきなのでしょうか? 上記の状況を考慮して、読者は自身のプロジェクトのデータ読み取りビジネス ロジックの時間消費を評価する必要があります。次に、データ読み取りのビジネス ロジックによって消費される時間に基づいて、データ書き込みのスリープ時間を数百ミリ秒増やすことができます。これを行う目的は、読み取り要求が完了し、書き込み要求によって読み取り要求によって発生したキャッシュ ダーティ データを削除できるようにすることです。 MySQL の読み取り/書き込み分離アーキテクチャを使用するとどうなるでしょうか? この場合、データの不整合の原因は次のとおりです。まだ 2 つのリクエストがあり、1 つは更新操作のリクエスト A で、もう 1 つはクエリ操作のリクエスト B です。
上記の状況がデータの不整合の原因です。二重削除遅延戦略を引き続き使用します。ただし、マスタースレーブ同期の遅延時間に基づいて、スリープ時間が変更され、数百ミリ秒が追加されます。 この同期除去戦略を採用したときにスループットが低下した場合はどうすればよいでしょうか? OK、では 2 番目の削除を非同期にします。スレッドを開始し、非同期的に削除します。この方法では、書き込み要求は戻る前に一定時間スリープする必要がありません。そうすることでスループットが向上します。 2 回目の削除が失敗した場合はどうなりますか? これは非常に良い質問です。なぜなら、2 回目の削除が失敗すると、次の状況が発生するからです。まだ 2 つのリクエストがあります。1 つは更新するリクエスト A 用、もう 1 つはクエリするリクエスト B 用です。便宜上、単一のデータベースを想定します。
はい、その通りです。 2 回目のキャッシュ削除に失敗すると、キャッシュとデータベースの不整合の問題が再び発生します。 どうすれば解決できるでしょうか? 具体的な解決策については、ブロガーによる第 3 回目の更新戦略の分析を参照してください。 まずデータベースを更新し、次にキャッシュを削除します まず、これについてお話しさせてください。外国人は「Cache-Aside パターン」と呼ばれるキャッシュ更新ルーチンを提案しました。それは指摘する
さらに、有名なソーシャル ネットワーキング サイト Facebook も、「Facebook での Memcache のスケーリング」という論文で、最初にデータベースを更新してからキャッシュを削除するという戦略を採用することを提案しました。 この場合、同時実行の問題はありませんか? いいえ。クエリ操作 A のリクエストと更新操作 B のリクエストの 2 つがあると仮定すると、次の状況が発生します。
はい、上記のような状況が発生すると、確かにダーティデータが発生します。 しかし、これが起こる可能性はどれくらいでしょうか? 上記の状況が発生するには、ステップ(3)のデータベース書き込み操作にかかる時間がステップ(2)のデータベース読み取り操作にかかる時間よりも短いという前提条件があり、これによりステップ(4)がステップ(5)に先行することが可能になります。しかし、考えてみてください。データベースの読み取り操作の速度は、書き込み操作の速度よりもはるかに高速です (そうでなければ、なぜ読み取りと書き込みを分離するのでしょうか? 読み取りと書き込みを分離する意味は、読み取り操作の方が高速で、消費するリソースが少ないためです)。したがって、ステップ(3)はステップ(2)よりも時間がかかりません。このような状況は起こりそうにありません。 ある人が議論を主張し、強迫性障害を患っていて、問題を解決しなければならないとします。私たちは何をすべきでしょうか? 上記の同時実行性の問題を解決するにはどうすればよいでしょうか? まず、キャッシュの有効期間を設定することが 1 つの解決策です。次に、戦略(2)で示した非同期遅延削除戦略を採用して、読み取り要求が完了した後に削除操作が実行されるようにします。 矛盾が生じる他の理由はありますか? はい、これはキャッシュ更新戦略 (2) とキャッシュ更新戦略 (3) の両方に存在する問題でもあります。キャッシュの削除に失敗した場合はどうなりますか?それは矛盾を生じさせませんか?たとえば、データの書き込み要求が行われ、データがデータベースに書き込まれても、キャッシュを削除できないため、不整合が発生します。これは、キャッシュ更新戦略(2)に残された最後の質問でもあります。 どうすれば解決できるでしょうか? 保証された再試行メカニズムを提供するだけです。ここに2つの解決策があります。 オプション1: 下の図に示すように プロセスは以下のとおりです
ただし、このソリューションには、ビジネス ライン コードへの大きな侵入を引き起こすという欠点があります。そこで、2番目の解決策があります。 2 番目のソリューションでは、サブスクリプション プログラムを起動してデータベースの binlog をサブスクライブし、操作する必要があるデータを取得します。アプリケーションで別のプログラムを起動して、サブスクリプション プログラムから情報を取得し、キャッシュを削除します。 オプション2: プロセスを次の図に示します。
注: 上記の binlog サブスクリプション プログラムには、MySQL の canal と呼ばれる既製のミドルウェアがあり、binlog ログのサブスクリプション機能を実行できます。 Oracle に関しては、現時点では既製のミドルウェアが利用可能かどうかはわかりません。さらに、再試行メカニズムとして、ブロガーはメッセージ キュー方式を使用します。一貫性の要件がそれほど高くない場合は、プログラム内で別のスレッドを直接開始し、時々再試行することができます。ご自身のアイデアを柔軟に活用できます。これは単なる提案です。 要約する この記事は、インターネット上の既存の一貫性ソリューションをまとめたものです。最初にキャッシュを削除してからデータベースを更新するという更新戦略に関しては、メモリ キューを維持するという提案もあります。ブロガーは見て、実装が非常に複雑で不必要だと感じたので、記事で紹介する必要はないと判断しました。 ***、皆さんがそこから何かを得られることを願っています。 |
<<: 【WOT2018】Li Mingyu: OpenStackクラウド上でビッグデータシステムを実行する際の難しさと方法
>>: TICのブロックチェーン技術、UCloudがブロックチェーンセキュリティアプリケーションの実装をリード
(11月28日、北京)シスコとTCLの合弁会社シスコクラウドが北京で発表イベントを開催した。 Ket...
収益で測ると、パブリッククラウド市場の6大企業は、Amazon (AWS)、Microsoft Az...
サンディエゴ、データセンターはかなり良いですし、VPSもSSDを搭載していればかなり良いです! Re...
SEOに非常に興味を持っている人は多く、私が勤めている会社でも全く関係のない業界からSEOに参入して...
クラウド コンピューティングは、ビジネスと IT に対する人々の理解方法を変え、組織の運営と業務のや...
他の人がどのように記事を書いて合格したかをネットでよく読みます。私も最初は、記事を書く本当の目的は合...
2020年の突然の流行により人々の仕事や生活は一変し、多くの組織の従業員は自宅からリモートワークをし...
この記事では、VSphere 6.7/7.0 の vVol 関連コンテンツについて簡単に紹介します。...
私は Vino SEO チームのリーダー、Bingze です。私の一般的なオンライン名は、zhch1...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますユーザーエ...
1. プロジェクトの目的が明確でないSEO プロジェクトの初期段階では、SEO はマーケティング戦略...
ホスティング プロバイダーの nethosting を紹介したいと思います。今日は主に、同社の仮想ホ...
SEO 作業を行うと、多くの人が必然的にこの問題に遭遇します。検索エンジンのホームページで競争の激し...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスブランド部門では、トップ...
多くの企業は、クラウド コンピューティング インフラストラクチャの俊敏性とコスト効率を求めていますが...