分散システムのアキレス腱:データの一貫性

付録:   オリジナル住所

 


なぜあなたは、分散システムが必要なのでしょうか?

        

持続可能な利用と開発することができたものは、同様にその値、分散システムを持っている必要があります。分散システムの生成私が主な目的は「だと思う速い」と「大規模な。」

これは、「高速」の2つの領域に分けることができます。

  • 最初のものは、システムの高い処理速度です。

  • 第二は、高速(短時間)の開発です。

2点は、全体的な時間がかかるが短くなるように一部の2つ以上の部分に物または分割の操作は、同時に実行される、本質的に同じです。

例えば:人はその後、2分に、行うには一つのことを持っていました。だから私は、次の分が理想的な状況が完了されるだろう、私は自分の一部を行うことを支援するために二人を雇いました。

もちろん、第2のセンスでこれらの2つの側面が克服することができますが、最初の項は克服することができません。誰もプログラムやコンピュータが存在しないので、その性能があれば、それは今では一般的であるとして、それは分散システムではありません、(解決できるお金の問題でしばしば問題にされていない)無限です

 「ミサは」無限のハードディスクドライブが存在しないためですので、我々は需要を満たすために、別のハードディスクにデータを保存する必要があります。これらのドライブは、それが別の惑星にあるかもしれない将来的に異なるホスト、別の部屋、別の地域であってもよいです。

02

分散システムの副作用

       

各物事はいわゆる統一組み合わせを持っている、それは二つの側面があります。-分散システム、その後、上記の利益をもたらすだけでなく、一般産業をもたらしたが、最大の問題と考えてい たデータの整合性の問題。      

システムは、ビジネス・コンセプトの使用シナリオと呼ばれる形で人々を与えることです。

ビジネスは、システムの中核である、最終的な分析での事業の発展は、データに基づいています。私は非常に複雑にすることができ遅くすることができ、彼らのことができるようになりますが、それだけでは許容できないデータの問題、データエラー、一貫性のないデータ、などです。

分散手段パーティションとコラボレーション、一つのことその一部についてのみ責任者。そのような生活の例には、どこにでもあります。

パーティーが開催されてください:一部の人は何人かの人々は、サイトのレイアウトを準備するために、一部の人が飲む準備をし、食事を用意します。

これらのことは、我々は同時にすべてが、ボールはパーティーのテーマに沿って、任意のリンク、またはできないをドロップすることができ、そして、それが失敗です。(私はなぜ知らない、心が会議で出てくる、と... Erguotouのゴブレットをした、歓声を叫びました)。

別のプログラムトラムビジネスケースのシナリオとして:

ここで対象とする4つの操作があり、実際には、順序は重要ではありませんが、不整合が問題になるの手順を成功するか失敗するかが重要です。

また、記事を書いた前に、基本的に、人々の間の通信の問題は、問題に似ている、特に通信の問題を話した、興味を持っている読書の下に拡張することができます:「単に通信効率をチャット、」上記党の例は真実です。

そして、通信唯一の違いは、プログラムが、それは必ずしも応答を取得する必要はありませんが、応答が一貫していないということです。

事は、100の部分に分割されるとやる、それがコンセンサスに到達する確率は5050分の2で、確率の観点から、非常に恐ろしいです。      

加えて、動作を「書き込み」、並びに一貫性がこれより複雑であるので、操作を「読み取る」ためにので、実際の分散システムは、以下でより詳細に説明するため、プログラムの例を与えるためには、厳密ではありません。

 

03

その理由は、一貫性のないデータを生成します

だから何がそれを生成するために一貫性のないデータの原因は?

まず、プログラミングの問題、またはコードが間違っています。この点はよく理解され、少しコンプライアンス期待を検証するためのより多くのテストを行うソリューションを考えるのは簡単です。

一般的なユニットテスト、インターフェースのテスト、自動テスト、統合テスト、およびので、ゼロに限りなく近いBUGを減少させるために、より費用対効果の高いですが、また、より大きな「テストエンジニア」この仕事の役割を作成しました。        

しかし、実際にバグがありませんでしたが、ソフトウェアがハードウェア上で実行されているので、まだ、一貫性のないデータが生成されます、ハードウェアの要因もあるとします。

そしてここで私たちのほとんどのために、ハードウェア、ソフトウェア、私たちのコントロール力も弱いと比較します。これらの中で、ネットワークの問題の最も深刻な場合は、他のネットワークは、ローカルエリアネットワークの意志、広域ネットワークなどのスコープより大きく、より深刻なとして知られ、より大規模で複雑な組織と比較されます。

想象一下,每一台主机仅仅是一张大网中的一个渺小的连接点,它所承载的链接越多越容易出现问题。       

可能有的小伙伴会有疑问,其它像硬盘、电源断电什么的,也有出现问题的可能性,为什么网络问题最为严重呢?

其实硬盘、电源好比是你身体的一部分,如手和脚。而网络是人与人之间沟通的渠道,比如手机通话.虽然你没有主动挂断电话,但是整个通话过程是有很多可能性导致中断的,对方的主观意愿也好、信号不好也罢,甚至被第三者给拦截了。

相信大家也能认可,打电话出现异常的概率相比自己的手脚不听使唤是高很多的吧。

现实中网络的特点,常遇到的问题如:延迟、丢包、乱序等问题。

为了解决这些问题,从互联网第一次出现的1969年(当年美军在ARPA制定的协定下用网络连接了4所大学)到现在,几十年间出了很多的理论和解决方案,这些会在后续的文章中给大家一一做梳理。本文先和大家具体剖析下什么是一致性。

 

 

04

详解一致性

        

首先什么叫达成一致了?说起来很简单:

 

在任意时间、任意位置看到的同一个事物是完全一致的。

 

比如一场足球赛。我们不管在现场还是在电视机前,看到足球从球员A传给球员B,这个信息都是一样的。

但是严格意义上来说,这个并称不上真正的一致,因为电视机接收到这个信息需要经过卫星信号、网络等的传输,我们看到的时候相比现场的人肯定要晚。

哪怕在现场的人,根据他所处的位置理论上看到的信息也存在延迟差,只是因为光速非常快,使得在相差几百米之内,这个延迟小到完全感受不到而已。      

能得出的结论是:在考虑时间维度的情况下,不存在真正意义上的一致。      

况且我们在分布式系统中,也没有必要去达到真正的意义上的一致。

因为越趋近于一致,系统相当于又归一成一个单体了,在某一个时刻,只能做一件事,完全丧失了分布式系统的两个目的之一“快”的优势。也因此衍生出多种一致性的变种,分别适用于不同的场景。为了便于理解,我们从严格程度的低到高来说。

大多数情况下,为了尽可能的“快”,系统中使用的大部分方案都是所谓的最终一致性,也就容忍一定条件下的不一致,优先保证局部一致,然后再通过一系列复杂的状态同步达到全局的一致。

最终一致性很多可实现的分支,列出几种常见的,抛砖引玉一下:

  • 因果一致性:仅要求有因果关系的操作顺序得到保证。比如朋友圈的回复功能。问“饭吃了吗?”肯定得在回答“吃了”之前。

  • 读你所写一致性:文字看着别扭,但很好解释。比如你在朋友圈下面回复一句话,其它好友可以不用马上看到你的回复,但是你自己必须得马上看到,要不然回复到哪去了?

  • 会话一致性:与人的一次聊天可以理解为一次会话。聊天虽然也有一定的因果关系,但是大部分场景下更多的是逻辑上的先后关系。

    比如你阐述一个事情,分为3条信息:首先...,然后...,最后...。如果这里的一致性得不到保证那么可能会变成:最后...,首先...,然后...。        

比局部一致更严格一些的就是全局的顺序一致性[附录1,1979年提出],保证所有进程看到的全局执行顺序一致,并且每个进程自身的执行顺序和实际发生顺序一致。

像上面提到的足球赛,比如实际发生的事情是

  1. 梅西把球传给了C罗

  2. C罗又把球回传给了梅西,那么每个人看到顺序都应该是这样。

    哪怕现场观众已经看到②了,电视机前的我们还没看到①,但是没关系,这个事情发生的顺序,对全世界来说都是一样的。

再严格一些,就是在全局的顺序一致性基础上再增加一个相对时间的一致性要求,业界称之为线性一致性[附录2,1990年提出]。

还是用上面梅西和C罗相互传球的例子来做个比喻,相当于梅西传出球给C罗之后,整个球场“暂停”了,要等所有在观看这场球赛的人都接收到这个传球信息之后,C罗才能做下一个回传。

这里需要一个上帝(全局时钟)来“暂停”。这是我们实际可以做到的极限了,满足这类要求的系统中,名气最大的就属Google的Spanner了。       

对不同级别的一致性汇总概述如下:

おすすめ

転載: www.cnblogs.com/williamjie/p/11095777.html