Fork me on GitHub

数据库架构设计模式总结

目录

  • 背景
  • 第一部分 Spark内存管理详解
  • 第二部分 Spark参数说明
  • 第三部分 Spark内存优化
  • 第四部分 常见线上问题解决
  • 参考文献及资料

背景

数据库构架设计中主要有Shared Everything、Shared Disk、Share Memory和Shared Nothing等。

第一部分 数据库架构设计设计模式

1.1 Shared Everything

Shared Everything指单个主机独立支配CPU、内存、磁盘等硬件资源,其优势是架构简单,搭建方便。但该种架构的缺陷是数据并行处理能力较差,扩展性较低。Shared Everything的典型代表的产品为SQLserver。

1.2 Shared Disk

在Shared Disk架构中,CPU和内存对于各个处理单元私有,但各节点共享磁盘系统。该种架构的典型代表为DB2 pureScale和Oracle Rac。这种共享架构具备一定的扩展能力,可通过节点的增加来提升数据并行处理能力。但当存储器接口使用饱和时,磁盘IO成为了系统资源瓶颈,节点的扩充并不能提升系统性能。

Oracle的Cluster就是RAC,其实这不是真正的Cluster产品,属于变相实现的,而Oracle的RAC是通过共享存储实现的,也就是共享磁盘,只不过多数采用中高档存储服务器;

1.3 Shared Memory

Shared Memory指多个节点共享内存,各CPU间通过内部通讯网络(Interconnection network)进行通讯。但与Shared Disk类似,但当节点数量过高时,内存竞争(Memory contention)将成为该系统的瓶颈,单纯地堆砌节点数量并不能提升整体数据处理性能。

Shared memory 体系结构的cpu之间通过主存进行通讯,具有很高的效率;但当更多的cpu被添加到主机上时,内存竞争contetion就成为瓶颈,cpu越多,瓶颈越 厉害。Shared disk也存在同样问题,因为磁盘系统由 Interconnection Network 连接在一起。

1.4 Shared Nothing

Shared Nothing的核心思想是各个数据库单元中不存在共享资源,数据处理单元对于各节点完全私有化。早在1986年加州大学伯克利分校的论文中,Michael Stonebraker从当时的数仓原型中对比了Shared Disk,Shared Memory,Shared Nothing架构,并论证了Shared Nothing在数据并行处理中的优势。各单元通过通信协议层交互,处理后的数据会逐步向上层汇总或通过通信层流转于节点间。Teradata公司在1982年申请了YNET技术专利,为无共享的大规模数据并行处理(Massive Parallel Processing)提供了先决基础。在TD数仓架构中,各节点单元通过MPL(Message Passing Layer)的BYNET物理层实现。BYNET是一个双冗余、全双工的网络,以松耦合方式将多个数据处理节点与处理引擎(Parsing Engine)高速连接起来。G行的多元化大数据平台中的TD集群正是采取该架构设计。

share nothing 指的是 在一个MPP分布式系统中,每个处理器有它自己的内存,操作系统,硬盘存储,多个segment节点可独立工作合作完成一个操作。关键看各节点有无独立的处理能力,是否需要master节点协助,greenplum分布式架构是典型的share nothing

Shared-Nothing架构:是一种松散耦合(Loosely Coupled)的架构,又可称为Share nothing,代表 系统Teradata,DB2 DPF,阿里Oceabase,腾讯TDSQL, TiDB,Google Spanner ;Shared-Nothing架 构在搭建成本低,表观扩展性等也都非常高。

第二部分

      1. Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer
      2. Shared Disk:各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。典型的代表Oracle Rac, 它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能 。
      3. Shared Nothing:各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和Hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。
        我们常说的 Sharding 其实就是Share Nothing架构,它是把某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量。

大数据时代,数据已日益成为决策分析、价值挖掘的关键。G行GaussDB、Teradata,Greenplum三个Shared Nothing架构的数仓平台,每日通过40000余个批量任务,对超过60个集市进行抽取(Extract)、加载(Load)、转换(Transform),支持着全行的BI应用及监管报送任务。

参考文献及资料

1、《Deep Dive: Apache Spark Memory Management》介绍视频,链接:https://youtu.be/dPHrykZL8Cg

本文标题:数据库架构设计模式总结

文章作者:rong xiang

发布时间:2021年11月16日 - 13:11

最后更新:2022年10月25日 - 23:10

原始链接:https://zjrongxiang.github.io/posts/6d6f27a6/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%