按需弹性:高性价比地适应灵活多变的业务需求
前言:
随着公司业务的蓬勃发展,为了满足公司业务的扩张,数据库扩容是业界通用的解决方案。业务负载在长时间维度上推演,定量扩容是一个很好的解决方案(如图1所示),能够支撑更多的业务并发。
图1 长期推演下的集群扩容示意图
但是在细粒度的时间维度上,例如具体到每周甚至每日,传统的扩容模式仍然以资源超配的方式对抗业务负载波动。考虑图2中的场景,公司的数据中台团队,在每天的凌晨12点到凌晨6点执行ETL,完成大数据量的数据离线导入;业务团队每天作业负载呈现出无规律的负载波动。传统扩容的资源超配将会浪费大量资源,使用成本高。
图2 不同业务的负载变化
理想情况下,如果数据库能够根据负载波动主动地实现扩容和缩容,按需实现资源的调整能够极大地降低成本(如图3所示),减少资源浪费。为了更灵活、更低成本地实现数据库的扩缩容,数据库系统提供较小资源规格,以满足基础作业负载,又能在业务负载高峰期间快速扩容,保障业务的稳定性。DWS的存算分离版本中,实现了上诉的按需弹性,解决细粒度时间维度上的负载波动,主动地按需扩容弹性资源,以保障负载短期爆发的业务稳定性。
图3 短期负载波动下的资源弹性
1 负载隔离,按需弹性,计算按需供给
如图4所示,DWS存算分离版本(DWS 3.0)存在两个核心逻辑概念:固定资源池和弹性资源池。
固定资源池:根据业务需要,部署多个固定VW(Virtual Warehouse),又称主VW。不同业务绑定不同的VW,并提供业务间的负载隔离。主VW的大小在MPP架构下决定了单SQL的上限以及所能处理的QPS的极限。主VW适合承接负载稳定以及低时延的作业。DWS提供分VW的水平扩展能力,通过扩展更多节点资源来满足业务扩张的需要。管理员需要根据长期的负载推演变化趋势来提前规划主VW的规格大小。
弹性资源池:适用于细粒度时间范围的负载波动场景,存在一个或多个弹性VW。弹性VW在存储上实现了以OBS为基础储存的shared storage架构,而在计算上则是shared nothing架构。这就决定了计算和存储充分解耦,计算和存储可以实现分层扩展。计算节点扩容无需数据重分布,存储资源按需扩容,实现无限容量存储。弹性VW与主VW之间实时数据共享以解决元数据实时同步问题,避免元数据的滞后刷新,使得弹性VW能够实时利用最新的元数据进行作业执行。
图4 DWS存算分离架构示意图
2 手动弹性:实现资源周期性扩展,加速作业完成
手动弹性,顾名思义,客户需要手动设置弹性资源的扩容和缩容。具体来说,在图5中,公司的数据中台团队在每天的凌晨12点到6点执行ETL,完成大数据量的离线导入,ETL负载存在两个阶跃式的增长。在手动弹性的帮助下,DWS在12点时会定时准备好弹性VW 1以消费第一阶段的负载增长,而在凌晨4点又由于负载再次增加,仍会定时准备弹性VW 2来满足第二阶段的负载突发。数据导入大约持续到6点,DWS会定时回收2个手动弹性VW。在此过程中,客户只需要额外为零点到6点这段时间额外付费,无需要对主VW进行资源超配,降低成本。
图5 负载周期性变化下的手动弹性VW生命周期
手动弹性不仅可以应对周期性负载突发情况,而且也可以扩展计算资源以实现计算加速。例如,在周期性跑批作业的场景下,固定资源池也可以胜任,但是作业整体完成时间会变长。手动弹性提供额外的计算资源,近线性地加速作业完成时间。
2.1 手动弹性VW的创建
在集群列表中,单击集群名称,进入“集群详情”页面,点击“添加增删计划”并设置合理的弹性计划。如图6所示,我们需要设置计划类型和集群名称。我们提供一次性增删计划和周期性增删计划两种方式,其中一次性增删计划,创建完成时间和开始删除时间不是必选项(如果未设置,则立刻创建,删除需要手动删除)。在周期性增删计划中,创建完成时间和删除时间必须设置,支持设置每周或者每月的弹性计划,也支持多个时间段的弹性计划。设置完成后,DWS管理面会按照预期设置的时间进行弹性VW的创建和删除。
图6 一次性增删计划和周期性增删计划
2.2 手动弹性VW的使用方式
客户提交的作业具体到哪个VW执行,依赖于创建时的配置。具体来说,
- 如果在创建时勾选了绑定具体的用户,则作业将会以用户绑定方式路由;
- 如果在创建时勾选了绑定主逻辑集群,我们将这种配置创建出来的弹性VW称之为专用弹性VW。内核以比例路由方式将所绑定的主VW的作业路由到专用弹性VW,即专用弹性VW只会接受来自绑定的主VW的作业。
- 如果在创建时绑定用户和绑定主逻辑集群均没有选择,我们将这种配置创建出来的弹性VW称之为公用弹性VW。内核以比例路由方式将主VW的作业路由到公用弹性VW,即公用弹性VW可以接受来自集群内所有主VW的作业。
总结来说,手动弹性VW的作业路由方式主要分为两种:用户绑定方式和比例路由方式。
2.2.1 用户绑定方式案例
公司的数据中台团队在每天的凌晨12点到6点执行ETL,完成大数据量的离线导入。团队使用不同的用户账户执行ETL,由于凌晨12点到6点的ETL负载变高,我们可以创建新的弹性VW消费突发的负载,并以用户绑定方式实现不同用户间的ETL负载隔离。具体来说,用户user1和user2,他们分别负载导入不同业务模块的数据。在凌晨12点到6点,这两个用户将会提交大量的数据导入负载,如果完全在主VW执行,将会花费大量时间,影响其他业务执行。数据中台团队可以在“集群详情”页面中执行“添加增删计划”,设置周期性增删计划。周期类型选择每星期,时间调度计划添加7项,每项对应一周的一天,并设置创建完成时间为凌晨12点,删除时间为凌晨6点。绑定用户选项卡设置user1,集群名称设置为compute_group1。如图7所示,设置完成后,在每日的凌晨12点到6点,user1提交的所有作业将会到新建立的弹性逻辑集群 compute_group1执行。而user2提交的作业仍然在原有的metadata_group执行。
图7 绑定用户路由方式
如果避免ETL业务影响其他业务执行,团队想将user2提交的作业也到弹性VW执行(即增加用户与已经创建出来的弹性VW的绑定关系),可以手动执行DDL,将多个用户绑定到同一个弹性VW上。例如:
alter user [user_name] node group [group_name];
如果想查询用户与VW的绑定关系,可以查询pg_user的nodegroup列,例如:
select usename, nodegroup from pg_user where usename=[user_name]; # 查看用户绑定的弹性VW
select usename, nodegroup from pg_user where nodegroup=[group_name]; # 查看弹性VW绑定的用户
2.2.2 比例路由方式案例
无需绑定用户,手动弹性VW创建完成后,用户通过DDL设置主VW的作业路由策略和路由比例,内核自动会将作业按照比例分配到主VW和弹性VW上。
alter node group [main_vw_name] set offloading_strategy to [strategy];
alter node group [main_vw_name] set offloading_rate to [value];
我们支持的路由策略有三种:
- 路由策略none:主VW作业不会卸载到弹性VW上;
- 路由策略dedicated:主VW作业可以卸载专用弹性VW;
- 路由策略elastic:主VW作业可以卸载到专用和公用弹性VW;
我们仍然以数据中台团队为例,介绍比例路由方式的案例。
数据中台业务用户user1绑定主VW matedata_group1,user2绑定主VW matedata_group2。两个用户提交的作业既包含ETL负载,也包括一些DML业务处理负载。在每日的凌晨12点到6点,ETL负载变高。团队通过在“集群详情”页面中执行“添加增删计划”,设置周期性增删计划。周期类型选择每星期,时间调度计划添加7项,每项对应一周的一天,并设置创建完成时间为凌晨12点,删除时间为凌晨6点。绑定主逻辑集群选项卡设置为matedata_group1,集群名称设置为compute_group1。同时执行
alter node group matedata_group1 set offloading_strategy to dedicated;
alter node group matedata_group1 set offloading_rate to 60;
如图8(1)所示,matedata_group1的60%作业卸载到专用弹性VW compute_group1执行。
后续团队发现,由于user1提交的作业负载太高,一个弹性VW仍然不能满足需求,而且,user2提交的作业负载也需要卸载一部分到弹性VW执行。但是出于经济成本考量,在额外新建2个弹性VW成本很高。最好的方式是新建一个弹性VW,新建的弹性VW能够处理user1和user2的作业。此时,团队可以选择elastic路由策略。团队只需要执行以下DDL:
alter node group matedata_group1 set offloading_strategy to elastic;
alter node group matedata_group2 set offloading_strategy to elastic;
alter node group matedata_group1 set offloading_rate to 60;
alter node group matedata_group2 set offloading_rate to 20;
经过设置后,如图8(2)所示,user1提交的40%作业在matedata_group1执行,30%在compute_group1执行,30%在compute_group2执行。user2提交的80%作业仍然在matedata_group2执行,而20%作业在compute_group2执行。
图8 路由策略dedicated vs 路由策略elastic
3 性能分析
目前,DWS的和手动弹性均可以实现随着VW数量增加,系统吞吐量呈现出近线性关系。查询性能随着缓存配比提高而递增,例如在TPCH 1000x的数据集下,在100%缓存下性能与存算一体性能持平;在30%缓存下(空间节省70%),相比存算一体版本性能仅劣化30%左右。DWS 3.0支持预读和按分区配置冷热缓存,实现弹性VW性能进一步优化。
DWS是华为云旗下的自研分布式数据库,已在数据科技领域深耕10多年,是世界1700+大客户的信赖之选。在云原生时代下,DWS积极拥抱存算分离,让全球多样化的企业享受到云上便捷,低成本的数据分析服务,高性价比地适应灵活多变的业务需求,实现资源的按需弹性。未来,DWS继续砥砺前行,用新技术让海量数据管理和分析变得更加简单高效,助力更多行业实现数据分析业务升级。
- 点赞
- 收藏
- 关注作者
评论(0)