共计 1448 个字符,预计需要花费 4 分钟才能阅读完成。
“HashData 云原生架构”是 HashData 原创的系列文章。在第一篇《对象存储与 HashData 多云策略》的文章中提到:HashData 数据仓库应用对象存储作为数据长久层,通过奇妙地在对象存储 Bucket 与数据库表空间建设映射关系,同一个 HashData 集群可拜访(读写)不同对象存储系统的数据,原生反对多云数据拜访。本文为系列解读第二篇,次要介绍 HashData 的多集群共享对立存储架构(Multi-cluster, Shared-data Architecture),重点分享——保留在对象存储上的同一份数据(同一张表的数据)如何被不同计算集群拜访。
HashData 数据仓库
HashData 数据仓库由三局部组成: 元数据集群、计算集群和分布式共享存储,别离对应治理、计算和存储性能,每一层可独立扩容。
以一个简化的架构图(演示环境中的部署拓扑图)为例:部署拓扑图蕴含两个计算集群,一个集群由 4 个计算节点组成,另一个由 8 个计算节点组成。两个计算集群共享下层的元数据集群和底层的对象存储集群,与传统 MPP 数据库 Shared-Nothing 比照,这种架构被称为 Shared-Everything。
工作原理
上面通过三个典型的操作流程解析 HashData 多集群共享对立存储架构的工作原理:
- 数据库连贯:用户基于数据库来连贯信息——通过 PSQL、JDBC 等客户端程序连贯计算集群(轻易一个计算集群)主节点;主节点承受客户端连贯后,拜访元数据集群,对客户端进行一系列身份 / 权限认证;当通过认证后,fork 出特定的主过程(QD 过程)负责该数据库连贯接下来的查询处理。从用户体验的角度看,整体实现流程与开源的 Greenplum Database 利用形式完全相同。
- SQL 执行: 用户通过客户端将查问 SQL 语句提交给主节点的 QD 过程,QD 过程负责解析接管到的 SQL 语句,生成查问打算。在这一过程中,如本地未缓存所需的元数据,QD 过程会申请元数据集群获取并在本地缓存一份。查问打算生成后,QD 过程会连贯到计算节点,启动执行过程(QE 过程),并把查问打算散发到各个 QE 过程。QE 过程随即开始执行被调配的子打算。在执行过程中,如果发现须要用到的元数据本地未缓存,将再次拜访元数据集群,获取并缓存一份在本地。
对于一个新启动的计算集群(冷启动),每个计算节点本地没有任何数据,数据块保留在对象存储上。因而,当计算集群第一次拜访某张表时,须要间接拜访对象存储获取须要的数据块,并在本地缓存一份。无论是元数据还是数据拜访,均为按需进行——仅当查问须要时,才在元数据集群 / 对象存储中拉取后缓存本地。 - 数据加载: 为了对新插入的数据提供 ACID 的数据库个性,采取了 write-through 策略:即不通过缓存的形式写到对象存储,而后更新元数据,提交数据库事务。
演示
1. 在小集群创立 test 表,插入 100 万条记录:
2. 切换到大集群:
3. 把小集群的执行工夫关上:
4. 把大集群的执行工夫关上:
5. 通过大集群向表插入 100 万条记录:
6. 切换到小集群:
小结
这篇文章中,咱们介绍了 HashData 数据仓库多集群共享对立存储的架构。首先,这个架构不仅能够平安、轻松地实现不同集群之间的数据共享,同时防止了数据复制与数据挪动的提早和复杂性;其次,咱们能够通过横向减少集群数量的形式,晋升数据并发拜访度;再次,因为反对多集群之间的数据强一致性,消费者集群始终能够查看最新的数据,即使数据在生产者集群上不断更新;最初,企业可能平安治理与内部的合作以及跨组织共享数据。