openGauss源码解析(7)
openGauss源码解析:openGauss简介(7)
1.5.2 高扩展
在OLTP领域中,数据库需要处理大量的客户端连接。因此,高并发场景的处理能力是数据库的重要能力之一。
对于外部连接最简单的处理模式是per-thread-per-connection模式,即来一个用户连接产生一个线程。这个模式的好处是架构上处理简单,但是高并发下,由于线程太多,线程切换和数据库轻量级锁区域的冲突过大导致性能急剧下降,使得系统性能(吞吐量)严重下降,无法满足用户性能的SLA(service-level agreement,服务等级协议)。
因此,需要通过线程池(线程资源池化复用)技术的技术来解决该问题。线程池技术的整体设计思想是线程资源池化、并且在不同连接之间复用。系统在启动之后会根据当前核数或者用户配置启动固定一批数量的工作线程,一个工作线程会服务一到多个连接会话,这样把会话和线程进行了解耦。因为工作线程数是固定的,因此在高并发下不会导致线程的频繁切换,而由数据库层进行会话的调度管理。
1.5.3 高可用
1. 主、备机
为了保证故障的可恢复,需要将数据写多份,设置主备多个副本,通过日志进行数据同步;可以实现在节点故障、停止后重启等情况下,保证故障之前的数据无丢失,以满足ACID特性。openGauss可以支持一主多备模式,备机接收主机发送过来的WAL并进行回访,保证和主机的数据一致;同时在主机发生故障时,备机可以参照升主机制进行升主机操作。备机过多会消耗过量的资源,而备机太少会降低系统的可用性。
主备机之间可以通过switchover操作进行角色切换,主机故障后可以通过failover操作对备机进行升主机操作。
初始化安装或者备份恢复等场景中,需要根据主机重建备机的数据,此时需要Build(构建)功能,将主机的数据和WAL发送到备机。主机故障后重新以备机的角色加入时,也需要Build功能将其数据和日志与新主拉齐。Build包含全量Build和增量Build;全量Build要全部依赖主机数据进行重建,复制的数据量比较大,耗时比较长;而增量Build只复制差异文件,复制的数据量比较小,耗时比较短。一般情况下,优先选择增量Build进行故障恢复;如果增量Build失败,再继续执行全量Build,直至故障恢复。
openGauss除了流复制主备双机外,还支持逻辑复制。在逻辑复制中把主库称为源端库,备库称为目标端数据库。源端数据库根据预先指定好的逻辑解析规则对WAL文件进行解析,把DML操作解析成一定格式的逻辑日志(例如可以解析成标准SQL语句)。源端数据库把逻辑日志发给目标端数据库,目标端数据库收到后进行回放,从而实现数据同步。逻辑复制只有DML操作。逻辑复制可以实现跨版本复制、异构数据库复制、双写数据库复制和表级别复制等。
2. 逻辑备份
openGauss提供逻辑备份能力,可以将用户表的数据以通用的text或者用户自定义格式备份到本地磁盘文件,并在同构/异构数据库中恢复该用户表的数据。
3. 物理备份
openGauss提供物理备份能力,可以将整个实例的数据以数据库内部格式备份到本地磁盘文件中,并在同构数据库中恢复整个实例的数据。
物理备份主要分为全量备份和增量备份,它们的区别如下:全量备份包含备份时刻点上数据库的全量数据,耗时时间长(和数据库数据总量成正比),自身即可恢复出完整的数据库;增量备份只包含从指定时刻点之后的增量修改数据,耗时时间短(和增量数据成正比,和数据总量无关),但是必须要和全量备份数据一起才能恢复出完整的数据库。当前openGauss同时支持全量备份和增量备份。
4.恢复到指定时间点
时间点恢复(Point In Time Recovery,PITR)基本原理是通过“基础热备 + WAL预写日志 + WAL归档日志”进行备份恢复。重放WAL记录的时候可以在任意点停止重放,这样就有一个在任意时间的数据库一致的快照。即可以把数据库恢复到自开始备份以来的任意时刻的状态。openGauss在恢复时可以指定恢复的停止点位置为LSN(log sequence number,日志序列号)、时间、XID(transaction ID,事务ID)以及用户创建的还原点。

浙公网安备 33010602011771号