从数据库架构设计的角度,主要有三种,Shared Everything、Shared Disk以及Shared Nothing。
1. Shared Everything
一般指的是单个主机的环境,完全透明共享的CPU/内存/硬盘,并行处理能力是最差的,典型代表就是SQL Server、单机版Oracle和MySQL,一般不考虑大规模的并发需求,架构比较简单,一般的应用需求基本都能满足。
2. Shared Disk
各处理单元使用自己的私有CPU和Memory,共享磁盘系统。典型的代表是Oracle RAC、DB2 PureScale。例如Oracle RAC,他用的是共享存储,做到了数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好,使用Storage Area Network (SAN),光纤通道连接到多个服务器的磁盘阵列,降低网络消耗,提高数据读取的效率,常用于并发量较高的OLTP应用。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能,同时更多的节点,则增加了运维的成本。
3. Shared Nothing
各处理单元都有自己私有的CPU/内存/硬盘等,Nothing,顾名思义,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF、带分库分表的MySQL Cluster,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。
如果更准确地说,Shared Nothing架构又分为两种,一种是分布式架构,将数据库中的数据按照某一标准分布到多台机器中,查询或插入时按照条件查询或插入对应的分区。另外一种是每一个节点完全独立,节点之间通过网络连接,通常是通过光纤等专用网络。
我们常说的Sharding其实就是Shared Nothing,他是将某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,例如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量。
随着云计算、虚拟化的发展,这种架构的使用场景越来越多,例如双十一购物、春运抢票、微博热搜等,在Shared Nothing架构下,可以快速实现资源的扩容和收缩,这是Shared Everything和Shared Disk架构不具备的优势。
但是凡事都得两面看,带来资源灵活性的同时,他对应用设计开发人员有可能提出了更高的要求,例如有些需要进行分区的,应用得配合改造,跨机访问上,可能比单机,要考虑的更多。
上面提到的MPP,指的是大规模并行分析数据库(Analytical Massively Parallel Processing (MPP) Databases),他是针对分析工作负载进行了优化的数据库,一般需要聚合和处理大型数据集。MPP数据库往往是列式的,因此MPP数据库通常将每一列存储为一个对象,而不是将表中的每一行存储为一个对象。这种体系结构使复杂的分析查询可以更快,更有效地处理。例如TeraData、Greenplum,GaussDB100、TBase。