按数据库系统架构角度分类,数据库又可以分为集中式单机数据库(Single)、集中式数据 库(share everything)、分布式数据库(share nothing)。 集中式数据库是一种经典、传统的数据库结构,被广泛应用于数据管理。 其数据被集中存储在存储设备中,安全且易于处理。 但是, 集中式数据库信息化投入成本高、性能及容量无法弹性扩展的资源瓶颈等明显的劣势,使以分 布式为主要特征的数据库系统的研究与开发受到人们的注意。 分布式数据库是分布在计算机网络上,逻辑上相互关联的数据库。 分布式数据库可以分散在多个位置,不同位置的计算机中存
表1: 分布式架构 vs 集中式架构
| 性能 | 集中式数据库 | 分布式数据库 |
|---|---|---|
| 架构 | share everything | share nothing |
| 硬件 | 一般依赖于特殊硬件(例如磁阵) | 通用硬件 |
| 扩展性 | 扩展能力较差 | 可以大规模水平扩展 |
| 可用性 | 难以跨地域容灾 | 可以多地多中心 |
| 可维护性 | 简单集中管理 | 分布式管控 |
有数据库管理系统的一份完整拷贝副本或部分拷贝副本,通过网络互相连接,共同组成一个逻辑上集中、物理上分散的大型数据库。 大量计算资源在软件系统的协调下形成一个对外提供服务的整体,从使用者角度来看,感受不到系统实际部署的方式和内部处理的复杂性,整个系统对外表现为一个整体。
1.单机:适用于数据量少、对服务可靠性要求不高的场景。一般都是shared everthing 架构,即共享所有计算资源(CPU、RAM、Disk)和数据。
2.集中式(without data sharding):多台机器联合管理数据,一般不对数据进行分片。
(a)一主多备(备机不可读):单台主机模式部署,其他备机为主机备份数据,并且可以在主机宕机的情况下,代替主机提供服务。此外还有一主多从,从节点异步接收主节点 的日志;一主多备一般是同步接收(或者通过Paxos协议)。
(b)一写多读:多个计算节点一写多读服务,其中一个节点提供写服务,其他多个节点提 供读服务。写节点宕机时,读节点可以代替写节点来提供服务。此架构适合于写少读 多的场景。
(c)多写多读:多个计算节点共享存储,每个节点都提供读写服务。为了解决写冲突一般采用分布式锁或者集中式锁的方式来实现。
3.分布式(with data sharding):将数据从物理上分割,并分配给多台服务器(或多个实例),例如通过哈希进行数据划分,或者通过范围进行划分,或者通过列表进行划分(例 如北京、上海数据分配到一个节点)。每台服务器可以独立工作,具备共同的schema。
(a)分布式中间件:基于单机数据库、分库分表中间件划分数据,中间件实现数据的划分、查询下发、结果收集,进而实现数据库的可扩展性。适合数据能够完美分片到各 个节点,节点间没有数据交互的场景。
(b)分布式数据库:对数据进行分片(sharding),通过全局事务处理模块和分布式查询处理模块支持原生支持分布式事务和全局复杂查询。
在数据庞大到单机无法高效处理的应用场景中,可以选择集中式架构或者分布式架构,来扩展数据库服务。这两种架构的优劣,可以从数据库的竞争力维度,进行比较,如表1。




