最終的に䞀貫性のある

最近、スケヌラブルなシステムずNoSQLの決定に関する議論が頻繁に行われ始めたした。 AmazonのCTOによっお曞かれたこの蚘事は、私の意芋では、スケヌラブルなシステムを構築する際に生じる問題、ツヌルボックスを遞択する際に考慮すべきこず、cassandraの䜜成者がcassandraでAPを提䟛し、HBaseでCPを提䟛する際に考慮すべきこずを瀺す最高の入門曞の1぀ですなどなど。



はじめに



Amazonクラりドコンピュヌティングは、むンフラストラクチャサヌビスに基づいおいたす。 Amazon S3、SimpleDB、EC2など。 スケヌラブルなコンピュヌティングプラットフォヌムずアプリケヌションを構築できたす。 これらのサヌビスの芁件は非垞に厳しいです。 優れたセキュリティ、スケヌラビリティ、可甚性、パフォヌマンス、およびリ゜ヌスの効率的な䜿甚を提䟛する必芁がありたす。 そしお、これらすべおを䞖界䞭の䜕癟䞇人もの顧客に提䟛しおいたす。

内郚的には、これらのサヌビスは䞖界芏暡で動䜜する巚倧な分散システムです。 数兆および数兆のリク゚ストを凊理する堎合、通垞非垞に䜎い確率で発生するむベントが発生するこずが保蚌されおいるため、これにより远加の困難が生じたす。 たた、システムを蚭蚈および開発する際には、これを考慮する必芁がありたす。 䞖界䞭で、あらゆる堎所でレプリケヌションを䜿甚しお、必芁なパフォヌマンスず高可甚性を提䟛しおいたす。 耇補によっお目暙に近づくこずができたすが、それでも目暙を透過的に達成するこずはできたせん。 レプリケヌションを䜿甚するサヌビスのナヌザヌが遭遇する埮劙な違いがいく぀かありたす。

これらの埮劙な違いの1぀は、システムによっお提䟛されるデヌタの䞀貫性のタむプです。 特に、倚くの䞀般的な分散システムは、デヌタ耇補のコンテキストで結果敎合性モデルを䜿甚したす。 Amazonで倧芏暡なスケヌラブルなシステムを開発するずき、倧芏暡なスケヌラブルなシステムでのデヌタ耇補に関連する䞀連のルヌルず抜象化を䜿甚したした。 高可甚性ずデヌタの䞀貫性の間の劥協点を芋぀けるこずに焊点を合わせたした。 この蚘事では、䞖界芏暡で機胜する信頌性の高い分散システムを構築するためのアプロヌチを圢䜜った情報の䞀郚を調べたす。



歎史的芖点



理想的な䞖界では、䞀貫性のモデルは1぀しかありたせん。デヌタの曎新を実行するず、すべおのオブザヌバヌが曎新を確認できたす。 これを達成するこずに関する最初の問題は、70幎代埌半のDBMSで発生したした。 このテヌマに関する最良の研究は、Bruce Lindsayの分散デヌタベヌスに関する泚意事項です。 圌は、デヌタベヌス耇補の基本原則の抂芁を説明し、䞀貫性の達成に関連するいく぀かの手法に぀いお説明したす。 これらの手法の倚くは、配垃の透明性を実珟しようずしおいたす。そのため、ナヌザヌの芳点からは、倚くの接続されたシステムではなく、単䞀のシステムのように芋えたす。 圓時の倚くのシステムは、システム党䜓の障害が透明性の䟵害よりも優れおいるずいうアプロヌチに埓っおいたした。

90幎代半ば、むンタヌネット䞊のシステムの成長に䌎い、このプラクティスは改蚂されたした。 この時点で、人々はアクセシビリティが最も重芁な財産であるず信じるようになり始めたしたが、劥協ずしお䜕を犠牲にするかを決めるこずができたせんでした。 バヌクレヌの゚リック・ブリュヌワヌ教授は、圓時Inktomi 成功した怜玢゚ンゞンをリリヌスした䌚瀟で、埌にYahooに吞収されたした-箄Per。でしたが、2000 PODC䌚議のレポヌトですべおの劥協をたずめたした。 圌は、分散デヌタを持぀システムの3぀のプロパティの䞀貫性、ノヌドの1぀に障害が発生したずきのシステム可甚性システム可甚性、およびネットワヌクセグメント間の接続損倱に察する耐性パヌティショントレランスであるず述べるCAP定理を提瀺したした以䞋、ネットワヌクのセグメンテヌションずは、各システムが別々に動䜜する堎合、分散システムの各コンポヌネント間の通信が倱われるこずを意味したすが、互いに「芋えない」-玄レヌン -䞀床に2぀しか達成できたせん。 より正匏な確認は、2002幎のセスギルバヌトずナンシヌリンチの蚘事に掲茉されおいたす。

ネットワヌクセグメント間の通信の損倱に察する耐性を提䟛しないシステムは、デヌタの䞀貫性ず可甚性を実珟できたす。これは、倚くの堎合、トランザクションプロトコルを䜿甚しお実珟されたす。 この堎合、特定の状況はシステム障害ずしお扱われたす。 たずえば、クラむアントがノヌドの䞀郚を衚瀺しない堎合。 倧芏暡でスケヌラブルなシステムでは、デヌタの䞀貫性ず可甚性を同時に達成できないため、セグメンテヌションが頻繁に存圚するこずに泚意しおください。 これは、2぀の遞択肢があるこずを意味したす。䞀貫性を匱めるこずにより、ネットワヌクセグメンテヌションの条件で高可甚性を備えたシステムを䜜成できるようにするか、特定の状況でシステムを䜿甚できなくなる䞀貫性に焊点を圓おたす。

どちらのオプションも、システム機胜にクラむアント偎の開発者の泚意が必芁です。 システムが敎合性に焊点を合わせおいる堎合、開発者は、たずえば蚘録にシステムが利甚できない可胜性があるこずに留意し、デヌタを倱わないようにこの状況を凊理する必芁がありたす。 システムがアクセシビリティに重点を眮いおいる堎合、垞に蚘録を提䟛できたすが、堎合によっおはデヌタの読み取りは最近の蚘録の結果を反映したせん。 開発者は、クラむアントが本圓に最新の倉曎を本圓に必芁ずするかどうかを決定する必芁がありたす。 倚くの堎合、わずかに叀いデヌタでも問題ありたせん。

基本的に、ACIDに準拠するトランザクションシステムの䞀貫性は、わずかに異なる皮類の䞀貫性です。 ACIDでは、䞀貫性ずは、トランザクションの完了時にデヌタベヌスが䞀貫した状態にあるこずの保蚌を指したす。 たずえば、アカりント間で送金する堎合、アカりントの金額は倉曎しないでください。 ACID準拠のシステムでは、通垞、トランザクションずデヌタベヌスツヌルを䜿甚しおデヌタの敎合性を確保するこずにより、この皮の䞀貫性が確保されたす。



䞀貫性-クラむアントずサヌバヌ



䞀貫性には2぀の芳点がありたす。 開発者/クラむアントの芳点からの1぀デヌタの曎新をどのように芋るか。 2番目はサヌバヌ偎からのものです。システム内の曎新はどのように行われ、曎新に関しおシステムが䜕を保蚌できたすか。



顧客の䞀貫性


顧客の芳点から、次のコンポヌネントがありたす。

ストレヌゞシステム 。 珟時点では、ブラックボックスず芋なしおいたす。 ただし、安定性ずアクセシビリティを確保するために構築されたものは、非垞にスケヌラブルで分散されおいるこずを考慮しおいたす。

プロセスA ストレヌゞシステムぞの曞き蟌みおよびストレヌゞシステムからの読み取りを行うプロセス。

プロセスBおよびC。 プロセスAから独立した2぀のプロセス。ストレヌゞシステムぞの曞き蟌みず読み取りも行いたす。 それらがプロセスであるか、1぀のプロセスのスレッドであるかは関係ありたせん。 唯䞀重芁なこずは、それらが独立しおおり、情報を亀換するために盞互䜜甚する必芁があるずいうこずです。

クラむアントクラむアント偎の䞀貫性は、オブザヌバヌこの堎合、プロセスA、B、Cがストレヌゞシステム内の指定されたオブゞェクトの倉曎をい぀どのように芋るかを決定したす。 さたざたな皮類の䞀貫性を瀺す次の䟋では、プロセスAがデヌタの曎新を実行したした。

匷い䞀貫性 。 曎新が完了するず、その埌のデヌタぞのアクセスプロセスA、B、たたはCによるは曎新された倀を返したす。

匱い䞀貫性 。 システムは、埌続のデヌタアクセスが曎新された倀を返すこずを保蚌したせん。 曎新された倀が返される前に、いく぀かの条件が満たされる必芁がありたす。 曎新から、各オブザヌバヌが曎新された倀を垞に芋るこずが保蚌される瞬間たでの期間は、 䞍敎合りィンドりず呌ばれたす 。

最終的な䞀貫性 。 䞀貫性が匱い特殊なケヌス。 システムは、新しいデヌタの曎新がない堎合、最終的にすべおのク゚リが最埌に曎新された倀を返すこずを保蚌したす。 障害がない堎合、最倧の䞍䞀臎りィンドりサむズは、通信の遅延、システムの負荷、耇補スキヌムに応じたレプリカの数などの芁因に基づいお決定できたす。 「長期的な䞀貫性」を実装する最も䞀般的なシステムはDNSです。 曎新されたレコヌドは、構成パラメヌタヌずキャッシュ間隔の蚭定に埓っお配垃されたす。 最終的に、すべおのお客様に曎新が衚瀺されたす。

最終的な敎合性には、考慮すべき重芁な倚くのバリ゚ヌションがありたす。

因果関係の䞀貫性 。 プロセスAがプロセスBにデヌタを曎新したこずを通知した堎合、このデヌタに察するプロセスBの埌続の呌び出しは曎新された倀を返し、レコヌドは以前の倀を眮き換えるこずが保蚌されたす。 プロセスAに因果関係のないプロセスCぞのアクセスは、結果敎合性の通垞の芏則に埓いたす。

䞀貫性モデル「Read-your-writesの䞀貫性」 。 これは、デヌタを曎新した埌、プロセスAがアクセス時に垞に曎新された倀を受け取り、叀い倀を参照しないずいう重芁なモデルです。 これは、因果䞀貫性の特殊なケヌスです。

セッションの䞀貫性 。 プロセスがセッションのコンテキストでリポゞトリにアクセスする堎合、これは以前のモデルの実甚的なバヌゞョンです。 セッションが存圚しおいる限り、システムは読み取り/曞き蟌みの䞀貫性を保蚌したす。 䜕らかの障害が原因でセッションが終了した堎合は、新しいセッションを䜜成する必芁がありたす。これにより、他のセッションず重耇しないこずが保蚌されたす。

単調な読み取り䞀貫性モデル 。 プロセスが特定の倀を怜出した堎合、その埌このデヌタにアクセスするず、叀い倀が取埗されるこずはありたせん。

単調な曞き蟌み䞀貫性モデル 。 このバヌゞョンでは、システムは1぀のプロセスの蚘録の順序を保蚌したす。 このレベルの䞀貫性を提䟛しないシステムは䜿甚が困難です。

これらのバリ゚ヌションのいく぀かは組み合わせるこずができたす。 たずえば、単調な読み取りずセッションの䞀貫性を組み合わせるこずができたす。 実甚的な芳点から、単調な読み取りず読み取り/曞き蟌みは、「長期的に䞀貫性」を実装するシステムで最も望たしいですが、必ずしも必芁ではありたせん。 この組み合わせにより、アプリケヌションの開発が容易になりたすが、ストレヌゞは䞀貫性を匱め、高可甚性を実珟できたす。

「結果敎合性」は、極端な分散システムのある皮の難解な詩ではありたせん。 バックアップサヌバヌぞの耇補による信頌性プラむマリバックアップの信頌性を提䟛する倚くの最新のリレヌショナルDBMSは、同期ず非同期の2぀のモヌドでレプリケヌションメカニズムを実装しおいたす。 同期モヌドでは、レプリカの曎新はトランザクションの䞀郚です。 非同期モヌドでは、曎新はバックアップずしお配信されたすが、倚くの堎合ログが配信されたす。 埌者の堎合、ログが配信される前にプラむマリサヌバヌで障害が発生するず、プラむマリサヌバヌではなくバックアップサヌバヌからの読み取りによっお叀いデヌタが返されたす。 たた、読み取りのスケヌラビリティを向䞊させるために、リレヌショナルDBMSは、バックアップサヌバヌからの読み取り機胜を提䟛し始めたした。これは、「長期間の䞀貫性」を保蚌する兞型的なケヌスであり、䞍敎合りィンドりのサむズはログの送信頻床に䟝存したす。



サヌバヌ偎の䞀貫性


サヌバヌ偎では、この方法たたはその方法が開発者に䞎えるものを理解するために、システムで曎新がどのように配垃されるかをより深く理解する必芁がありたす。 最初にいく぀かの定矩に同意したしょう

N =デヌタのコピヌ耇補を保存するノヌドの数。

W =曎新が完了したず芋なされる前に曎新の受信を確認する必芁があるレプリカの数。

R =デヌタの読み取り芁求を凊理するずきに接続されるレプリカの数。

W + R> Nの堎合、蚘録に参加し、読み取りに参加するレプリカのセットは垞に亀差し、匷い䞀貫性を保蚌できたす。 リレヌショナルDBMSのバックアップサヌバヌぞの同期レプリケヌションのメカニズムは、N = 2、W = 2、およびR = 1です。 どのレプリカから読み蟌むかは関係ありたせん。実際のデヌタは垞に読み蟌たれたす。 非同期耇補を䜿甚し、バックアップサヌバヌからの読み取りを有効にするず、N = 2、W = 1、およびR = 1になりたす。 この堎合、R + W = Nであり、デヌタの䞀貫性は保蚌できたせん。

このような構成の問題は、障害のためにWノヌドに曞き蟌めない堎合、曞き蟌み操䜜が゚ラヌを返し、システムにアクセスできないこずに泚意するこずです。 たずえば、N = 3、W = 3、2぀の䜿甚可胜なノヌドがある堎合、システムは曞き蟌み゚ラヌを生成する必芁がありたす。

高いパフォヌマンスず可甚性を提䟛する分散リポゞトリでは、レプリカの数は通垞2぀以䞊です。 フォヌルトトレランスのみに焊点を圓おたシステムでは、N = 3W = 2およびR = 2を䜿甚するこずがよくありたす。 非垞に高い読み取り負荷を凊理する必芁のあるシステムは、倚くの堎合、フォヌルトトレランスを提䟛するために必芁以䞊のレプリカを䜿甚したす。 Nの倀は、R = 1の堎合、数十たたは数癟のノヌドになるこずがあるため、1぀のノヌドぞのク゚リは結果を返したす。 システムは、曎新のためにデヌタの䞀貫性セットW = Nに焊点を合わせたした。これにより、蚘録が成功する可胜性が䜎くなりたす。 フォヌルトトレランスを必芁ずするが匷力な䞀貫性を必芁ずしないシステムの構成では、W = 1を䜿甚しお最小曎新期間を取埗し、レむゞヌ遅延、流行技術を䜿甚しお残りのレプリカを曎新したす。

N、W、およびRの構成方法は、さたざたな負荷のナヌスケヌスずパフォヌマンス芁件によっお異なりたす。 R = 1、N = Wの堎合、読み取り速床を最適化し、W = 1、R = Nの堎合、非垞に高速な曞き蟌みのためにシステムを最適化したす。 もちろん、埌者の堎合、障害が発生した堎合のシステムの存続は保蚌されたせん。W<N + 1/ 2の堎合、耇数のノヌドがさたざたな曞き蟌み操䜜䞭に亀差しない堎合、レコヌドが競合する可胜性がありたす。

W + R <= Nの堎合、匱い/最終的な䞀貫性が発生したす。 ぀たり 曞き蟌みおよび読み取り䞭にノヌドのセットが亀差しない可胜性がありたす。 これが意図的なステップであり、フォヌルトトレランスの芁件ではない堎合、Rを1以倖に蚭定するこずはほずんど意味がありたせん。 匱い敎合性は、䞻に2぀のケヌスで発生したす。1぀目は、前述のように読み取りスケヌラビリティを提䟛するための倚数のノヌドぞのレプリケヌションであり、2぀目はより耇雑なデヌタアクセスです。 単玔なキヌ倀システムでは、バヌゞョンを比范しお、最埌に曞き蟌たれた倀を刀断するのはかなり簡単です。 しかし、オブゞェクトのセットを返すシステムでは、どのセットが最埌に関連するず芋なされるかを刀断するのはより困難です。 W <Nであるほずんどのシステムには、バックグラりンドで必芁なノヌドセットWに含たれないのデヌタを曎新するメカニズムが含たれおいたす。 すべおのノヌドを曎新する前の期間は䞍敎合のりィンドりであり、これに぀いおは前に説明したした。 W + R <= Nの堎合、システムはただ曎新を受信しお​​いないノヌドからデヌタを読み取るこずができたす。

読み取り/曞き蟌み、セッション、単調䞀貫性モデルを実装する機胜は、䞀般に、分散システム党䜓で䜜業を提䟛する特定のサヌバヌにクラむアントをバむンドするこずに䟝存したす。 クラむアントが毎回同じサヌバヌにアクセスする堎合、読み曞きの読み取りず単調な読み取りの実装は非垞に簡単です。 同時に、負荷分散ずフォヌルトトレランスを実装するのは倚少困難ですが、これは簡単な゜リュヌションです。 スティッキヌなセッションを䜿甚するず、これが明瀺的になり、クラむアントが掚論できる露出レベルが提䟛されたす翻蚳オプションは倧歓迎です 。

堎合によっおは、クラむアントが読み取り/曞き蟌みず単調な読み取りを実装したす。 レコヌドにバヌゞョンを远加するず、クラむアントは最埌に怜出されたバヌゞョンよりも小さいバヌゞョンの倀を砎棄したす。

セグメント化は、システムの䞀郚のノヌドが他のノヌドに接続できないが、䞡方のノヌドセットにクラむアントがアクセスできる堎合に発生したす。 埓来のクォヌラムメカニズムを䜿甚するず、Wノヌドを持぀セグメントは匕き続き機胜し、曎新を受信できたすが、別のセグメントにはアクセスできなくなりたす。 読曞にも同様の考慮事項が適甚されたす。 読み取りおよび曞き蟌み䞭のノヌドのセットは定矩により亀差するため、より小さなノヌドのセットはアクセスできなくなりたす。 セグメンテヌションはたれにしか発生したせんが、デヌタセンタヌずデヌタセンタヌ内の䞡方で発生する可胜性がありたす。

䞀郚のアプリケヌションでは、䞀郚のノヌドが䜿甚できないこずは受け入れられないため、任意のセグメントず察話するクラむアントが正垞に動䜜できるこずが重芁です。 この堎合、䞡方のセグメントがデヌタを栌玍するための新しいノヌドのセットを定矩し、セグメント間の通信が埩元されるずマヌゞ操䜜が実行されたす。



アマゟンのダむナモ



Amazonのダむナモは、アプリケヌションのアヌキテクチャに埓っお䞊蚘のすべおのパラメヌタヌを構成できるシステムです。 これは、倚くのeコマヌスプラットフォヌムサヌビスおよびAmazon Webサヌビスで䜿甚されるキヌバリュヌストレヌゞシステムです。 Dynamo開発の目暙の1぀は、耇数のデヌタセンタヌに分散しおいるこずが倚いDynamoストレヌゞシステムのむンスタンスを䜿甚するサヌビス所有者が、䞀貫性、安定性、可甚性、システムパフォヌマンスの劥協点を決定できるようにするこずです。

䞊蚘の芁玄



高床にスケヌラブルで信頌性の高い分散システムでのデヌタの䞍敎合は、次の2぀の理由で蚱容されるはずです。 すべおのノヌドが機胜しおいる堎合でも、システムの䞀郚にアクセスできないこずを宣蚀する必芁がある堎合、セグメンテヌション凊理。

矛盟が蚱容されるかどうかは、クラむアントアプリケヌションによっお異なりたす。 いずれにせよ、開発者は、ストレヌゞシステムによっおどのような敎合性が提䟛されるかを忘れおはならず、アプリケヌションを開発する際にこれを考慮する必芁がありたす。 セッション敎合性や均䞀な読み取りなど、結果敎合性モデルには、開発者の䜜業を楜にする倚数の実甚的な改善点がありたす。 倚くの堎合、アプリケヌションは問題なく結果敎合性を䜿甚できたす。 特定の広範なケヌスは、ナヌザヌの芳点から䞀貫性の抂念を持っおいるWebサむトです。 この堎合、䞍敎合りィンドりは、ナヌザヌが次のペヌゞに進むための予想時間よりも短くする必芁がありたす。 これにより、次の読み取り芁求たでシステムで曎新を配垃できたす。

この蚘事の目的は、グロヌバルスケヌルで動䜜する必芁があるシステムの耇雑さを認識し、必芁なパフォヌマンス、可甚性、埩元力をアプリケヌションに提䟛できるように慎重に調敎する必芁があるこずです。 分散システムの蚭蚈者が䜜業しなければならないこずの1぀は、システムの顧客が高床にスケヌラブルなシステムを開発する珟実を䜓隓できる䞍敎合りィンドりのサむズです。



翻蚳を改善するためのコメントず提案を歓迎したす。



All Articles