为什么会出现强一致性?分布式数据库采用X86平台,相比于大机或者小型机,开放平台有不稳定的因素,需要考虑单个节点宕机后数据如何不丢失。那采取的方式就是将数据存储多份,使用多个节点。这种解决方式引入了一个问题:如何保证这些数据的一致性呢?最理想的目标是数据都时时刻刻完全一致:
1.如果同步将所有数据都保持一致,那么这个请求时间太久了,客户端无法接受;
2.如果异步将所有数据都保持一致,如果这个节点挂了,其他节点存在还没完成数据同步就坏掉,从而造成数据丢失;
既然这样,那就采用折中的模式,既不所有节点写成功,也不单个节点写成功,只需要超过半数写成功,这有两个协议:paxos 和 raft。
这样就没有数据丢失的风险了吗?理论上,无论保存多少份,只要全部节点坏掉,都会数据丢失。唯一考虑的,全部坏掉的概率有多大?如果三个节点,全部坏掉的概率,肯定会大于五个节点全部坏掉的概率。所以数据越重要,保存份数越多。数据份数越多,硬件成本越高。这就是使用硬件成本换区数据安全的方式。最终,还得平衡数据安全性和经济成本。