Page 382 - 《软件学报》2024年第6期
P. 382
2958 软件学报 2024 年第 35 卷第 6 期
数据新鲜度为代价的. 如果数据库需要更好地提高 AP 端读取数据的新鲜度, 则需要提高同步的频率, 但可能会增
大同步任务对资源的抢占, 从而干扰写负载的执行, 即降低 TP 端性能.
2.2.3 会话一致性
会话一致性模型要求读请求返回某个前缀序列对应的数据版本, 且不晚于会话内上一时刻返回的版本. 为此,
TP 和 AP 端可以使用不同的标识号管理器进行独立的数据版本管理, 且各 AP 端之间的标识号管理器也相互独
立. 需要注意的是, 每个 AP 端的标识号管理器通过回放的版本确定各自的标识号, 而非重新分发标识号.
会话一致性允许不同会话读取不同的数据版本, 所以在 3 种模型中数据同步要求最宽松. 数据库在会话的缓
存中维护增量版本以用于 AP 端读取数据. 单机数据库系统一般基于 COW 机制创建会话快照以维护增量数据版
本, 在内存中进行数据拷贝以实现同步; 分布式数据库系统则一般会在会话的缓存中回放版本以同步数据, 而各会
话缓存中的数据版本和已在存储中持久化的版本可能不一致, 所以当 AP 查询读取的数据未命中缓存时, 分布式
数据库系统需要从存储中获取与缓存中版本对齐的版本数据, 从而保证缓存和存储快照的一致性.
单机 HTAP 数据库系统一般通过读取当前会话缓存的快照进行数据版本的追踪; 而在分布式场景下, 当从存
储中获取数据版本时, 可能存在不同的数据版本追踪方式. 如果底层存储支持版本追踪, 为了避免等待底层存储同
版本标识号
步到与缓存一致的版本, 就要求缓存的版本始终不早于存储的版本, 那么 AP 端可以从存储中读取与缓存一致的
较旧版本, 读取延迟较低, 但是会降低读取的数据新鲜度; 如果存储不支持版本追踪, 那么要求缓存的版本始终不
晚于存储的版本, 那么 AP 端则需要在读取后将存储中的版本回放到与缓存一致的数据版本上, 提升了数据新鲜
度, 但增大了延迟.
综上所述, 会话一致性模型的实现一般是基于以缓存版本为基础的快照一致性, 在单机中由于创建多个会话
的数据快照, 内存数据拷贝效率较高, 同步代价低, 但往往会带来较大的内存开销; 而在分布式场景下由于缓存中
需要同步的日志量少, 同步效率高. 但是, 在维护缓存与存储之间的一致性要求下, 数据库需要设计复杂的机制来
保证快照完整性, 同时, 当数据库系统存在多个 AP 会话时, 应用层需要解决多个 AP 节点宕机重连导致的数据版
本不一致问题.
从上述 3 种一致性模型的总结来看, 数据共享模型与分布式数据库的一致性模型间存在一定的关联, 但不完
全相同. 对于同一数据不存在多个物理副本的情况, 数据共享模型约束了读取时该数据版本的可见性, 而一致性模
型不考虑这种情况. 对于同一数据存在多个物理副本的情况, 数据共享模型的约束与一致性模型的要求相对应, 但
关注的角度不同. 数据共享模型会约束数据库读取之前写入的版本的新鲜程度, 不关注各物理副本内容的一致性;
而一致性模型要求各物理 (或多数) 副本内容相同 [38] , 不关心版本的差异. 两者对数据的约束最终都依赖于多副本
之间的同步方式, 以达成数据在某个维度上的一致性状态.
因此, 数据共享模型的具体实现与一致性强度的具体实现紧密相关, 不同的一致性级别对应数据共享模型中
不同强度的约束, 在 HTAP 数据库系统中具有不同的实现机制, 表现出不同的特征 (总结见表 1, 其中 n 为当前版
本更新序列的长度). 在线性一致性模型下, TP 端和 AP 端共用一套标识号管理器以实现标识号的分配, 并通过快
速地同步保证两者的数据版本同步推进, 使得读请求可以读取到最新的版本; 在顺序一致性模型下, AP 端可以具
有独立的一套标识号管理器, 基于批次的方式进行数据同步, 使得在读请求获取的版本与最新版本之间有统一的
时间偏移; 在会话一致性模型下, 每个 AP 端的会话可以有不同的标识号管理器, 但会话内基于缓存一致性有序推
进数据版本, 因此 AP 端所见版本与最新版本之间存有不统一的版本偏移.
表 1 HTAP 数据库系统数据共享模型特征
一致性级别 p q 版本同步 版本可见性
线性一致性 0 0 TP/AP使用统一标识号管理器 基于事务号 当且仅当最新版本可见
各AP所见版本与最新版本
顺序一致性 n 0 TP/AP拥有独立标识号管理器 基于日志号或Epoch号
有一致的版本偏差
TP有统一的标识号管理器; 每 各AP所见版本与最新版本
会话一致性 n n 基于缓存一致性
个AP有独立标识号管理器 可有不同的版本偏差