跳转至

2.9 云数据库及最佳实践

课程简介

数据库是业务系统的核心心脏。本课程将深入讲解腾讯云两大主流关系型数据库——云数据库 MySQL (TencentDB for MySQL) 和云数据库 PostgreSQL 的架构原理、高可用设计及运维最佳实践。我们将重点探讨如何利用云原生的能力构建高可用、高可靠、高扩展的数据库架构。

学习目标

通过本课程的学习,您将能够:

  • 掌握 MySQL 架构:理解主从复制原理、数据同步方式(异步/半同步/强同步)及备份回档机制。
  • 掌握 PostgreSQL 特性:了解 PG 的地理信息处理(PostGIS)、高可用架构及企业级应用场景。
  • 实施读写分离:学会通过数据库代理(Database Proxy)实现透明的读写分离,提升系统吞吐量。
  • 设计高可用容灾:掌握同城双活、两地三中心等数据库容灾架构的设计与部署。

第一部分:云数据库 MySQL (TencentDB for MySQL)

本部分导读
腾讯云 MySQL 是基于开源 MySQL 深度优化的高性能数据库服务,广泛应用于互联网、金融、电商等领域。

一、产品概述与核心概念

1.1 产品特性

  • 完全兼容:100% 兼容 MySQL 协议,无缝迁移现有业务。
  • 极致可靠:提供高达 99.9999999% 的数据可靠性,支持三副本存储。
  • 弹性扩展:支持分钟级扩容 CPU/内存和磁盘。
  • 智能运维:集成 DBbrain 智能诊断工具,提供性能优化建议。

1.2 核心概念 (Key Concepts)

  1. 实例 (Instance):独立的数据库资源实体。
  2. 只读实例 (Read-Only Instance):仅处理读请求的单节点实例,用于分担主库读压力。
  3. RO 组 (Read-Only Group):只读实例的集合,提供统一的 VIP,实现读请求的负载均衡。
  4. 灾备实例 (Disaster Recovery Instance):位于不同地域或可用区的备库,用于异地容灾。
  5. 数据库代理 (Database Proxy):位于应用与数据库中间的网络代理,核心功能是实现读写分离连接池管理。

二、高可用架构原理

2.1 主从架构与数据同步

腾讯云 MySQL 默认采用主备(Master-Slave)架构。主节点处理写请求,备节点实时同步数据。

三种数据同步方式对比:

同步方式 原理 优点 缺点/风险 适用场景
异步复制 (Async) Master 写完 Binlog 即返回成功,不等待 Slave 确认。 性能最高,响应最快。 主库宕机时可能丢失数据(RPO > 0)。 对性能要求极高,允许少量数据丢失的非核心业务。
半同步复制 (Semi-sync) Master 写完后,等待至少一个 Slave 接收并写入 Relay Log 后才返回成功。 兼顾性能与可靠性。 若 Slave 均不可用,会自动降级为异步复制。 大多数生产环境的默认推荐配置
强同步复制 (Strong Sync) Master 必须等待 Slave 确认写入成功后才返回。若 Slave 不可用,主库暂停写操作 数据零丢失(RPO = 0)。 牺牲可用性换取一致性,Slave 故障会阻塞主库。 金融核心交易系统。

2.2 复制原理

  1. Master:开启 Binlog Dump 线程,将二进制日志(Binlog)发送给 Slave。
  2. Slave
    • I/O 线程:接收 Binlog 并写入本地的中继日志(Relay Log)。
    • SQL 线程:读取 Relay Log 并重放 SQL 语句,实现数据同步。

三、备份与回档

3.1 备份机制

  • 物理备份 (全量):直接拷贝数据库文件(.xb 格式),速度快,恢复效率高。支持自动周期性备份。
  • 逻辑备份 (SQL):导出 SQL 语句(mysqldump),支持手动触发。
  • Binlog 备份 (增量):实时备份 Binlog 日志,用于恢复到任意时间点。

3.2 回档能力 (Flashback)

  • 按时间点回档:基于“全量备份 + Binlog”,可将数据库回滚到过去 7 天内的任意秒级时间点
  • 回收站:误删表(Drop Table)后,表会进入回收站保留一段时间,可一键恢复。
  • 极速回档:利用 CSBS/CBS 快照技术,实现 TB 级数据的快速挂载恢复。

第二部分:云数据库 PostgreSQL

本部分导读
PostgreSQL 被誉为“世界上最先进的开源关系型数据库”,在地理信息(GIS)和复杂查询方面表现卓越。

一、产品特性与场景

1.1 核心优势

  • 插件生态:支持 PostGIS(地理信息)、TimescaleDB(时序数据)等插件。
  • 复杂查询:对 JOIN、复杂 SQL 和 JSON 数据的处理能力优于 MySQL。
  • 高兼容性:支持 Oracle 语法兼容插件,便于去 O 迁移。

1.2 典型应用场景

  1. LBS 地理应用:利用 PostGIS 插件存储经纬度、计算距离、圈选范围(如打车、外卖应用)。
  2. 企业核心系统:ERP、CRM 等复杂业务逻辑系统,利用 PG 强大的存储过程和事务控制。
  3. 数据仓库:支持海量数据分析和复杂聚合查询。

二、架构与备份

2.1 高可用架构

  • 支持 一主一从一主多从
  • 采用流复制(Streaming Replication)技术,支持同步和异步模式。

2.2 备份策略

  • 全量备份:物理备份,支持压缩(压缩比约 30%)。
  • 增量备份:WAL 日志备份(Write-Ahead Logging)。
  • 克隆实例:支持按时间点克隆出一个新实例,用于测试或数据校验。

第三部分:云数据库最佳实践

场景一:读写分离 (Read/Write Splitting)

背景:电商大促或社交应用中,读请求(查询商品/看动态)远多于写请求(下单/发动态),主库压力巨大。

解决方案:数据库代理 (DB Proxy)

  1. 架构设计
    • 购买 1 个主实例 + N 个只读实例。
    • 开通数据库代理,获得一个统一的读写分离地址。
  2. 工作流程
    • 应用连接 Proxy 地址。
    • Proxy 自动识别 SQL 类型:
      • 写请求 (INSERT/UPDATE) -> 转发给 主实例
      • 读请求 (SELECT) -> 负载均衡分发给 只读实例
  3. 最佳配置
    • 自动加入:开启“新购只读实例自动添加到代理”,扩容更便捷。
    • 故障剔除:当只读实例故障或延迟过高时,Proxy 会自动将其剔除,保障业务读取不报错。
    • 读权重:通常选择“系统自动分配”,根据实例规格自动加权。

场景二:两地三中心容灾 (Geo-Disaster Recovery)

背景:金融级业务要求能够抵御城市级灾难(如地震、光纤挖断)。

架构设计

graph TD
    subgraph 地域A_同城双中心
        AZ1[机房 A (主中心)]
        AZ2[机房 B (同城灾备)]

        Master[主实例] -- 强同步/半同步 --> Slave_Local[同城备实例]
    end

    subgraph 地域B_异地灾备
        AZ3[机房 C (异地中心)]
        Slave_Remote[异地灾备实例]
    end

    Master -- 异步复制 --> Slave_Remote
  1. 同城双活
    • 在地域 A 的机房 A(主)和机房 B(备)部署主备实例。
    • 采用强同步半同步复制,确保 RPO=0(数据不丢)。
    • 正常情况下,读写流量在机房 A,故障时自动秒级切换到机房 B。
  2. 异地灾备
    • 在地域 B(如上海)部署灾备实例。
    • 通过DTS或原生复制跨地域同步数据(通常为异步)。
    • 作用:当地域 A 发生毁灭性灾难时,手动激活地域 B 的实例接管业务。

场景三:性能压测与选型

在上线前,建议使用工具对数据库进行基准测试,确保存储 I/O 满足需求。 - 工具:Sysbench, TPCC. - 关键指标:TPS (每秒事务数), QPS (每秒查询数), Latency (延迟). - 存储选型:对于 I/O 密集型业务,务必选择 SSD 云硬盘增强型 SSD


课程总结

知识点回顾

  1. MySQL 同步:半同步复制是生产环境平衡性能与安全的最优解。
  2. PG 优势:处理 GIS 数据和复杂 SQL 首选 PostgreSQL。
  3. 读写分离:通过数据库代理(Proxy)实现透明的读流量分担,无需修改代码。
  4. 容灾层级:同城双中心(高可用) > 异地灾备(高可靠)。

架构师实践清单 (Checklist)

  • [ ] 数据安全:生产库是否开启了自动备份?Binlog 是否保留至少 7 天?
  • [ ] 高可用:主备实例是否分布在不同的可用区?
  • [ ] 性能优化:读多写少的业务是否开启了读写分离?
  • [ ] 监控告警:是否配置了 CPU、磁盘空间、主从延迟的告警?
  • [ ] 容灾演练:是否定期进行灾备切换演练,验证 RTO/RPO?

本章课程到此结束。下一章,我们将深入分布式数据库领域,讲解 2.10 企业级分布式数据库 TDSQL 及最佳实践