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.

82 lines
4.3 KiB
Markdown

# 分布式数据库
## 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](pic/分布式数据库ShardingJDBC.png)
- 代理中间件 + 单体数据库
- 以独立中间件的方式,管理数据规则和路由规则,以独立进程存在,与业务应用层和单体数据库相隔离,减少了对应用的影响。随着代理中间件的发展,还会衍生出部分分布式事
务处理能力。这种中间件的典型产品是 MyCat。
- ![分布式数据库MyCAT](pic/分布式数据库MyCAT.png
- 单元化架构 + 单体数据库
- 单元化架构是对业务应用系统的彻底重构,应用系统被拆分成若干实例,配置独立的单体数据库,让每个实例管理一定范围的数据。例如对于银行贷款系统,可以为每个支行搭建
独立的应用实例,管理支行各自的用户,当出现跨支行业务时,由应用层代码通过分布式事务组件保证事务的 ACID 特性。
- ![分布式数据库单元化架构](pic/分布式数据库单元化架构.png)
- 根据不同的分布式事务模型,应用系统要配合改造,复杂性也相应增加。例如 TCC 模型下,应用必须能够提供幂等操作。
- 在分布式数据库出现前,一些头部互联网公司使用过这种架构风格,该方案的应用系统的改造量最大,实施难度也最高。
- **分布式数据库则是将技术细节收敛到产品内部,以一个整体面对业务应用**。