mysql 阻塞查詢,raft目標是什么?Raft 是一種分布式系統的一致性算法。
在分布式系統中,我們需要讓一組機器作為一個整體向外界提供服務。由于在實際的條件下,我們認為每臺機器都是不100%可靠的,隨時都可能發生宕機。每臺機器之間的通信也不是可靠的,可能發生通信的阻塞、丟失、重試。所以需要某些算法來保證在大多數機器都正常的情況下向外提供可靠的服務。
在 Raft提出之前,Paxos 已經被提出,但是 Paxos 相當復雜。Raft 的目標就是提出一種易于理解的分布式一致性算法。
在了解 Raft 之前需要了解一下什么狀態機:
論文指出,Raft 是一種用來管理日志復制的一致性算法。所以我們就要先了解一下。什么是日志復制狀態機。我們思考一個問題。如果你要與你的小伙伴分享一個很復雜的操作及計算。一般來說你有兩種做法: 第一種:你自己負責計算,經過一段時間的計算,算出結果后,直接把計算結果告訴你的小伙伴。 第二種:你把每一個操作的步驟都告訴你的伙伴,告訴他怎么做,由你的伙伴自己計算出結果。
第二種方式,就是復制狀態機的工作原理。復制狀態機是通過復制日志來實現的。每一臺服務器保存著一份日志,日志中包含一系列的命令,狀態機會按順序執行這些命令。因為每一臺計算機的狀態機都是確定的,所以每個狀態機的狀態都是相同的,執行的命令是相同的,最后的執行結果也就是一樣的了。
在實際中這種有很多類似的應用比如 mysql 的主從同步就是通過 binlog 進行同步。