You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.3 KiB

分布式数据库

1. 基础

1.1 什么是分布式数据库?

  • 由表及里、由外到内是人们认识事物的普遍规律,所以我们让也从内外部两个视角来观察。

  • 外部视角:外部特性

    • 外部视角,就是看看分布式数据库具备哪些特性,能解决什么问题。
    • 业务应用系统可以按照交易类型分为联机交易OLTP场景和联机分析OLAP场景两大类。OLTP 是面向交易的处理过程,单笔交易的数据量小,但是要在很短的时间内 给出结果,典型场景包括购物、缴费、转账等;而 OLAP 场景通常是基于大数据集的运算,典型场景包括生成个人年度账单和企业财务报表等。
  • 定义 1.0 OLTP 关系型数据库

  • OLTP 场景的通常有三个特点:

    • 写多读少,而且读操作的复杂度较低,一般不涉及大数据集的汇总计算;
    • 低延时,用户对于延时的容忍度较低,通常在 500 毫秒以内,稍微放大一些也就是秒级,超过 5 秒的延时通常是无法接受的;
    • 高并发,并发量随着业务量而增长,没有理论上限。
  • 分布式数据库是服务于写多读少、低延时、高并发的 OLTP 场景的数据库。

  • 定义 2.0 + 海量并发

    • 这个“海量并发”的下限大致是 10,000TPS
    • 基于这些理解,我们可以再得到一个 2.0 版本的定义:分布式数据库是服务于写多读少、低延时、海量并发 OLTP 场景的关系型数据库
  • 定义 3.0 + 高可靠

  • 可靠性还要更复杂一点包括两个度量指标恢复时间目标Recovery Time Objective, RTO和恢复点目标Recovery Point Objective, RPO。RTO 是指故障恢复所花费的时间可以等同于可靠性RPO 则是指恢复服务后丢失数据的数量。

  • 数据库高可靠意味着 RPO 等于 0RTO 小于 5 分钟。

  • 3.0 版本的定义,分布式数据库是服务于写多读少、低延时、海量并发 OLTP 场景的,高可靠的关系型数据库

  • 定义 4.0 + 海量存储

  • 最后,我们终于得到一个 4.0 终极版本的定义,分布式数据库是服务于写多读少、低延时、海量并发 OLTP 场景的,具备海量数据存储能力和高可靠性的关系型数据库

  • 内部视角:内部构成

  • 4.0 版本的定义很相似。但是,它们向用户暴露了太多的内部复杂性。在我看来,对用户约束太多、使用过程太复杂、不够内聚的方案,不能称为成熟的产品。

  • 客户端组件 + 单体数据库

  • 通过独立的逻辑层建立数据分片和路由规则,实现单体数据库的初步管理,使应用能够对接多个单体数据库,实现并发、存储能力的扩展。其作为应用系统的一部分,对业务侵入 较为深。

  • 这种客户端组件的典型产品是 Sharding-JDBC。

    • 分布式数据库ShardingJDBC
  • 代理中间件 + 单体数据库

    • 以独立中间件的方式,管理数据规则和路由规则,以独立进程存在,与业务应用层和单体数据库相隔离,减少了对应用的影响。随着代理中间件的发展,还会衍生出部分分布式事 务处理能力。这种中间件的典型产品是 MyCat。
    • ![分布式数据库MyCAT](pic/分布式数据库MyCAT.png
  • 单元化架构 + 单体数据库

  • 单元化架构是对业务应用系统的彻底重构,应用系统被拆分成若干实例,配置独立的单体数据库,让每个实例管理一定范围的数据。例如对于银行贷款系统,可以为每个支行搭建 独立的应用实例,管理支行各自的用户,当出现跨支行业务时,由应用层代码通过分布式事务组件保证事务的 ACID 特性。

  • 分布式数据库单元化架构

  • 根据不同的分布式事务模型,应用系统要配合改造,复杂性也相应增加。例如 TCC 模型下,应用必须能够提供幂等操作。

  • 在分布式数据库出现前,一些头部互联网公司使用过这种架构风格,该方案的应用系统的改造量最大,实施难度也最高。

  • 分布式数据库则是将技术细节收敛到产品内部,以一个整体面对业务应用