「バックエンド分散」には、「分散ストレージ」と「分散コンピューティング」の 2 つのカテゴリが含まれます。実際の業務で遭遇する問題に対する答えを見つけるために、技術を分析します。多くの場合、私たちは新しいテクノロジーを生み出すのではなく、それを応用しています。テクノロジーをより効率的かつ効果的に使用するには、テクノロジーの原理と動作方法のいくつかを理解する必要があります。ユーザーの視点から技術原理を分析し、オープンソース技術製品とフレームワークをある種の技術のリファレンス実装として説明します。主な目的は原理を明確に説明することであり、具体的な実装の技術的な詳細については特に何もない場合は、簡潔に説明するようにしてください。
トランザクションとレプリケーション 私は最近、MySQL データベースのデータ分散に関わるプロジェクトに参加しました。簡単に言えば、リモート データ センターでマルチポイント書き込みを実現し、分散データが最終的な一貫性を実現できるようにする必要があります。以前は、MySQL のデータ分散は単純に読み取りと書き込みの分離であり、データベース自体のマスター スレーブ レプリケーションを使用して、マスター データベースへの書き込みとスレーブ データベースからの読み取りを実現できました。ここで、メイン データベースを二重に書き込み、少し遅延した後に最終的な一貫性を実現する必要があります。この問題は一見複雑に思えますが、最終的には最終的なデータの一貫性の問題です。 最も単純なケースに戻りましょう。 MySQL データベースが 1 つしかない場合、データの一貫性はどのように保証されますか?データベースについて知っている人なら、これがデータベースのトランザクション特性によって保証されていることを知っています。トランザクションには 4 つの主要な特性があります。
トランザクションの 4 つの ACID プロパティはこの記事の焦点ではないため、学術的な方法では詳しく説明しません。これらについてよく知らない場合は、以下の参考文献[3]の関連記事を読んでみてください。ここでちょっと質問したいのですが。単一のデータベース トランザクションでデータの一貫性を確保できます。では、MySQL をマスター/スレーブ アーキテクチャで導入する場合、マスターとスレーブ間のデータの一貫性をどのように確保できるでしょうか? マスタースレーブレプリケーション機能を提供するために、MySQL では、データの変更をトリガーするイベントログのコレクションを含む binlog という新しいログファイルが導入されました。スレーブ データベースは、マスター データベースに binlog の送信を要求し、ログ イベントを通じてデータを復元してスレーブ データベースに書き込むため、スレーブ データベースのデータ ソースは binlog になります。このように、MySQL マスター データベースでは、マスター データベースとスレーブ データベースのデータの一貫性を確保するために、バイナリ ログをローカル データと一致させるだけで済みます (当面は、ネットワーク転送によって発生するマスターとスレーブ間の不整合は無視します)。ローカル データの一貫性を確保するには、データベースのトランザクション特性に依存することがわかっています。データベーストランザクションはどのように実装されますか?まず次の図を見てください。 MySQL 自体はトランザクション サポートを提供しませんが、特定のストレージ エンジンによって実装されるストレージ エンジン インターフェイスを開きます。具体的には、MySQL トランザクションをサポートするストレージ エンジンは InnoDB です。ストレージ エンジンがトランザクションを実装する一般的な方法は、REDO ログと UNDO ログに基づいています。簡単に言えば、REDO ログはトランザクションによって変更されたデータを記録し、UNDO ログはトランザクション前の元のデータを記録します。したがって、トランザクションが実行されると、実際に何が起こるかは次のように簡略化されます。 まず、元に戻す/やり直しログを記録して、ログが永続的なストレージのためにディスクにフラッシュされていることを確認します。 データ レコードを更新し、操作をキャッシュし、ディスクに非同期的にフラッシュします。 トランザクションをコミットし、コミット レコードを REDO ログに書き込みます。 MySQL トランザクションが障害により中断された場合、トランザクションは REDO ログを通じてやり直されるか、UNDO ログを通じてロールバックされ、データの一貫性が確保されます。これらはすべてトランザクション ストレージ エンジンによって実行されますが、binlog はトランザクション ストレージ エンジンの範囲内ではなく、MySQL サーバーによって記録されます。次に、binlog データと redo ログ間の一貫性を保証する必要があるため、binlog が有効になった後、実際のトランザクション実行には次の 1 つのステップが追加されます。 まず、元に戻す/やり直しログを記録して、ログが永続的なストレージのためにディスクにフラッシュされていることを確認します。 データ レコードを更新し、操作をキャッシュし、ディスクに非同期的にフラッシュします。 トランザクション ログを binlog に保存します。 トランザクションをコミットし、コミット レコードを REDO ログに書き込みます。 この場合、バイナリログが正常に書き込まれない限り、トランザクション全体をロールバックする必要があります。バイナリログが正常に書き込まれると、MySQL がクラッシュしてもトランザクションを復元してコミットできます。これを実現するには、binlog をトランザクションに関連付ける必要があります。バイナリログとトランザクション データの一貫性を確保することによってのみ、マスター スレーブ データの一貫性を保証できます。そのため、バイナリログ書き込みプロセスは、純粋なトランザクションストレージエンジン実行プロセスに埋め込まれ、2 フェーズコミットは内部分散トランザクション (xa トランザクション) の形式で完了する必要があります。詳細はここでは述べませんので、下記の参考文献[5]を参照してください。 要約する まずは疑問点を提起し、MySQLの実装方法を参考にしながら、データの一貫性という観点から考えてみました。 MySQL スタンドアロン環境がレプリケーション メカニズムのデータ一貫性、つまり binlog とトランザクション データの一貫性をどのように確保するかを明確化し、分析します。その後、binlog メカニズムに基づいてレプリケーションを実装し、マスター スレーブ レプリケーションの一貫性を確保できます。マスター スレーブ レプリケーションではネットワーク要素が導入され、マスター スレーブ データの一貫性を確保する複雑さがさらに増します。この問題については、後の記事でさらに分析します。 |
>>: 分散アーキテクチャの過去と現在を理解するために、1つの画像で段階的に説明します。
多くの人は、中国は人口基盤が大きいと考えており、百度の市場シェアに疑問を抱いている。世界の検索エンジ...
今年初めから、Baidu は入札システムに小さな調整を加えてきました。もちろん、これらの調整には、こ...
多くのウェブマスターは、インターネットで活動する中で、コミュニティを作りたいという思いを抱いたことが...
solvps は、Maya Virtual, Inc. の VPS ブランドです。中価格帯で、Xen...
liquidweb [Liquid Web Inc. ドメイン名は 1998 年に登録されました。]...
かつて中国の製造業は、安価な労働力に支えられた世界の工場であり、中核技術を持たない「空っぽの殻」とい...
香港には大きな帯域幅を持つ VPS はほとんどなく、大きな帯域幅と直接接続を備えた香港の VPS は...
Kubernetes は、ステートレス ワークロードを実行するためにゼロから設計されました。これらの...
クロスプラットフォーム ソリューションの世界的リーダーであり、Mac® 上で Windows® アプ...
当時、この検索エンジンは中国の3大インターネット企業の中で最も重要な存在でした。その時価総額は一時テ...
翻訳者 |李睿校正 |梁策と孫淑娟クラウド データ ウェアハウスは、あらゆる最新データ スタックの中...
SEO2.0 が登場する前は、少しの最適化で、検索エンジンにおけるウェブサイトのパフォーマンスをすぐ...
5月20日はByteDanceにとって非常に重要な日です。昨年のこの日、ByteDance初の興味関...
[51CTO.comオリジナル記事] 2020年5月15日、ファーウェイクラウド政府・企業戦略および...
クラウドベースの SaaS は、企業がサブスクリプション ベースでソフトウェア ソリューションを提供...