IT是服务“信息”的“技术”,信息是抽象的、虚拟的、高维度的,不同于人们通过直观认知的现实世界,信息世界可以平行(parallel),镜像(mirror),甚至像万花筒(kaleidoscope)在人的大脑认知形成虚拟现实的多份(multiple)。
信息的基本颗粒是数据,制造多份数据的技术有多种类别,精微地描述这些技术甚至要借助一些外来词汇,例如:拷贝就是一个典型的从英语引入的外来中文词汇。
这些词汇的技术描述如下:
拷贝(Copy)——泛指一切制造原本之外的副本的动作和结果,例如:电影拷贝、复印、备份等等。
复制(Replication)——数据复制在IT专业领域特指数据双写或多写的动作,通过双写或多写制造多份具有一致性的数据。
备份(Backup)——数据备份属于IT专业术语,特指制造多份数据副本以备不时之需的行为和结果,更专业的解释是按照时间序列获取原数据的“应用一致性”副本,用于记录数据原本的历史状态。
抽取、转换、加载(ETL)——按照目的抽取部分或全部数据经过转换加载到重构的数据载体。
上图描述了制造拷贝(泛指)的四种主要技术及其指标——交易复制和存储复制(两种不同的复制技术),数据备份和ETL。ETL由于转换的过程背离了“简单一致性”原则,因此本文重点讨论复制与备份这两类技术。
数据复制和数据备份是两类貌似差不多,但其实有着本质差别的技术,在底层逻辑上有两个截然不同的重大差别:
1:1和1:∞
数据复制技术(replication)是常用于写入多份存储介质,制造多份一致性数据的过程,复制逻辑一定有主从关系(一个大脑),从节点要跟随主节点的变化,形成多个节点的一致性多副本。在所有的技术术语里,复制技术强调正在发生的一致性、数据副本之间的1:1耦合关系,是一个动词性极强的技术术语。更专业一点,复制技术根据底层实现原理和效果分为交易复制和存储复制,主要应用场景是容灾、双活、读写分离和高可用等。
数据备份技术(backup)专业指获取原本数据的应用一致性副本并标记时间戳,在多个时间点获取到的变化中的数据原本得到的副本是不一样的,因此需要按照时间戳序列保存多份数据副本。在商业领域经常需要按照数据全生命周期、细颗粒度保存数据,用于数据历史版本的还原使用,常见用途是数据灾难恢复与合规审计。因此,原本数据和备份数据之间的关系是1:∞,这和数据复制技术的1:1逻辑有着根本性的差异。
崩溃一致性和应用一致性
这是两个相当专业的技术术语,由于技术描述过于抽象,为了便于理解仅作形象化的描述。崩溃一致性是存储介质上的数据一致性状态,或者存储过程(I/O)的数据一致性状态,请注意:上述描述都有“存储”二字(storage)。应用一致性是应用系统(application)处于在线交易时(online transaction)的数据一致性,区别于数据变化的结果(形成存储过程或结果),是正在变化中的数据一致性。举两个方便理解的例子:
案例一:有一个正在交易过程中的Oracle数据库,我们把存储数据的硬盘“热插拔”——拔出硬盘再插回去,硬盘插回时的状态和拔出时的状态是一致的,也就是和“崩溃时”(拔出时)保持一致,这就是崩溃一致性。在上述场景并不是每次“热插拔”都是安全的,由于数据库应用在交易过程中的数据和硬盘数据并不一致(内存中的数据没有落盘等原因),有一定的概率会导致数据损坏,造成不可逆的灾难。
案例二:某些政府部门主要的数据是文档、卷宗等静态数据,每天下班后用U盘手工拷贝获取的备份和专用备份软件获取的备份可以起到一样的数据保护效果。原因是静态数据的应用一致性和崩溃一致性是相等的。上述场景并没有考虑数据备份除了数据保护之外的其他用途,所以U盘拷贝在商业场景并不可取。
从上述形象化描述中可以看出崩溃一致性和应用一致性在商业用途上有着巨大的区别,毫厘的差距会导致阴阳相对的结果。往深层次探究,应用一致性是信息理论的底层原子逻辑,有着非常重大而深远的意义,且看:
数据在不同时间点的版本来源于数据的运动变化,数据的运动变化具体体现在“增、删、改”这些动作,如果关联数据的结构,将是一个360度的矢量运动。数据运动变化的最小颗粒是“交易”或者说“事务”,我们所说的“交易一致性”、“事务一致性”和“应用一致性”是一个东西。因此应用一致性首先是数据运动变化的最小颗粒度的精准测量。其次,时间的本质是运动(基本的物理学共识),按照运动的最小颗粒度所进行的应用一致性测量、记录的数据在时间维度上是最精微的版本序列。因此,IT工程师通常所说的“恢复时间点”和“时间一致”最准确的要求是应用一致。