在说可调CAP策略之前,我们要先说说CAP理论。
CAP理论是设计分布式系统必用的黄金法则,它提出了设计分布式系统的三个基本要求:一致性(Consistency)、可用性(Availability)、分区容错(Partition Tolerance)。具体的要旨是:在分布环境下,计算机系统最多只能满足CAP理论中的两项要求,另外一项要被舍弃。CAP理论经过20年的发展,已经被大量分布式软件证实和采用,它和经济学的蒙代尔三角有异曲同工之妙。现在也同样被Laxcus分布式操作系统接受。
如果通俗地解释CAP理论,具体的CAP三项要求是:
(一)Consistency 一致性
一致性也称为原子性或者事务性。表示一个事务的处理不可分割,要么这个事务完成,要么这个事务完不成,不能出现完成一半的情况。例如Laxcus分布式操作系统的数据多点写操作,就不能够出现一个节点成功一个点失败的现象。如果出现,系统也将执行回滚操作,擦除已经成功写入的数据,恢复到初始状态,通知用户写入错误。
(二)Availability 可用性
好的可用性是指系统能够随时随地,为大多数人提供服务(稳定可靠的分布式系统能达到99.999%以上),不会同时出现多数人操作失败、拒绝访问、访问超时等不友好现象(非法访问或者安全原因的限制除外)。可用性和分布式系统的冗余处理、负载均衡、限载处理能力有很大关系。目前Laxcus分布式操作系统生产环境中,涉及可用性的计算单元,都要求提供一主二从的冗余备份,即一个主节点,两个从节点。正常情况下,主节点处理正常的作业流,从节点监视主节点,同时备份主节点的元数据。当主节点发生故障时(机器损坏、网络通信故障),从节点会在秒级时间反应过来,通过协商选出新的主节点,替换掉发生故障的主节点,避免应用业务受到影响涉及。并且这些工作完全是计算机自动完成,不需要管理人员参与。
(三)Partition Tolerance 分区容错
分区容错和系统的伸缩性扩展能力紧密相关。在分布式环境中,可能会由于网络通信等原因,导致多机协同工作的系统无法正常运行的现象。合格的分区容错要求系统虽然处于物理的分散部署和运行状态,而逻辑看上去却像是一个正常运转的整体。比如Laxcus分布式操作系统系统中,即使其中一台或者几台计算机宕机,其他剩下的计算机在Laxcus分布式操作系统调度下,也能够正常运转满足业务需求,这样就具有好的分区容错性。
以上是CAP的基本情况,理论上CAP三种选项虽然可以三选二自由组合,但是放到现实的分布式应用场景中,如果分区容错(P)无法保证时(一台计算机宕机,其它计算机不能提供服务或者只能提供部分服务),分布式系统也就失去存在的意义,所以分区容错属于分布式系统的必备选项,需要得到绝对保证。这样,用户在设计分布式系统时,实际上只能在选项CP和AP之间进行选择。比如WEB业务强调高并发能力,要求随时随地的高可用性,允许一定额度的错误,这时就可以放宽对一致性的限制。而在线支付系统因为必须保证最终数据的正确性,所以对数据一致性有极高要求。
CAP理论发展到近些年,情况又开始变化,随着市场和用户需求的调整,大家对CAP理论有了新的要求。具体到分布式系统,就是现在的用户越来越希望能够在一套系统里,同时满足高并发和高可靠性两种需求,也就是说,要求一套分布式系统同时具备CP和AP两种能力。
这给基础软件开发者提出了新的课题。
Laxcus分布式操作系统对此的解决方案是可调CAP策略。
可调CAP策略是在原来CAP理论基础上的延伸和发展,它允许我们在使用Laxcus分布式操作系统过程中,随时重组计算机集群的运行模式,能够根据不同的业务需求,以CP和AP之间动态调节。
如果用户不做任何设置,Laxcus分布式操作系统默认是AP策略,即计算机集群服务于高可用性场景。例如用户在处理分布式计算工作时,当计算机集群同时执行多项分布式计算工作,某项工作的故障和失败不影响其它应用业务的正常运行。
同时,当面对分布式存储工作时,Laxcus分布式操作系统默认是CP策略,即保证同质数据的分布一致性,也就是满足事务性操作要求。这时任何一点数据的写操作失败都会导致数据整体回滚,从而满足同质数据的分布一致性要求。
在Laxcus分布式操作系统里,将处理业务切换到CP状态使用Create Limit 命令。见下图,这个命令有三种处理模型:用户、数据库、数据表。如果用户使用Create Limit命令执行用户模式处理且被系统接受后,那么表示除数据处理工作之外,用户的其它业务,都执行CP策略(一致性处理)。
Create Limit命令
执行Create Limit命令
Create Limit命令生效后,与Create Limit命令配合的是Create Fault命令。如果在CP状态发生了不一致故障,相关业务将被系统锁定,用户即使有后续的请求工作,系统也不会接受,直到用户使用“Drop Fault”命令手工解除故障,相关的业务才能恢复工作。
与Create Limit命令配合使用的Create Fault命令
与Create Limit命令对应的反向操作是Drop Limit命令,它解除之前Create Limit命令执行的限制,将业务处理恢复到系统的默认状态。比如对用户业务执行了“Create Limit”命令后,想恢复到AP状态(高可用性),那么就使用“Drop Limit”命令重置。
Drop Limit命令是Create Limit命令的反向操作
对于数据处理工作,正常情况下,我们还是应该保持为CP状态,毕竟一致性是数据处理重要的基础功能。
但是特殊情况总是存在,为此,Laxcus分布式操作系统也为用户提供了多种可能选择。比如我们为了满足高并发需要,有时会将数据库或者数据表切换到AP状态,然后出现数据不一致性现象,这时为了将计算机集群的分布数据恢复到一致状态,我们可以使用“”命令来完成。这个命令将扫描计算机集群上的所有相关数据,将数据调整到一致状态。扫描和重组数据过程中,相关的资源会被系统锁定,直到完成后才解锁,所以处理过程中不会出现“多写”现象,也就是杜绝了不一致的现象发生。
检查分布数据的一致性
将分布数据恢复到一致性状态
以上是可调CAP策略的大致情况。Laxcus分布式操作系统把复杂的CAP理论、可调CAP策略,以及相关的大量基础功能和处理流程,简化成几个命令来实现。让用户面对不同业务需求时,通过简单地切换系统运行模式,有更多选择符合更多应用场景的需要。
说明:Laxcus是一个开源、容错、高扩展、多人共享、多机协同分布运行的操作系统,通过分布式应用软件,处理大规模、超大规模的存储和计算工作。企业版本支持百万级节点规模的计算机集群、亿级用户在线。