この記事はWeChatの公開アカウント「プログラマーjinjunzhu」から転載したもので、著者はjinjunzhuです。この記事を転載する場合は、プログラマーjinjunzhuの公式アカウントまでご連絡ください。 Ant Groupが自社開発したデータベース「OceanBase」がオープンソース化され、国内の分散型データベースとしては画期的なニュースとなった。商用データベースである OceanBase は、技術的な詳細をあまり公開していません。現在、研究に使用できる優れた分散データベースがもう 1 つあります。参考文献1[1] 公式サイトの説明によると、トランザクション処理パフォーマンス評議会(TPC)が5月20日に公式サイトで発表した最新のデータ分析ベンチマーク(TPC-H)リストでは、OceanBaseが1526万QphHの総パフォーマンススコアで1位にランクされた。これは、OceanBase がトランザクション処理とデータ分析の両方のテストで 1 位を獲得した唯一の自社開発の中国データベースになったことを意味します。 1 アーキテクチャ主流の分散データベース アーキテクチャには、PGXC と NewSql の 2 つがあります。 1.1 PGXCPGXC は PostgreSQL-XC の略で、PostgreSQL をカーネルとする分散データベースです。全体的なアーキテクチャは次のとおりです。 PGXC アーキテクチャは、従来の単一データベースをクラスター化し、クラスターに基づいて調整ノードを追加します。コーディネーションノードには次の機能があります。
同時に、シャード管理とグローバル クロックが追加されます。シャード管理は、クラスターのシャード情報を管理するために使用されます。グローバル クロックの概要については、次のセクションを参照してください。 PGXC という名前は PostgreSQL で構成された分散データベースに由来していますが、他の単一データベースで構成された分散データベースも PGXC として理解できます。たとえば、Golden はカーネルとして MySQL を使用します。 1.2 新しいSQL従来の単一データベースをコアとして使用する PGXC と比較して、NewSQL は NoSQL の分散キー値ストレージ システムに基づいて分散トランザクション処理機能を構築します。アーキテクチャは次のとおりです。 さらに、NewSQL には 2 つの改善点があります。
2 グローバルクロック2.1 スレッドの一貫性線形化可能性は、分散システムにおける最も強力な一貫性モデルです。全体的な考え方は、複数の異なるレプリカを読み取るクライアントが、同じレプリカを読み取るクライアントと同じ結果を得るようにすることです。つまり、システム全体でレプリカが 1 つしかないように見えます。 まず、線形化要件を満たしていない 2 つの例を見てみましょう。 2.1.1 同じクライアント 以下のように表示されます。 クライアント 1 が最初に x を読み取るとき、値は 0 です。2 回目に読み取るとき、クライアント 3 が x の値を変更したと判断するため、新しい値 1 を読み取ります。ただし、3 回目にまだ同期されていない別のレプリカを読み取るため、古い値 0 を読み取ります。 2.1.2 異なるクライアント 以下のように表示されます。 client1 が最初に x の値を読み取るとき、その値は 0 です。2 回目に読み取るとき、client3 は x の値を変更しているため、新しい値 1 を読み取ります。ただし、client1 が 2 回目に読み取った後、client2 は x の値を読み取りますが、まだ同期されていない別のコピーを読み取るため、古い値 0 を読み取ります。 線形一貫性では、いずれかのクライアントが新しい値を読み取って返した後、後続のすべてのクライアント (同じクライアントと異なるクライアントを含む) も新しい値を返す必要があります。 次のグラフは線形一貫性です。 2.2 グローバルクロック上記の説明から、線形一貫性はイベントの順序に基づいていることがわかります。すべての操作はタイムラインに記録する必要があり、任意の 2 つのイベントにはシーケンスがあります。ただし、クラスター内の各ノードには独自のタイムラインがあるため、時間的な順序付けをどのように実現できるでしょうか?このとき、グローバルな絶対時間が必要となり、それがここで言及するグローバル クロックとなります。 一般的に、グローバル クロックはタイム サーバーから時間を取得することで実装できますが、高い可用性を保証する必要があります。グローバル クロックを実装する方法はいくつかあります。 2.2.1 トゥルータイム Google Spanner は GPS と原子時計を使用して時間を配布し、マルチポイント タイミング メカニズムをサポートします。明らかな利点が 2 つあります。
しかし、いくつか問題があります:
Spanner の紹介によれば、時間誤差は 7 ミリ秒以内です。 2.2.2 ハイブリッド論理クロック (HLC) HLC (ハイブリッド論理クロック) は、Truetime が実装にハードウェア デバイスに依存しているため、実装が難しいため、一部のデータベースではハイブリッド論理クロックが使用されています。つまり、物理クロックと論理クロックが一緒に使用され、複数の時間ソースとマルチポイント タイミングも使用されているため、システム全体の時間エラーの問題も発生します。 2.2.3 タイムスタンプ Oracle TSO と略されるこのソリューションは、単一のタイム ソースと単一ポイント タイミングを使用してグローバル クロックを実装し、グローバルに一意のタイムスタンプを xid (グローバル トランザクション ID) として使用する集中型タイミング ソリューションです。 アドバンテージ:
欠点も明らかだ
現在、TiDB と OceanBase の両方がこのソリューションを使用しています。 2.2.4 まとめ Spanner を実装するには物理デバイスを使用する必要があり、他のオープンソース データベースと比較した参照価値はほとんどありません。 HLC と TSO のどちらを使用する場合でも、それぞれに長所と短所があります。 また、これら 2 つの中間に位置する、単一のタイム ソースとマルチポイント タイミングを使用するタイミング スキームもありますが、これはあまり一般的に使用されていません。 3 HTAPHTAP は、Hybrid Transaction and Analytical Processing の略で、トランザクション処理 (OLTP) とデータ分析 (OLAP) の要求を同じデータベース システムで完了できます。 HTAP は、ストレージを基盤として、コンピューティング レベルとストレージ レベルの両方で OLTP と OLAP をサポートする必要があります。 OLTP は通常行ストレージを使用しますが、OLAP は通常列ストレージを使用します。これは大きな違いです。 HTAP はこの違いを 2 つの方法で解決します。
OceanBase は、システム内の複数のコンピューティング ノードで OLTP 型アプリケーションと OLAP 型アプリケーションを同時に実行できる独自の分散コンピューティング エンジンを採用しており、1 つのコンピューティング エンジンで混合負荷をサポートする機能を実現しています。 4 RANGE 動的パーティショニング次の図には 4 つのデータがあります。 HASH によってシャーディングを実行する場合、通常は ID が HASH 計算のキーとして選択され、計算結果に基づいてデータが異なるシャードに分散されます。この方法の利点は実装が簡単なことですが、次の 2 つの問題もあります。
レンジ シャーディング テクノロジーと HASH の大きな違いは、データが断片化されないことです。たとえば、上の表では、データを都市ごとに分割することで、データの読み取り効率を高めることができます。 範囲動的パーティション分割は、NewSQL アーキテクチャの分散データベースで使用され、一般的に次の特性があります。 4.1 自動マージと分割割り当てられるデータの量のしきい値を設定できます。シャード内のデータ量が最大しきい値を超えると、自動的に 2 つのシャードに分割されます。シャード内のデータ量が最小しきい値を下回ると、シャードは結合されます。 4.2 自動ロードシャード上にホット データが大量にある場合、ノード アクセスの圧力は非常に高くなります。システムは、アクセス負荷のバランスをとるために、これらのホット データへのアクセスをさまざまなノードに自動的にスケジュールできます。 4.3 分散トランザクションの削減分散トランザクションのオーバーヘッドは、ローカル トランザクションのオーバーヘッドよりもはるかに大きくなります。分散データベースは、同じ分散トランザクションに頻繁に参加するデータを同じシャードにスケジュールできるため、分散トランザクションを回避できます。 スパナサポート 4.4 近くのアクセスグローバル展開シナリオでは、最も近いノードのシャードをユーザーに割り当てることで、アクセスの待ち時間を短縮できます。 スパナサポート 4.5 高い信頼性分散データベースの高い信頼性は、パーティション レベルでの高い信頼性です。次の図は、OceanBase のゾーンのアーキテクチャ図です。 OceanBase は Paxos アルゴリズムを使用してシステムの高可用性を実現し、パーティション レベルで最小の粒度を実現できます。クラスター内のデータの各パーティションはすべてのゾーンに保存され、パーティションの複数のコピーはログ同期に Paxos プロトコルを使用します。各パーティションとそのレプリカは独立した Paxos レプリケーション グループを形成し、1 つのパーティションがリーダーで、他のパーティションがフォロワーになります。このレプリカに対するすべての書き込み要求は、対応するプライマリ パーティションに自動的にルーティングされます。プライマリ パーティションは異なる OBServer に分散できるため、異なるレプリカの書き込み操作も異なるデータ ノードに分散され、マルチポイントのデータ書き込みが実現され、システム パフォーマンスが向上します。 5 パーカレーターモデル分散データベースは、BigTable に基づく分散トランザクション ソリューションを追加します。 Percolator モデルは、Google が提案し、BigTable 上に構築された分散トランザクション ソリューションです。参考文献2[2] パーカレータモデルは、2 フェーズコミットの考え方を採用しています。ここで、銀行送金を例にとると、口座 1 は口座 2 に 100 元を送金します。これら 2 つの口座は異なるパーティションにあります。 5.1 初期状態初期段階では、口座 1 に 300 元、口座 2 に 500 元がある場合、次のようになります。 上記の表では、「:」の前にはタイムスタンプで表されるデータ バージョンが続き、その後にデータ値が続きます。最初の列はテーブル名、2 番目の列の下位バージョンにはデータが格納され、3 番目の列にはデータに追加されたロックが格納されます。 4 列目の上位バージョンには、保存されたデータ バージョンへのポインターが格納されます。たとえば、バージョン 6 はバージョン 5 のデータへのポインターを格納します: data@5。 5.2 事前書き込みトランザクション マネージャーは、2 つのシャードに Prepare 要求を送信します。リクエストを受信すると、シャードは変更されるデータ行ごとにログを書き込み、タイムスタンプに従ってトランザクションのプライベート バージョンを記録します。ここでのプライベート バージョンは 7 です。このようにしてロックが取得され、他のトランザクションはこれら 2 つのデータに対して操作を行うことはできません。 以下のように表示されます。 2 列目のデータから、アカウント 1 が 200 元減少し、アカウント 2 が 600 元増加したことがわかります。 3 列目から、アカウント 1 がプライマリ ロックを取得し、アカウント 2 にプライマリ ロックを指すロック ポインターがあることがわかります。 注: プライマリ ロックの選択はランダムであり、アカウント 1 とアカウント 2 の両方を選択できます。 5.3 コミットコミット フェーズでは、コーディネータ ノードはプライマリ ロックを持つシャードとのみ通信する必要があり、ここではアカウント 1 とのみ通信する必要があるため、コミット命令のアトミック性が保証されます。データは次のとおりです。 アカウント 1 のプライマリ ロックが解除され、バージョン 8 が追加されたことがわかります。バージョン 8 のデータはバージョン 7 を指します。このように、バージョン 7 と 8 はプライベート バージョンではなくなり、他のトランザクションがこのレコードに対して操作できるようになります。 プライベート バージョンには別の機能もあり、アカウント 1 が送信に失敗した場合、アカウント 2 はプライベート バージョンに従ってロールバックできます。 5.4 トランザクションの終了コミットが成功した後、アカウント 2 のプライベート バージョンとロック ポインターは同期的にクリアされません。代わりに、それらをクリアするために非同期スレッドが開始されます。非同期スレッドがクリアされた後の最終データは次のようになります。 アカウント 2 が最終的にロック ポインターとプライベート バージョンをクリアしていることがわかります。 アカウント 2 のロックは同期的に解除されません。他のスレッドがアカウント 2 を読み取る場合、[email protected] に基づいてプライマリ ロックを検索します。プライマリ ロックが解除されたことがわかったら、引き続き読み進めることができます。読み取り中にセカンダリ ロックをクリーンアップします。 6 結論この記事では、主に 5 つの側面から分散データベースの重要な知識について説明します。誰でもあなたを批判したり訂正したりすることを歓迎します。 参考文献 [1] 参考文献1: https://open.oceanbase.com/ [2] 参考文献2: https://www.cs.princeton.edu/courses/archive/fall10/cos597B/papers/percolator-osdi10.pdf |
>>: 西安テックハブが成功裏に終了し、新しいテクノロジーが産業用インターネットをどのように実現するかを示した。
以前、アプリケーションにクラウド関数を作成し、そのクラウド関数を Express と統合し、クラウド...
サンフランシスコ発のオンライン学習ウェブサイトUdemyは本日、3,200万ドルのシリーズC資金調達...
今では SEO を学ぶことは 4 年前ほど難しくありません。当時、SEO トレーニングに参加したとき...
多くの企業にとって、クラウド リソースの活用は戦略の一部ではなく、個々のチームがニーズを満たすために...
今日は、360マーケティング賞を受賞した古典的なプロモーション事例、 9377 Gamesを見てみま...
【51CTO.com クイック翻訳】概要今日、サーバーレスはさまざまなクラウド アプリケーションで最...
[51CTO.comよりオリジナル記事] 先日、「MAKE YOUR MARK」をテーマにしたVMw...
ヨーロッパの VPS がお好みなら、ViralVPS を見逃さないでください。10G 帯域幅アクセス...
[[415461]] [51CTO.com クイック翻訳]事実によれば、クラウド コンピューティング...
調査によると、現在、ほぼすべての企業が複数のクラウドプロバイダーと多数のクラウドベースのソリューショ...
多くの人にとって、自宅のテレビは基本的に、料理や掃除をしながらBGMを流すためのツールになっています...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス今日頭条、抖音、微頭条の...
年初から、セレブビジネスやライブ配信の人気が続いています。ライブ電子商取引の取引規模と参加者数は過去...
オフラインプロモーションは、ウェブサイトへの直接トラフィックを増やすだけでなく、企業ブランドを宣伝す...
年末の月になっても、ライブストリーミング業界は依然として「活気」にあふれている。 12月3日、魏亜さ...