架构师训练营 1 期第 6 周:技术选型(二) - 作业
一、简述CAP原理
CAP原理主要关注的是,在一个分布式系统中,系统的数据一致性(Consistency)、可用性(Availability)和分区耐受性(Partition tolerance),这三个特性之间的关系。
一致性(Consistency):一致性是说,每次读取的数据都应该是最近写入的数据或者返回一个错误(Every read receives the most recent write or an error),而不是过期数据,也就是说,数据是一致的。
可用性(Availability):可用性是说,每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的(Every request receives a (non-error) response, without the guarantee that it contains the most recent write),也就是说系统需要一直都是可以正常使用的,不会引起调用者的异常,但是并不保证响应的数据是最新的,即不保证数据的一致性特征。
分区耐受性(Partition tolerance):分区耐受性说,即使因为网络原因,部分服务器节点之间消息丢失或者延迟了,系统依然应该是可以操作的(The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes)。在一个分布式系统中,我们不能保证分区总是可用,也就是说分区耐受性是必然出现的。
当网络分区失效发生的时候,也就是网络不可用的时候,我们要么取消操作,即不返回数据或不写入数据,这样获取的数据就是一致的,但是系统却不可用;要么我们继续写入数据或返回老数据,但是数据的一致性就得不到保证。如果选择了一致性,系统就可能返回一个错误码或者干脆超时,即系统不可用。如果选择了可用性,那么系统总是可以返回一个数据,但是并不能保证这个数据是最新的。
因此CAP原理讲的是,在保证系统分区耐受性的前提下,我们要么接受数据不一致,要么接受系统不可用,数据一致性和系统可用性只能二选一,二者无法同时满足。
二、针对 Doris 案例,请用 UML 时序图描述 Doris 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效恢复过程)。
Doris通过双写保证其可用性,即将一个写入操作,需要同时写入两份,并且都成功才算写入成功,如果其中一份写入失败,代表该服务器节点失效,需要进行相关的失效处理和失效恢复处理流程,从而保证系统对用户是可用的。
Doris的服务器节点失效主要分为三种:瞬时失效,临时失效,永久失效。这三种失效状态是按照失效时间长短去递进转化的。
瞬时失效被认为是可以快速自我修复的,不影响数据一致性;
临时失效被认为是在短时间内(一般2小时)可以恢复,恢复后存在数据一致性问题,需要考虑临时失效中的数据读写处理(引入日志服务器记录失效过程中的操作),以及临时失效服务器恢复后进入失效恢复状态,进行数据失效恢复同步时的数据读写处理(恢复日志服务器记录的操作,同时写入新数据);
永久失效被认为系统在短时间内不可恢复或恢复后数据丢失,服务器永久失效后需要从系统中剔除,并重新分配服务器节点替代永久失效的服务器,新节点的数据恢复同步过程与临时失效的数据恢复过程一样,也分成两个阶段,第一阶段,将对应虚拟节点文件同步至新节点,同时通过日志服务器记录操作日志,第二节点,对新节点进行失效恢复处理,即在写入新数据的同时,同步日志服务器记录的操作。
此处重点分析Doris临时失效的处理过程,涉及角色有客户端(KV Client)、物理节点1(Data Server1)、物理节点2(Data Server2)、日志节点(Log Server)、配置中心(Config Server),主要包括如下三个环节的处理流程:
进入临时失效状态
临时失效状态中的读写过程
失效恢复状态中的读写过程
版权声明: 本文为 InfoQ 作者【piercebn】的原创文章。
原文链接:【http://xie.infoq.cn/article/f2ad610c0da8d5a0ebca97ef5】。文章转载请联系作者。
评论