第六周作业
请简述 CAP 原理。
一致性,每次读取的数据都应该是最近写入的数据或者返回一个错误
A read is guaranteed to return the most recent write for a given client
这里返回一个错误是否合理呢,感觉应该是可用性考虑的。
可用性,每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不要求数据是最新的
A non-failing node will return a reasonable response within a reasonable amount of time(no error or timeout
个人理解按原始文档这里应该是基于节点是非故障节点这么一个前提,针对故障节点应该是允许返回错误的。
分区耐受性,即使因为网络原因,部分服务器节点之间消息丢失或者延迟了,系统依然应该是可以操作的
The system will continue to function when network partitions occur.
个人理解是分区发生后,系统依然可用。
在分布式系统必须要满足分区耐受性的前提下,可用性和一致性无法同时满足。
个人理解如果不存在网络分区,应该是要保证一致性、可用性的,只有在网络分区发生后,在可用性和一致性之间做一个选择。
针对 Doris 案例,请用 UML 时序图描述 Doris 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效恢复过程)
客户端有一个状态机,第一次写失败就切成瞬时失效,连续三次写失败,则通知配置服务器,配置服务器通过多次写检测,如果三次写都失败则认为是临时失效,并且通知所有 client,该数据服务节点为临时失效节点。
写入涉及临时失效节点时,一次写入正常的数据节点,另一次写入为临时失效节点时,写入日志服务节点,以日志的形式写入该节点,读取的时候只能从正常的数据节点读。
临时失效节点恢复后,写入一个正常数据节点,写入已经恢复的临时失效节点,并且从日志节点同步日志,恢复失效期间的数据,读的时候只能从正常的数据节点读取,临时失效节点完全恢复后有一个状态切换的过程,切换成正常节点后,可以接受读。(疑问:没完全恢复怎么写呢,如果先接受到客户端的写,后面日志恢复的数据不会覆盖客户端的写吗?)
评论