为什么需要分布式一致性协议
无论是分布式数据库、还是微服务,都涉及一个关键技术,就是高可用。 举个例子,数据库,我们一般使用Mysql,对于小型系统,一台Mysql就够了,但是对于大型系统,如果一台Mysql挂了,那么系统就挂了。
所以,对于大型系统,我们一般需要多台服务器,一般最少3台是一个集群。这样,任何一台数据库挂了,至少这个集群还可以工作,系统也能正常运行。
当监控发现有一台数据库服务器挂了,然后运维人员去重启处理就可以了。
单节点的一致性问题
当我们的系统集群后,例如3台服务器的Mysql,怎么包装3台机器中的数据是一致的呢?这就需要用到一致性算法。
对于单机系统来说,一致性是不用考虑的。原因是:我们有一个单节数据库服务器,然后存储了一个值(假设为X)。然后,有一个客户端往服务器发送了一个值(假设为8)。只要服务器接受到这个值即可,这个值在单节点上的一致性非常容易保证。如下图:
多节点的一致性问题
如果数据库服务器有多个节点呢?比如,如下图所示,有三个节点:a,b,c。这时候客户端对这3个节点组成的数据库集群进行操作时的值一致性如何保证,这就是 分布式一致性问题。而Raft就是一种实现了分布式一致性的一种协议(还有其他一些一致性算法,例如:ZAB、PAXOS等)
下图是多节点的情况。
下节课,我们重点学一下掌握Raft协议需要的一些概念
本课有动画演示,边阅读本教程,大家可以另外打开一个页面,结合动画来学习: