为了解决去中心化系统中冗余数据一致性的问题,David K.Gifford提出了NWR算法。
大致原理如下:
如果冗余数据存放在N个节点上,且每次写操作成功写入W个节点(其他N-W节点讲异步的同步数据),而读操作则从R个节点中选择并读取出正确的数据,只要确保 N+R>N,同一条数据的读写操作就不能并发执行,这样客户端就总能读到新写入的数据。
特别是当 W>N/2时,同一条数据的修改必然是顺序执行。这样分布式系统就具备了强一致性这也是NWR算法的由来。
如果N为3,则设置W和R未2时,在保证系统一致性的同时还允许3个节点中1个节点宕机后,系统仍然可以提供读写服务。
当N为5时,如果系统读多写少时,可以将W设为4,而R设为2,这样读操作的性能会更好。