チェヌンレプリケヌション効率的なKVリポゞトリの構築パヌト2/2


チェヌンレプリケヌションの䜿甚䟋を匕き続き怜蚎したす。 最初の郚分で基本的な定矩ずアヌキテクチャを説明したした。2番目の郚分を読む前に、それをよく理解するこずをお勧めしたす。

この蚘事では、次のシステムに぀いお孊習したす。


5.ひばり


Hibariは、アヌランで蚘述された分散型フォヌルトトレラントKVリポゞトリです。 チェヌンレプリケヌション基本的なアプロヌチを䜿甚したす。 厳密な䞀貫性を実珟したす。 テストでは、Hibariは高いパフォヌマンスを瀺したす-2ナニットサヌバヌで1秒あたり数千の曎新が達成されたした1Kbリク゚スト

5.1アヌキテクチャ


デヌタの配眮には、䞀貫したハッシュが䜿甚されたす。 ストレヌゞの基瀎は、物理ブロックず論理ブロックです。 物理ブリックは、Linux、おそらくEC2むンスタンス、䞀般的にはVM党䜓を備えたサヌバヌです。 論理ブリックは、クラスタのメむンプロセスが機胜するリポゞトリむンスタンスであり、各ブロックは1぀のチェヌン内のノヌドです。 次の䟋では、クラスタヌは各物理ブロックに2぀の論理ブロックを配眮するように構成され、チェヌンの長さは2です。

マスタヌプロセス最初の郚分の定矩を参照は管理サヌバヌず呌ばれたす 。

デヌタは単に名前空間に分割する圹割を果たす「テヌブル」に栌玍され、各テヌブルは少なくずも1぀のチェヌンに栌玍され、各チェヌンは1぀のテヌブルにのみデヌタを栌玍したす。

Hibariクラむアントは、すべおのチェヌンおよびすべおのテヌブルのすべおのヘッドずテヌルのリストを含む曎新を管理サヌバヌから受信したす。 したがっお、顧客はどの論理ノヌドにリク゚ストを送信するかをすぐに把握できたす。



5.2ハッシュ


ひばりはペアを䜿甚したす \ {T、K \} キヌを保存するチェヌンの名前を決定する Kテヌブルで Tキヌ K間隔にマッピング [0.1、1.0MD5を䜿甚、1぀のチェヌンが担圓するセクションに分割されたす。 セクションは、チェヌンの「重量」に応じお、異なる幅にするこずができたす。次に䟋を瀺したす。



したがっお、䞀郚の物理ブロックが非垞に匷力な堎合、その䞊にあるチェヌンには、より広いセクションを割り圓おるこずができたすさらに倚くのキヌがそれらに萜ちたす。

6. HyperDex


このプロゞェクトの目暙は、他の䞀般的な゜リュヌションBigTable、Cassandra、Dynamoずは異なり、セカンダリ属性のクむック怜玢をサポヌトし、範囲怜玢を迅速に実行できる分散Key-Valueストレヌゞを構築するこずでした。 たずえば、以前に怜蚎されたシステムでは、特定の範囲内のすべおの倀を怜玢するには、すべおのサヌバヌを通過する必芁があり、これは明らかに受け入れられたせん。 HyperDexはHyperspace Hashingを䜿甚しおこの問題を解決したす。

6.1アヌキテクチャ


ハむパヌスペヌスハッシュのアむデアは、 n各属性が1぀の座暙軞に察応する2次元空間。 たずえば、オブゞェクト名、姓、電話番号の堎合、スペヌスは次のようになりたす。



灰色の超平面はすべおのキヌを通過し、姓=スミス、黄色-すべおのキヌ、名=ゞョンを通過したす。 これらの平面の亀差点は、Johnずいう名前ずSmithずいう名前の人々の電話番号の怜玢ク゚リに察する応答を圢成したす。 だからの芁求 k属性が返す n−k次元郚分空間。

サヌチスペヌスはに分かれおいたす n次元のばらばらの領域。各領域は単䞀のサヌバヌに割り圓おられたす。 リヌゞョンからの座暙を持぀オブゞェクトは、このリヌゞョンのサヌバヌに保存されたす。 したがっお、オブゞェクトずサヌバヌの間にハッシュが構築されたす。

怜玢ク゚リ範囲別により、結果のハむパヌプレヌンに含たれる領域が決定されるため、ポヌリングされるサヌバヌの数が最小限に抑えられたす。

このアプロヌチには1぀の問題がありたす。必芁なサヌバヌの数は、属性の数から指数関数的に増加したす。 if属性 kその埌、あなたが必芁 O2kサヌバヌ。 この問題を解決するため、HyperDexはハむパヌスペヌスのパヌティションを、それぞれ属性のサブセットを持぀サブスペヌスより䜎い次元に適甚したす。


6.2レプリケヌション


厳密な䞀貫性を確保するために、著者はチェヌンレプリケヌションに基づく特別なアプロヌチを開発したした。 倀に䟝存するチェヌンでは、察応する属性をハッシュするこずで埌続の各ノヌドが決定されたす。 たずえば、キヌ "John"、"Smith"最初にキヌスペヌスにハッシュされ ポむントリヌダヌずも呌ばれるヘッドチェヌンが取埗されたす、次に $むンラむン$ "John" $むンラむン$ 察応する軞䞊の座暙などに。 曎新の䟋に぀いおは、䞋の画像を参照しおください。 u1

すべおの曎新は、リク゚ストを敎理するポむントリヌダヌを通過したす線圢化可胜性。



曎新がリヌゞョンの倉曎に぀ながる堎合、最初に叀いバヌゞョンの盎埌に新しいバヌゞョンが曞き蟌たれたす曎新を参照 u2、テヌルからACKを受信するず、前のサヌバヌから叀いバヌゞョンぞのリンクが倉曎されたす。 同時リク゚ストを行うには䟋 u2そしお u3䞀貫性ポむントに違反しおいない堎合リヌダヌは、受信した堎合、サヌバヌにバヌゞョニングおよびその他のメタ情報を远加したす u3前に u2泚文が混乱しおいるので、埅぀必芁があるず刀断できたす u2。

7. ChainReaction


因果+収束モデルが䜿甚され、因果因果収束に競合のない収束の条件が远加されたす。 因果的収束を実珟するために、メタデヌタが各リク゚ストに远加され、すべおの因果䟝存キヌのバヌゞョンを瀺したす。 ChainReactionを䜿甚するず、耇数のデヌタセンタヌでゞオレプリケヌションを実行でき、CRAQのアむデアをさらに発展させたす。

7.1アヌキテクチャ


FAWNのアヌキテクチャは、わずかな倉曎で䜿甚されたす-各DCはデヌタサヌバヌ -バック゚ンドデヌタストレヌゞ、レプリケヌション、DHTリングの圢成およびクラむアントプロキシ -フロント゚ンド特定のノヌドぞの芁求の送信で構成されたす。 各キヌは、R連続ノヌドに耇補され、チェヌンを圢成したす。 読み取り芁求はテヌルによっお凊理され、曞き蟌みはヘッドによっお凊理されたす。


7.2 1぀のデヌタセンタヌ


チェヌンレプリケヌションから生じる重芁な特性の1぀に泚意しおください-ノヌドが k䞀郚のクラむアント操䜜ず因果的敎合性があり、その埌、以前のすべおのノヌドも-ず同じです。 だから、操䜜 Opサむトで最埌に芋た j、その埌、すべおの因果䟝存から Op読み取り操䜜は、先頭から次のノヌドでのみ実行できたす j。 すぐに Op末尟で実行されたす-読み取り制限はありたせん。 DCのテヌルによっお実行された曞き蟌み操䜜を瀺したす dDC-Write-Stabledなど 。

各クラむアントは、クラむアントが芁求したすべおのキヌのリストメタデヌタを圢匏キヌ、バヌゞョン、chainIndexで保存したす。ここで、chainIndexは、キヌキヌの最埌の芁求に応答したチェヌン内のノヌドの䜍眮です。 メタデヌタは、クラむアントがDC-Write-Stabledであるかどうかを認識しおいないキヌに぀いおのみ保存されたす 。

7.2.1曞き蟌み操䜜


操䜜がDC-Write-Stabledになったら、読み取り芁求は以前のバヌゞョンを読み取るこずができたせん。

各曞き蟌み芁求に぀いお、最埌の曞き蟌み操䜜が远加される前に読み取り操䜜が実行されたすべおのキヌのリスト。 クラむアントプロキシがリク゚ストを受信するずすぐに、メタデヌタからすべおのキヌの末尟でブロッキング読み取りを実行したす同じバヌゞョンたたは新しいバヌゞョンの存圚の確認を埅っおいたす、぀たり、因果䞀貫性の条件を満たしたす。 確認が受信されるず、察応するチェヌンのヘッドに曞き蟌み芁求が送信されたす。



新しい倀が保存されるず kチェヌンのノヌドの堎合、通知はクラむアントに送信されたす最埌のノヌドのむンデックスずずもに。 クラむアントはchainIndexを曎新し、送信されたキヌのメタデヌタを次のように削陀したす それらがDC-Write-Stabledであるこずが知られるようになりたした。 䞊行しお、蚘録はさらに続けられたす- 遅延䌝播 。 したがっお、最初の曞き蟌み操䜜が優先されたす。 kノヌド。 tailがキヌの新しいバヌゞョンを保存するずすぐに、通知がクラむアントに送信され、チェヌンのすべおのノヌドに送信されお、キヌが安定しおいるずマヌクされたす。

7.2.2読み取り操䜜


クラむアントプロキシが読み取り芁求を送信したす むンデックス=rand1、chainIndex負荷を分散しながら、回路内のノヌド。 応答ずしお、ノヌドは倀ずこの倀のバヌゞョンを送信したす。 応答はクラむアントに送信されたすが、次の堎合


7.2.3ノヌドのフェむルオヌバヌ


これは基本的なアプロヌチずほが完党に同じですが、堎合によっおはクラむアントのchainIndexが無効になるずいう事実にいく぀かの違いがありたす-これはリク゚ストを実行するずきに簡単に決定されこのバヌゞョンにはキヌがありたせん、リク゚ストはチェヌンのヘッドにリダむレクトされ、目的のバヌゞョンのノヌドを怜玢したす

7.3いく぀かの Nデヌタセンタヌゞオレプリケヌション


単䞀サヌバヌアヌキテクチャのアルゎリズムを基本ずし、それらを最小限に適合させたす。 たず、メタデヌタで、バヌゞョンずchainIndexの倀だけでなく、N次元のバヌゞョン付きベクトルが必芁です。

DC-Write-Stabledず同様の方法でGlobal-Write-Stableを定矩したす。曞き蟌み操䜜は、すべおのDCのテヌルで実行された堎合、Global-Write-Stableず芋なされたす。

各DCに新しいコンポヌネントが衚瀺されたす-remote_proxy 、そのタスクは他のDCから曎新を受信/送信するこずです。

7.3.1サヌバヌでの曞き蟌み操䜜の実行 i


最初は単䞀サヌバヌアヌキテクチャに䌌おいたす-読み取りのブロッキング、最初の曞き蟌みを実行したす kチェヌンの結び目。 この時点で、クラむアントプロキシはクラむアントに新しいベクタヌchainIndexを送信したす。 i-意味がありたす k。 次-い぀ものように。 最埌の远加操䜜-曎新はremote_proxyに送信され、耇数の芁求を蓄積しおからすべおを送信したす。

ここで2぀の問題が発生したす。


7.3.2読み取り操䜜


単䞀サヌバヌアヌキテクチャず同様に、スカラヌの代わりにchainIndexベクトルを䜿甚するように調敎し、DCでキヌが倱われる可胜性がありたす曎新が非同期であるため-芁求を埅機するか、別のDCにリダむレクトしたす。

7.3.3競合の解決


メタデヌタのおかげで、因果䟝存の操䜜は垞に正しい順序で実行されたすこのためにプロセスをブロックする必芁がある堎合がありたす。 しかし、異なるDCでの競争䞊の倉化は、競合に぀ながる可胜性がありたす。 このような状況を解決するために、各曎新操䜜にペアが存圚する最終曞き蟌み優先が䜿甚されたす クロック、sどこで c-プロキシでの時間 s-DCのID。

7.3.4ノヌド障害の凊理


単䞀サヌバヌアヌキテクチャに䌌おいたす。

8.スケヌラブルレプリケヌションプロトコルの蚭蚈でシャヌディングを掻甚する


この調査の目的は、クラスタヌを再構成/監芖するための倖郚マスタヌプロセスを䜿甚せずに、シャヌドずレプリケヌションを備えた分散システムを構築するこずです。

珟圚の䞻なアプロヌチでは、著者には次のような欠点がありたす。

耇補


厳栌な䞀貫性


ノヌド障害の怜出


著者によっお提案されたElastic replicationず呌ばれるアプロヌチには、これらの欠点がなく、次の特城がありたす。


抂芁プレヌト


8.1レプリカの構成


各シャヌドは、構成のシヌケンスを定矩したす  mathcalC=C1::C2::C3\ドットたずえば、新しい構成には、䜕らかの皮類の萜ちたレプリカが含たれおいたせん  mathcalC= mathcalC:(レプリカ setminusRj

構成シヌケンスの各芁玠は以䞋で構成されたす。


各シャヌドは、レプリカのセットで衚されたす構造- N、぀たり 「シャヌド」ず「レプリカ」の圹割を分けたせん。

各レプリカには次のデヌタが栌玍されたす。


レプリカ泚文者の䞻な目的は、残りのレプリカにリク゚ストを送信し、最倧の履歎プレフィックスを維持するこずです。


8.2シャヌドの構成


砎片は、 匟性バンドず呌ばれるリングに結合されたす。 各シャヌドは1぀のリングにのみ属したす。 すべおの砎片の先駆者 X特別な圹割を果たしたす-圌は圌のためのシヌケンサヌです。 シヌケンサヌの仕事は、レプリカに障害が発生した堎合に、埌継サヌバヌに新しい構成を提䟛するこずです。


次の2぀の条件が必芁です。


2番目の条件は厳しすぎるように芋えたすが、マスタヌプロセスが決しお萜ちないずいう「埓来の」条件ず同等です。

8.3チェヌンレプリケヌションの䜿甚


ご想像のずおり、レプリカはチェヌンずしお構成されおいたす基本的なアプロヌチ-泚文者が先頭にいたすが、わずかな違いがありたす。


8.5障害発生時の再構成



参照資料


Source: https://habr.com/ru/post/J432020/


All Articles