インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ

1、元のアーキテクチャ:マシンのTBレベルのデータ

私たちは、フォールトトレラントアーキテクチャのデザインについて話をする、例えば、分散ストレージシステムを使用します。まずは、分散ストレージシステムが何であるかを最終的に、見てみましょうか?

実際には、特に簡単に、我々は例えば、テーブルのデータベースを使用します。

たとえば、データベースを持っているために起こる、データベースは特に大きなテーブルがあり、データの十億、あるいは数十億があります。

さらに、TBの最大数十、TBの数百ものテーブルということをデータの量を仮定して、あなたはZeyangを感じますか?

MySQLデータベースなどを使用している場合、単一のデータベース・サーバ上のディスクがテーブルにこのデータを置くのに十分な可能性があるので、もちろん、それは、パニックと無力の心臓部です!

さんが感じるように、以下のこの絵を見てみましょう。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


2、最後に分散ストレージは何ですか?

だから、あなたが大規模なデータセットを持って起こる場合は、TBの数百!あなたはまだまで保存する従来のデータベース技術を考慮していないこと。

データベース・サーバとのすべてに適合するので、我々は分散ストレージ技術を考慮していない可能性があるため?はい!これは、この問題を解決する方法です。

私たちは、複数のマシンのことを行うことができます!このような各マシン上に置くために20機、データ1/20に従事として。

例えば、データの20TBの合計などがあれば1TBとして、1TBは、各マシン上で大丈夫でなければなりませんか?各マシンはとても多くのデータをさわやか置くことができます。

したがって、複数のマシンを設置するために、複数に大きなデータセットを分割するために、これが呼び出され、分散ストレージ

のは、以下のチャートを見てみましょう。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


3、その後、分散ストレージシステムは何ですか?


この分散ストレージシステムは、シェーンのですか?

分散ストレージシステムは、当然のことながら、複数のマシンに保存されているこれらの分散液で統一された管理システムのデータに続いて、複数の部分に分割して、ストレージ機器を複数設置する大きなデータセット、責任があります。

典型的な例は、次に、同様fastdfs、Hadoopのようなシステムです。

あなたは脳の穴を開くことができる場合は、一般的なレベルの自然のアイデアから始まって、あなたがそうで、実際には、同様のelasticsearchのことを見つけるのRedisクラスタシステムとなり、彼は基本的に真です。

これらは、あなたが複数のマシンに保存されたデータの複数の部分に分散システムアーキテクチャ、大分割に基づいています。

厳格な技術のいずれかの種類に準拠していない、この記事では、分散システムアーキテクチャレベルからでみよう、それは暫定的に設定することができます。この分散ストレージシステムを、2つのプロセスがあります。

一个进程是Master节点,就在一台机器上,负责统一管控分散在多台机器上的数据。

另外一批进程叫做Slave节点,每台机器上都有一个Slave节点,负责管理那台机器上的数据,跟Master节点进行通信。

咱们看看下面的图,通过图再来直观的看看上面的描述。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


4、那某台机器宕机了咋办?

这个时候又有一个问题了,那么万一上面那20台机器上,其中1台机器宕机了咋整呢?

这就尴尬了,兄弟,这会导致本来完整的一份20TB的数据,最后有19TB还在了,有1TB的数据就搞丢了,因为那台机器宕机了啊。

所以说你当然不能允许这种情况的发生,这个时候就必须做一个数据副本的策略。

比如说,我们完全可以给每一台机器上的那1TB的数据做2个副本的冗余,放在别的机器上,然后呢,万一说某一台机器宕机,没事啊,因为其他机器上还有他的副本。

我们来看看这种多副本冗余的架构设计图。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


上面那个图里的浅蓝色的“1TB数据01”,代表的是20TB数据集中的第一个1TB数据分片。

图中可以看到,他就有3个副本,分别在三台机器中都有浅蓝色的方块,代表了他的三个副本。

这样的话,一份数据就有了3个副本了。其他的数据也是类似。

这个时候我们假设有一台机器宕机了,比如下面这台机器宕机,必然会导致“1TB数据01”这个数据分片的其中一个数据副本丢失。如下图所示:

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


那这个时候要紧吗?不要紧,因为“1TB数据01”这个数据分片,他还有另外2个副本在存活的两台机器上呢!

所以如果有人要读取数据,完全可以从另外两台机器上随便挑一个副本来读取就可以了,数据不会丢的,不要紧张,大兄弟。

5、Master节点如何感知数据副本消失?

现在有一个问题,比如说有个兄弟要读取“1TB数据01”这个数据分片,那么他就会找Master节点,说:

“你能不能告诉我“1TB数据01”这个数据分片人在哪里啊?在哪台机器上啊?我需要读他啊!”

我们来看看下面的图。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


那么这个时候,Master节点就需要从“1TB数据01”的3个副本里选择一个出来,告诉人家说:

“兄弟,在哪台哪台机器上,有1个副本,你可以去那台机器上读“1TB数据01”的一个副本就ok了。”

但是现在的问题是,Master节点此时还不知道“1TB数据01”的副本3已经丢失了,那万一Master节点还是通知人家去读取一个已经丢失的副本3,肯定是不可以的。

所以,我们怎么才能让Master节点知道副本3已经丢失了呢?

其实也很简单,每台机器上负责管理数据的Slave节点,都每隔几秒(比如说1秒)给Master节点发送一个心跳。

那么,一旦Master节点发现一段时间(比如说30秒内)没收到某个Slave节点发送过来的心跳,此时就会认为这个Slave节点所在机器宕机了,那台机器上的数据副本都丢失了,然后Master节点就不会告诉别人去读那个丢失的数据副本。

大家看看下面的图,一旦Slave节点宕机,Master节点收不到心跳,就会认为那台机器上的副本3就已经丢失了,此时绝对不会让别人去读那台宕机机器上的副本3。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


那么此时,Master节点就可以通知人家去读“1TB数据01”的副本1或者副本2,哪个都行,因为那两个副本其实还是在的。

举个例子,比如可以通知客户端去读副本1,此时客户端就可以找那台机器上的Slave节点说要读取那个副本1。

整个过程如下图所示。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


6、复制副本以保持足够副本数量

这个时候又有另外一个问题,那就是“1TB数据01”这个数据分片此时只有副本1和副本2这两个副本了,这就不足够3个副本啊。

因为我们预设的是每个数据分片都得有3个副本的。大家想想,此时如何给这个数据分片增加1个副本呢?

很简单,Master节点一旦感知到某台机器宕机,就能感知到某个数据分片的副本数量不足了。

此时,就会生成一个副本复制的任务,挑选另外一台机器来从有副本的机器去复制一个副本。

比如看下面的图,可以挑选第四台机器从第二台机器去复制一个副本。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


但是,现在这个复制任务是有了,我们怎么让机器4知道呢?

実際には、非常にシンプルな、4マシンが毎秒ハートビートを送信しませんか?マシンが心でこのタスク4つの応答をコピーするマシンを送信するためにハートビートの過去、マスターノードを送信すると4、うまくコピー機2のコピーからマシン4をしましょう。

繰り返しますが、私たちはこのプロセスを見て、マップを来ります:

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


図ファンシー、今のマシンは4「1TBのデータ01、」3のコピーの追加ではないでしょうか?だから、「1TBのデータ01」これはデータポイントの別の部分は、の3枚のコピーにはならないのですか?

7、余分なコピーを削除

このタイムマシン3が急回復している場合それは、順番に、彼はまた、コピーの4つのコピーがまだ過剰に存在しない「データの01 1TBの」「1TBのデータ01、」3のコピー、この時点での同等のトップを持っていますか?

それは、問題ではありませんマスターノード認知機3復活たら、あなたはコピーの過剰な数を見つけるだろうし、タスクの削除コピーを生成します。

マシンのハートビートは、削除コマンドのコピーを発行したとき、彼はマシン3がそれに過剰のローカルコピーを削除し、3送信されます。このように、我々は3つのコピーの数を保つことができます。

同様に、我々は以下のチャートを見てください。

インタビュアーは彼にこれらの事を伝えるために、どのようにフォールトトレラント分散アーキテクチャを尋ねたところ


8、要約

さて、ここでは、スーパー方言で説明し、同様のプログレッシブ進化など十数や図形を説明するために、私も分散システムの前に、絶対の分散システムを理解することができ、我々は理解していなかったと信じて、完全なデータフォールトトレラントなアーキテクチャですどのように設計しますか。

実際には、データ・ストレージのこの断片化、冗長の複数のコピー、ダウンタイムの認識、自動的にコピー移行は、余分なコピーを削除し、Hadoopの、elasticsearchおよび他の多くのシステムのためのこの機構は、それが類似しています。

だからここに私は強くあなたが分散システム、基礎となるデータのミドルウェアイデオロギー的なフォールトトレラントシステムアーキテクチャについて吸収するために取らなければならないことを示唆しています。

このように、彼らの原則に基づいて、いくつかの同様の技術を習得した後の時間は、思考は既視感を感じるだろう。


おすすめ

転載: blog.51cto.com/14480698/2434739