Page 266 - 《软件学报》2026年第1期
P. 266

向清平 等: 分布式数据库高可用研究进展                                                             263


                    对于单主系统, 主要在单个数据中心中运行. 主备系统是这样的设计: 在无共享环境中运行, 许多数据库系统
                 实现某种形式的主备高可用. 在某些情况下, 主数据库和备份数据库可以在主动-主动配置中运行, 从而允许对从
                 数据库执行一些只读应用程序工作, 而从数据库相对于主数据库可能稍微过时. 在主备系统中, 更新传播可以是物
                 理的、逻辑的     (基于行) 或基于语句的, 可以是同步的或异步的. 在同步的情况下, 直到主系统和备用系统都持久
                 记录更新后, 数据库客户端才会确认事务提交, 从而形成所谓的两阶段安全系统                         [9] . 两阶段安全系统可确保单个服
                 务器故障不会导致更新丢失, 但同步更新传播可能会带来大量性能开销. 相反, 异步传播允许事务在主节点提交后
                 立即得到确认. 这在正常操作期间产生的开销要少得多, 但如果主数据库发生故障, 一些最近提交的事务可能会
                 丢失.
                    对于基于故障转移的系统, 处理仍然在单个主数据中心进行, 但捕获已处理内容的关键系统状态将作为检查
                 点复制到备用数据中心. 如果主数据中心发生故障, 处理可以转移到备用数据中心并从最新的检查点重新启动. 对
                 于大型复杂系统, 故障转移过程          (具有同步或异步检查点) 往往非常复杂且存在风险, 复杂的系统有许多组件和许
                 多依赖项, 所有这些都需要重新启动并可能重新配置. 此外, 随着系统的发展, 故障转移脚本往往随着每次变化而
                 更新, 使得基于故障转移的系统本质上具有较高的维护开销.
                    对于多宿主系统, 设计为在多个数据中心中运行. 基于故障转移的系统的许多问题源于故障转移通常是作为
                 附加功能构建在固有的单宿主设计之上. 相比之下, 多宿主系统故障转移概念使得每个数据中心始终处理工作, 并
                 且工作在数据中心之间动态共享以平衡负载. 当一个数据中心速度缓慢时, 部分工作会自动转移到速度更快的数
                 据中心. 当一个数据中心完全不可用时, 其所有工作都会自动分配到其他数据中心. 除了持续动态负载平衡之外,
                 没有任何故障转移过程. Google 的团队        [8] 通过多年多代的系统设计构建, 认为构建本机多宿主系统在大多数情况
                 下是最佳解决方案. 多宿主系统以更好的可用性和更低的成本运行, 并导致整体系统更加简单, 应用程序开发人员
                 可以直接获得高可用性和一致性, 并可以专注于构建应用程序. F1                   [10] 是  Google 构建的容错全球分布式关系数据
                 库, 其构建在 Spanner [11] 之上. Spanner 是一个完全多宿主的系统, 使用      Paxos [12] 协议进行同步更新, 通常部署具有
                 5  个副本的 Spanner 实例, 因此最多可以丢失两个数据中心, 5           个副本被认为是高可用性的最低限度, 因为在一个
                 数据中心完全中断期间, 在任何剩余数据中心发生机器级故障或暂时故障期间仍必须保持可用性. Photon                               [13] 是一
                 个地理分布式系统, 构建在        Paxos 协议上, 旨在容忍基础设施退化和数据中心级中断, 在谷歌广告系统中的关键应
                 用之一是连接多个数据中心的数据流, 并生成连接日志, 鉴于输出连接日志的业务关键性质, Photon                           通过  Paxos 协
                 议确保即使在数据中心级中断的情况下, 系统仍能继续提供服务. Mesa                   [14] 是一个高度可扩展的分析数据仓库系统,
                 旨在以每秒数百万次的更新速度在            PB  级表中提供一致的事务更新, 并使用多宿主来提供高可用性.
                    数据库的高可用性       (high availability, HA) 对于基于云的应用程序和服务的高可用性至关重要, 长期以来采取
                 主从复制来解决此类问题, 但是主从复制采用异步或半同步复制, 当其在事务中崩溃时, 可能会遇到数据不一致问
                 题, 现代通过基于集群的多主同步复制解决这个问题                 [15] . HA  数据库通常通过使用集群的多主架构来实现, 其中多
                 个服务器节点组合在一起. 集群中的任何节点都可以响应读取和写入请求. 节点中的数据更改会立即复制到集群
                 中的所有节点, 从而提供系统冗余并最大限度地减少停机的可能性. 这种架构中复制是同步的, 如果集群的一个节
                 点发生任何更改, 该更改也会同时应用到其他节点. 因此, 即使一个节点发生故障, 其他节点也会继续工作, 因此故
                 障不会造成重大后果. 当故障节点稍后再次加入集群时, 数据将从现有节点复制, 从而保持数据的一致性.
                    随着云计算的快速发展, 云数据库的应用逐渐成为主流, 而传统云数据库通常仅支持一写多读, 这种架构在高
                 并发写入场景下容易成为瓶颈, 无法满足大规模、低延迟的业务需求, 因此它需要能够横向扩展写入能力的云原
                 生多重写入技术. 近年来出现了支持多写的数据库系统, 如                  Taurus MM [16] 采用了共享存储架构, 通过优化算法减
                 少网络流量, 从而提高了写入吞吐量; PolarDB-MP           [17] 则利用分布式共享内存和共享存储, 支持多主节点并通过
                 RDMA  优化了数据同步和事务协调. 这些系统通过横向扩展写入能力, 显著提升了云数据库的高可用性和性能.
                 还有一些采用共享缓存技术的数据库系统, 如               Oracle RAC  和  IBM DB2 pureScale, 它们通过全局锁管理器和分布
                 式缓存一致性协议, 实现多个节点之间的数据共享与事务一致性. 此外, 为了提供高可用性                            (例如零停机时间) 的
                 云数据服务, 需要能够利用多云部署能力的多云数据库, 目前有效确定数据放置策略并在多个云之间高效迁移数
   261   262   263   264   265   266   267   268   269   270   271