# DWS存算一体架构弹性伸缩系统性介绍
弹性伸缩是云服务一个非常重要的特性，可以使云服务根据算力需求和资源负荷情况调整计算和存储资源配置，以达到性能最优和降低成本的目的。
一般分布式架构软件弹性伸缩都涉及如下几个维度：
- Scale Out（即横向扩展，向外扩展） Scale out代表分布式计算的能力，通过在原有系统上增加节点来扩展存储能力和计算能力。对于DWS数仓来说就是扩展集群规模。为了不出现木桶效应，要求新扩容节点的硬件配置与原集群一致。
  

- Scale In（横向收缩） 与Scale out对应的就是Scale in横向收缩，通过在原有系统上等比收缩节点来完成收缩存储能力和计算能力。由于DWS数仓是以安全环为粒度部署的，因此需要以安全环为单位来收缩，安全环的概念将在介绍DWS拓扑结构时详细说明。
  

- Scale Up（纵向扩展，向上扩展） Scale up代表以主机或机箱式为主的扩展CPU或内存存储的能力。通过在原有系统上提升硬件配置（如磁盘、内存、CPU、网卡等），来提升存储能力和计算能力。对于数仓来说就是升级硬件配置，升级某些硬件配置可能需要升级操作系统。
  

- Scale Down（纵向收缩） 与Scale up对应的就是Scale down纵向收缩，通过在原有系统上降低硬件配置来达到缩减成本的目的。
  
DWS具备着多样的弹性伸缩能力，可以通过升降硬件配置（如磁盘、内存、CPU、网卡等）来调整存储能力和计算能力，也可以通过横向扩展和收缩分布式节点来调整存储和计算能力，还可以通过集群Resize同时做横向扩展、纵向扩展，并且同时调整集群的拓扑结构。
#### 集群拓扑详解
要想充分理解DWS的弹性伸缩能力，首先需要了解DWS的集群拓扑结构。如下是DWS的简单的ECS+EVS部署结构：
- ECS提供计算资源，包括CPU、内存配置，DWS数据库实例（CN、DN等）都部署在ECS上。
- EVS提供存储资源，每个DN都会挂载一块EVS云盘。
- 而组成DWS集群的所有ECS节点都部署在同一个VPC内部，提供高速网络通道。
- 部署在ECS上的所有数据库实例逻辑上组成一个分布式的MPPDB架构集群，对外提供数据分析处理能力。
图1集群拓扑   
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002057243321.png "点击放大")
了解了DWS集群拓扑后，就能很容易理解DWS的弹性伸缩功能，目前DWS弹性伸缩能力主要包括：弹性磁盘扩容，弹性变更规格，集群扩容，集群缩容，增删CN等，详细的功能介绍和使用场景如下。
#### 弹性磁盘扩容
- 弹性磁盘扩容是指调整当前集群的所有ECS节点上挂载的EVS磁盘大小，主要针对需要快速调整磁盘扩容的需求。
- 仅支持磁盘扩容，不支持缩容。
- 磁盘扩容是轻量级操作，不涉及数据搬迁，通常会在5-10分钟内完成，**也不涉及服务重启，不影响业务**，建议选择在业务低峰期进行存储扩容。
- 弹性磁盘扩容支持DWS存算一体架构的EVS盘规格。集群版本在8.1.1.203及以后版本支持。
- 具体操作参见[弹性磁盘扩容](https://support.huaweicloud.com/mgtg-dws/dws_01_0828.html)。
图2弹性磁盘扩容   
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002057329501.png "点击放大")
#### 弹性变更规格
- 弹性规格变更是指调整当前集群的节点规格，主要针对CPU、内存两种资源的变更。适用于需要快速调整CPU以及内存规格的需求。
- 规格是指不同数量的CPU和内存的一种组合，例如：dwsx.16xlarge（CPU:64核 Memory:512GB ）。
- 弹性规格变更是轻量级操作，不涉及数据搬迁，通常会在5-10分钟内完成，**但是过程中会重启一次，涉及业务分钟级别中断**，建议选择在业务低峰期进行。
- 弹性规格变更支持DWS存算一体架构的EVS规格。集群版本在8.1.1.300及以后版本支持。
- 具体操作参见[弹性变更规格](https://support.huaweicloud.com/mgtg-dws/dws_01_0829.html)。
图3弹性变更规格   
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002057330969.png "点击放大")
#### 集群扩容
集群扩容是分布式MPPDB架构横向扩展的典型场景，通过添加对等同构的节点到当前集群来完成集群规模横向扩展的能力。DWS 2.0属于存算一体架构，因此集群扩容同时扩容了计算能力和存储能力。
为了扩容后集群内各节点负载均衡，性能最优，集群扩容会进行元数据复制和数据重分布，把数据重新均匀分布到新节点，因此集群扩容耗时与用户的数据库对象数量和数据量正相关。同时为了架构可靠性，新扩容的节点会自动组织成环，因此每次扩容至少扩容3个节点。
图4集群扩容   
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002021374402.png "点击放大")
8.1.1版本以后支持了在线扩容。**在线扩容过程中，DWS服务不重启，持续对外提供服务**。表重分布期间用户可以对该表执行插入、更新、删除，但重分布过程仍然会短时间阻塞用户的数据更新操作，会影响用户语句的执行性能。扩容重分布过程会消耗大量的CPU和IO资源，因此会对用户作业性能影响较大，用户应该尽可能在停止业务或业务轻载的情况下执行扩容重分布。用户也可以考虑分段扩容重分布策略，在系统负载很小的情况下采用高并发进行扩容重分布，在系统负载大的情况下停止扩容重分布或采用低并发进行扩容重分布。
集群扩容分为分段扩容和一键式扩容两种操作方式。
分段扩容把扩容操作分成添加主机、扩容、数据重分布三个阶段，用户可分段操作，把变更风险和业务影响降低到最低。
直接扩容是一键式操作，用户操作便捷度更高。
表1扩容方式对比 
| 扩容方式 | 特点                              | 业务影响           |
|:---|:---|:---|
| 分段扩容    | 把扩容操作分成添加主机，扩容，数据重分布三个阶段，用户可分段操作。 | 把变更风险和业务影响降低到最低。 |
| 一键式扩容 | 一键式操作，自动做DWS主机发放，扩容添加节点和数据重分布。      | 用户操作便捷度更高。       |
   
#### DWS集群安全环
集群扩容和缩容都和安全环相关，安全环是指DN多副本横向部署的最小主机集合。安全环主要作用是故障隔离。环内主机出现故障，故障不会扩散到环外。
DWS属于主备从架构，因此最小安全环节点数为**3个节点**。环内出现故障时，对环外无影响，对整个集群的影响的节点范围最小（3节点），对环内每个节点的影响为1/(N-1)，即1/2。极端场景下整个集群是一个安全环。环内出现故障，对整个集群影响的节点范围最大（整个集群），对环内每个节点的影响最小，为1/(N-1)。
一种常见的做法是**N+1成环**，每个节点将其N个备机均匀分散部署到环内的其余N个节点上。环内出现故障时，对整个集群的影响的节点范围为N+1，对环内每个节点的影响为1/N。
图5典型N+1安全环   
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002055918869.png "点击放大")
#### 集群缩容
- 相对于集群扩容，集群缩容是分布式MPPDB架构横向收缩的典型场景，通过缩减当前集群部分节点来完成收缩集群规模的能力。集群缩容会同时收缩计算能力和存储能力。
- DWS集群物理上由多个ECS节点组合，而为了提升架构可靠性，多个ECS节点（一般3个）又会组成一个逻辑安全环，多个安全环就组成了DWS集群。**而缩容则是以安全环为单位缩减，优先缩容集群尾部的安全环。**
- 集群缩容涉及数据搬迁，会把被缩减节点上的数据重分布到剩余节点上，因此缩容耗时与用户的数据库对象数量和数据量正相关。
- 集群缩容支持DWS存算一体架构，在线缩容在8.1.1.300版本开始支持，**在线缩容过程中，DWS服务不重启，持续对外提供服务**。表重分布期间用户可以对该表执行插入、更新、删除，但重分布过程仍然会短时间阻塞用户的数据更新操作，会影响用户语句的执行性能。缩容重分布过程会消耗大量的CPU和IO资源，因此会对用户作业性能影响较大，用户应该尽可能在停止业务或业务轻载的情况下执行缩容重分布。
图6集群缩容   
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002057358013.png "点击放大")
#### 增删CN
- 增删CN属于DWS数据库实例收缩操作，可以扩展和收缩数据库CN实例。
- CN全称协调节点（Coordinator Node），是和用户关系最密切也是DWS内部非常重要的一个组件，它负责提供外部应用接口、优化全局执行计划、向Datanode分发执行计划，以及汇总、处理执行结果。
- CN是外部应用的接口，CN的并发能力直接决定了业务的并发度。因此可以通过增加CN来扩展分布式能力，提升业务并发度。
- 同时由于CN是多主多活架构，为了保证数据一致性，如果部分CN数据损坏，DDL业务将受到阻塞，可以通过删除故障CN来快速恢复DDL业务。
- DWS支持增删CN功能，在8.1.1及以后版本支持。
- 增加CN过程中会同步元数据，因此增加CN耗时和元数据数量正相关，8.1.3版本支持在线增删CN，**增加CN过程中DWS服务不重启，持续对外提供服务**，DDL业务会短暂阻塞（不报错），其余业务不受影响。
图7增删CN   
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002021247474.png "点击放大")
#### 功能对比
以上各种弹性伸缩功能的对比如下。
表2功能对比 
| 功能     | 伸缩对象             | 伸缩范围                          | 业务影响                                                                                                        | 适用范围                    |
|:---|:---|:---|:---|:---|
| 弹性磁盘扩容 | 磁盘容量调整。         | 原集群的所有ECS挂载的EVS盘。               | 通常会在5-10分钟内完成，**也不涉及服务重启，不影响业务，**但建议业务低峰期进行。                                                             | 集群版本：8.1.1.203及以后         |
| 弹性变更规格 | 算力调整。          | 原集群的所有ECS规格（CPU核数，内存大小）。       | 通常会在5-10分钟内完成，**但是过程中会重启一次，涉及业务分钟级别中断**，建议业务低峰期进行。                                                       | 集群版本：8.1.1.300及以后        |
| 集群扩容   | 磁盘容量调整、算力调整。    | 分布式架构扩展对等同构的ECS节点。              | 支持在线，**在线扩容过程中，DWS服务不重启，持续对外提供服务**。 耗时与用户的数据库对象数量和数据量正相关。 | 集群版本：所有版本，8.1.1开始支持在线   |
| 集群缩容 | 磁盘容量调整、算力调整。      | 分布式架构收缩部分ECS节点。               | 支持在线，**在线缩容过程中，DWS服务不重启，持续对外提供服务**。 耗时与用户的数据库对象数量和数据量正相关。  | 集群版本：8.1.1.300            |
| 增删CN  | 数据库CN实例。  | 增加CN扩展业务并发度提升，删除CN快速恢复DDL业务。 | 支持在线，**增删CN过程中，DWS服务不重启，持续对外提供服务**。                                                                      | 集群版本：8.1.1版本，8.1.3开始支持在线 |
   
#### 弹性伸缩应用场景
不同的弹性伸缩功能应用在不同的业务场景下，具体参见[表3]。
 表3应用场景 
| 分类                | 弹性伸缩诉求                                                                  | 推荐弹性伸缩方式                           | 业务影响评估               | 预估耗时评估                   |
|:---|:---|:---|:---|:---|
| 存储           | 存储空间不够， CPU，内存，磁盘IO非瓶颈。    | 磁盘扩容。                             | 在线。                 | 不涉及数据搬迁，5-10分钟。          |
| 存储           | 存储空间太大，降本 CPU，内存，磁盘IO非瓶颈。 | 创建同规格、小存储容量集群，通过容灾方式把主集群迁移到备集群。   | 容灾切换过程中集群只读，一般30分钟内。  | 耗时与数据量正相关。               |
| 算力             | CPU或内存存在瓶颈。                                                             | 弹性规格变更。                           | 重启一次集群。              | 不涉及数据搬迁，5-10分钟。        |
| 算力             | 磁盘IO存在瓶颈。                                                               | 创建同规格、小存储容量集群，通过容灾方式把主集群迁移到备集群。 | 容灾切换过程中集群只读，一般30分钟内。 | 耗时与数据量正相关。              |
| 分布式算力 \& 存储  | 节点数不足导致分布式能力弱。                                                            | 集群扩容。                              | 在线（部分限制）。             | 涉及数据搬迁，耗时和数据量与元数据数量正相关。 |
| 分布式算力 \& 存储  | 节点数多导致成本高。                                                              | 集群缩容。                             | 在线（部分限制）。             | 涉及数据搬迁，耗时和数据量正相关。       |
| 拓扑结构   | 同时修改拓扑和规格诉求（DN数不一致）。                                                    | 调整集群大小。                            | 只读。                  | 涉及数据搬迁，耗时和数据量与元数据数量正相关。 |
| 拓扑结构   | 同时修改拓扑和规格诉求（DN数一致）。                                                      | 集群容灾迁移。                          | 在线（部分限制）。              | 涉及数据搬迁，耗时和数据量正相关。       |
| 拓扑结构   | 并发度不够。                                                                  | 增删CN。                            | 在线（部分限制）。            | 涉及数据搬迁，耗时和元数据数量正相关。      |
   
