1.什么是NWR协议?
NWR协议是一种用在分布式数据库中的机制,用来确保数据在多台机器上存储时的一致性和可靠性。简单来说,就是保证数据在分布式系统中能够被正确读取和写入的一套规则。
2.NWR中的“N”、“W”和“R”是什么?
- N:是指存储数据的总节点数。比如说,你的系统有5台服务器在存储数据,那N就是5。
- W:是指成功写入数据需要的最少节点数。也就是说,数据必须写到至少这么多台服务器上,写操作才能算成功。
- R:是指成功读取数据需要的最少节点数。也就是说,必须从至少这么多台服务器读取数据,读操作才能算成功。
3.怎么保证数据一致?
为了确保数据一致性,NWR协议规定:
[ W + R > N ]
意思是,只要你写和读的节点数量之和超过总节点数,你就能确保数据的一致性。这样做是为了避免不同的读操作返回不同的数据。
3.1.写操作
假设你想把数据写入到系统中,你告诉系统“至少要写到3台服务器上(W=3)”。系统会尝试将数据写入到所有的服务器中,但只要有3台服务器成功写入,系统就会告诉你“写成功了”。
假如有5台服务器(N=5),你设置W=3和R=3。那么:
只要3台服务器写入成功,写就算完成。
这样设计的好处是,如果我们确保W和R的值足够高(比如说W=3, R=3),就可以确保即使有一台服务器丢失数据,我们仍然能够读取到最新的数据。
3.2.读操作
同样地,假设你想读取数据,你告诉系统“至少要从3台服务器读取数据(R=3)”。系统会从3台服务器中获取数据并返回给你。如果数据不一致,系统还会根据某种规则(比如时间戳)来决定哪个数据是最新的。
假设我们有5台服务器(N=5),我们设定W=3,R=3。这样的话:
每次读数据时,从5台服务器中的任意3台读取数据,并根据返回的数据进行合并和校验。
4.优缺点
4.1.优点
- 数据一致性:通过合理设置W和R,可以确保数据的一致性。
- 灵活性:根据不同的需求,可以调整W和R的值来平衡读写性能和数据一致性。
4.2.缺点
- 延迟:如果W和R的值设得太高,操作的延迟会增加。
- 复杂性:需要根据具体应用情况来调节N、W、R的值
5.实际应用
在Amazon的DynamoDB中,NWR协议被用来配置表的写一致性。用户可以选择“强一致性”或者“最终一致性”:
- 强一致性:每次读操作都能返回最新写入的数据。这需要较高的W和R值。
- 最终一致性:允许较低的W和R值,提供更高的性能,但可能会在短时间内返回旧数据。
6.总结
NWR协议是用来管理和控制数据在分布式数据库中的一致性的。它通过设置写和读的节点数,保证每次操作都能返回最新的正确数据。选择合适的W和R值可以在性能和数据一致性之间找到平衡。