Hologres计算组实例&分时弹性入门实践
内容介绍
1. Hologres 计算组实例介绍
2. 计算组实例入门实践
3. 分时弹性入门实践
01. Hologres 计算组实例介绍
本次主题是 Hologres 的计算组实例和分时弹性的入门实践。分三个部分介绍。第一部分是 Hologres 计算组实例的原理,架构等。第二部分,展示计算组实例的入门实践。第三部分,具体演示分时弹性的相关使用实践。
首先,介绍Hologres的计算组实例。
1.1实时数仓的资源难题
在使用实时数仓的过程中,在资源方面会遇到一些难题。主要有四个方面。第一部分是负载隔离的难题,通常有很多业务使用数仓资源,业务中台也需要通过计算资源里写数据,所有的业务都要查询,这些业务共用一份资源,会产生资源的争抢。第二个难题是资源浪费。很多业务的波峰波谷的分时特征非常明显,比如数据中台通常会在凌晨把数据T+1的写入到 Hologres 里,还有很多的业务方,比如在白天会有一个明显的查询流量的高峰,针对这些问题,需要为流量峰值预留很多资源,这些资源只能解决流量的波峰问题。但在流量波谷的时候,这些资源往往会产生大量的闲置浪费、第三部分是大任务的难题, Hologres 是一个预留资源的售卖形态,能用的计算资源是固定的,如果有一些大型的ETL导入,大的查询任务可能会跑不出来,经常会遇到 Out Of Memory , 也就是 OOM 的问题,这些任务不仅会自己跑不出来,还会长时间的占用计算资源,影响到其他的查询。第四个难题是运维方面的难题,使用 Hologres 的团队,往往是数据中台的大数据团队,很难能预料到业务方下游各个业务团队什么时间来流量的波峰。并且业务团队很容易写出一些不理想的没有过滤条件的大查询,这些查询对于中台团队是未知的,针对于这些大查询,高并发场景,在最初很难能预留一些资源把这些问题解决,针对这四个难题, Hologres 一直长期迭代,通过不同的方式提供非常好的解决方案。
1.2 Hologres 的弹性计算组实例(V2.0):负载隔离
首先是第一个,负载隔离问题,在 2.0 版本推出了 Hologres 的弹性计算组实例,叫 Virtual Warehouse 。这个实例采用存算分离的架构,只需要通过一份数据,把计算资源拆成多个计算组,可以帮助解决业务的负载隔离问题,具体看上面的架构图,自下而上看。首先是一个存算分离的架构。计算层和存储层是分开的。在存储层,只要有一份存储,就可以解决不同的计算层的问题,不需要有多份存储资源。在计算层,可以把计算资源拆分成若干的计算组,比如有一个主计算组,用来做数据的实时写入,针对于不同的业务拆分成的不同的计算组。零售业务使用零售计算组,物流计算组,风控计算组,营销计算组等。这些计算组的上层会有一个网关叫 Getway 组件,SQL请求到 Hologres 里后,通过 Getway 来判断 SQL 应该由哪个计算组执行,起到路由的作用,这个架构能比较好的解决业务的负载隔离的需求。有几个好处,第一个是只有一个实例,实例内有多个计算组,之间互相计算资源,物理隔离。第二点是所有计算组之间共享一份数据,共享原数据,就不需要多份存储来增加的存储的成本。第三点是每个计算组可以按需创建,如果没有这么多业务方,比如可以要一个写入计算组和一个读计算组,每个计算组都可以独立的按需创建,并且每个计算组可以单独的扩缩容。最后一点,架构整体是一个实例,只有一个 End Point ,也就是只有一个连接串,业务方只需要通过一个固定的连接串请求就可以使用 Hologres 。业务方具体使用哪个计算组。只需要通过中台团队定义好权限的方式就可以实现计算组的自动路由。第一个难题负载隔离通过 Hologres 的计算组实例来解决。
1.3 计算组分时弹性(V2.2):提高资源利用率
第二个难题是资源浪费的难题,在 2.2 版本发布计算组的分时弹性功能,目的是解决资源浪费的问题,提高资源利用率。在没使用分时弹性的场景下,列举一个典型的场景示例如上图所示,可以发现业务有一个明显很低的流量波峰的场景,在每天早上大概两点到九点期间会有一个流量峰值,在没有使用分时弹性的情况下,为解决流量峰值的问题,需要预留 752CU 的资源,在白天的时候流量不多,这一部分资源有很多的部分被闲置浪费。这种场景非常推荐使用分时弹性功能,使用分时弹性之后什么效果。看上面这张图。
首先只需要包年,包月预留 400CU 的资源就可以解决这一天除凌晨流量峰之外的所有流量问题。针对于每天凌晨两点到九点的流量峰值。只需要为计算组配置一个弹性计划,计划的内容就是每天两点到九点弹出 352CU ,通过这样的方式就可以实现每天定时自动的调度,实现弹性扩容和弹性缩容。
整体看这一天的资源情况,可以明显看到资源的利用率显著提升,这样的方式也能帮助进一步的降低成本。每个计算组都支持单独设置弹性计划,每个计算组的弹性计划也可以设置多个时间段,如果不只凌晨有流量高峰,上午有,下午也有,这种情况就可以分别设置一个弹性时间段来解决多个流量峰值的问题。第二个难题使用计算组分时弹性解决。
1.4 Serverless Computing(V2.1):稳定执行大任务
第三个难题是大任务难题,通过 Serverless Computing 解决,在2.1 版本支持,在后续的版本也逐渐迭代,增加越来越多的能力,核心要点是通过使用预留计算资源,本实例以外的通过使用 Serverless Computing 资源池中的资源来解决一些疑难杂症。
1.5 Query Queue(V3.0):负载限流+大查询隔离
第四个难题是运维难题,在 3.0 版本推出了 Query Queue 查询队列的功能,能够实现负载限流和大查询的隔离。
1.6 Hologres 资源管理的 Serverless 方案
最后总结来看,针对于资源管理的一系列难题。 Hologres 提供一个完整的 Serverless 方案,通过持续演进的 Serverless 能力解决分析服务一体化架构下的包括隔离、弹性、成本等一系列的难题,具体看就是使用计算组实例解决负载隔离的难题,使用分时弹性解决资源浪费的难题,使用 Serverless Computing 解决大查询,大任务难题,使用 Query Queue 解决运维难题。 Hologres 目前已经发布 3.0 版本,涵盖上述所有的功能,未来将在 3.1 版本进一步迭代演进 Serverless 方案,具体包括三个方面,针对第一点计算组实例,会在 3.1 版本进一步支持计算组的无损缩容,以前已经支持计算组的无损扩容,就意味着在 3.1 版本就可以完全业务无感的实现计算组的扩缩容。针对弹性方面,资源浪费难题,在 3.1 版本会在分时弹性的基础上进一步支持计算组基于负载的自动弹性。下一个部分在 3.1 版本,会基于查询队列 Query Queue 进一步支持自动限流解决一些流量峰值,把实例打爆等一些预期以外的难题。 3.1 版本会在明年的 Q1 预估会发布。
02. 计算组实例入门实践
第二部分,具体演示计算组实例的使用入门实践。分为七个小部分,包括计算组管理,授权如何连接,如何实现负载隔离,如何做流量的切换,如何做监控与告警,以及原本不是计算组实例,如何能转成计算组实例。
2.1 计算组管理部分
首先演示计算组管理部分。看到计算组的实例类型是计算组型,实例已经预留 64CU 的资源,来到计算组管理的页面,可以看到一系列的信息,首先是实例资源的使用情况,看到计算组预留 64CU 的资源,目前已经创建一个计算组,Init Warehouse 默认计算组,它使用 32CU 的资源。还有 32CU 的资源没有分配出去,这里有一个横幅给提醒尽快分配,避免产生资源浪费。
这种情况下,可以在通过页面来管理计算组。首先可以新增计算组,因为有 32CU 的未分配的计算资源,可以使用这 32CU 来新建一个计算组,给它取名叫 Read Only ,点击确定,发现计算组已经创建出来,目前在处理中,等待它处理完成即可。同样针对于每一个计算组,可以在这里点击调整配置来完成计算组的升降配,也可以点击重启来重启计算组, Rebalance 功能是可以在一些特殊情况下,对计算组下面的不同计算节点做负载均衡的处理。通常情况下不需要操作,什么时候需要可以参考文档进行处理,这时候发现已经建出两个计算组,每个计算组使用的资源是 32CU ,这就是计算组相关管理的能力。
2.2 计算组授权
第二部分是计算组授权的相关内容。解释计算组授权相关的原理。比如使用的是 Hologres 的通用型实例,这种情况只有一份资源,所以这种情况下,这份资源默认能被所有权限的用户使用,默认能够访问所有的数据。所以这两个环节不需要专门做显示授权,只有对于用户和数据之间需要做授权,其实是为某个用户授予某张表的读写权限,这一部分需要专门授权。从通用型实例转成计算组型实例之后。在授权方面要做一些演进,对于用户和数据之间的权限,仍然沿用通用型实例的授权方式,为用户授予相关表的读写权限。发生变化的是资源相关的授权方面,计算组型实例可以拆分出多组计算资源,用户能使用哪一个资源。
问题需要用户定义,这一块需要显示授权。同样这份资源能够访问哪些数据。数据对于 Hologres 来说, Hologres 的表通过不同的 Table Group ,不同的表组进行分组关例的,某一份资源能够访问哪一份 Table Group ,哪一份数据也是同样需要做显示授权,接下来具体演示一下两个授权的过程,回到Hologres管控台,发现实例下的两个计算组都已经是正在运行的状态,表示这两个计算组都可用,看到 Read Only 计算组有一个停止按钮,可以点按钮停掉,然后可以进一步的释放。接下来继续演示计算授权相关的内容,点击登录实例进入 Hologres web 。登录数据库。点击安全中心。
首先,可以看到,进入 DB 授权页,目前的实例有一个,数据库名叫 Demo ,使用简单权限策略,点击用户授权,这里提前建两个用户分别叫 Demo_1 和 Demo_2 ,这两个用户都给他授予 Demo 实例下的 Develop 开发者权限,也就是 Demo_1 和 Demo_2 两个用户现在有所有表的读写权限,这种情况下进行进一步的计算组授权相关的动作,点击计算组管理,首先授权计算组和数据相关的内容。刚刚已经新建 Read Only 计算组,在这里可以点击新建计算组授权。这里已经默认选好实例和数据库,选择计算组。 Read Only 计算组,这里选择的 Table Group 实例默认情况下只有一个 Table Group ,默认计算组默认的体积选 Table Group ,点击确定完成授权。这里还有两个其他的配置,首先是副本数量,副本的作用是在原本的情况下,一个计算组下会有不同多个计算节点,比如计算组是 32CU 会有两个计算节点,这两个计算节点会分布式的分配数据, Table Group 下面的所有的数是 20 ,每个计算节点会均匀的分配 10 ,这种情况下,如果有一个计算节点挂掉,这种情况查询会报错,因为有一个计算节点没办法工作,这种情况如果把副本数量设置成 2 ,它就会让两个 worker 同时加载这一个,所有的都有两个 worker 同时在加载,这种情况下如果一个 worker 挂了,业务不会受到任何影响,不会有报错,另外一个计算节点会把挂掉的计算节点的相关任务负责起来。通过这样的方式能够实现查询无损的效果,下一个配置是把计算组设置为 Tap Group 的 Leader ,计算组,区别是 Leader 计算组可以写,如果设置否就是 Follow 计算组。
Follow 计算组只能做读方面的操作,这里仍然把 Read Only 计算组设为只读计算组,填否即可,点击确定,这时可以看到 Init Warehouse 是 Table Group 的 Leader 。计算组只有一个副本, Read Only 是 Table Group 的 Follow 计算组,只读计算组。有两个副本,可以进一步点击设置为 Leader 等操作,完成计算组和数据相关的授权操作,进一步完成计算组和用户的授权操作。
在默认情况下,所有的用户都拥有 Init 计算组的使用权限,针对刚刚创建的 Read Only 计算组,需要进一步的授权,选择 Read Only 计算组,新增用户授权,给 Demo_2 用户授予 Read Only 计算组的使用权限。并且设置为 Demo_2 用户的默认计算组。
默认计算组含义就是如果在连接的实例的时候不显示指定计算组,会默认使用Read Only 计算组。默认让 Demo_2 用户连接上 Read Only 计算组,通过这样的设置可以直接实现切流的操作,希望用户使用其他的计算资源,点确定就可以完成授权操作,授完权之后。所有 Demo_2 用户的连接请求都会默认连接到 Read Only 计算组上,通过这两步方式,就可以完成计算组相关权限的设定。
2.3 连接计算组
接下来介绍如何连接计算组,有两个方式,第一个方式是默认方式,第二个方式是显示指定,用于解决一些特殊场景。
针对于默认方式,以 JDBC 和 PSQL 为例,原本使用通用型实例是怎样连接串。对于计算组实例的默认方式同样是这样的连接串,不需要做任何改造,如果不改造,以刚刚的授权场景为例,使用 Demo_2 用户连接到 Holo 实例上,会使用它的默认计算组,也就是 Read Only 计算组来连接。
除默认方式外,还可以显示指定连接的计算组,只需要通过 JDBC 连接串,在最后 database name 后面加上一个 @warehouse name , PSQL 连接方式上就可以在 database name 后面同样也加一个 @warehouse name ,通过这样的方式就可以实现显示指定连接计算组。针对 Demo_2 用户,如果在连接串最后加上一个 @Init Warehouse 它会就会自动的连上 Init Warehouse , 而不会默认连上 Read Only Warehouse 。
2.4 使用计算组进行负载隔离
下一步演示如何使用计算组进行负载隔离,通过具体的用户演示,回到 Hologres web ,首先看到安全中心的 DB 授权,有 Demo_1 , Demo_2 , Develop ,开发者用户有所有的表的读写权限,回到原数据管理,已经提前用 Demo_1 和 Demo_2 的账密登录实例,依次看一下具体演示。首先使用 Demo_1 账号登录实例,进入 SQL 编辑器,新建一个 SQL 查询窗口。使用 Demo_1 为一张已经建好的表写入 11 行的数据,点击运行。
这是 Demo_1 用户的具体操作,再登录一次,同样的实例,使用 Demo_2 用户登录,针对 Demo_2 用户,因为它默认连接的是 Read Only 计算组,显示指定连接 Read Only 计算组.实例里提前写一些 TPCH_1t 的数据表,把 tpch 的 Q1 当做一个示例,使用 Read Only 计算组选到 Demo_2 实例,可以看到默认选择 Read Only 计算组,然后使用 Demo_2 用户来连接,使用 Read Only 计算组来运行 SQL 。
可以发现使用 Demo_1 用户,使用 Init Warehouse 来执行数据写入 11 行操作已经执行完成,耗时 54 秒,同样使用 Demo_2 用户,使用 Read Only 计算组来执行 tpch Q1 的数据查询也已经执行完成,耗时 28 秒。回到 Hologres 管理控制台,刷新一下监控信息,可以发现针对 warehouse ID=1 计算组已经出现明显的 CPU 使用峰值,意味 Demo_1 用户的数据导入任务已经成功使用 warehouse1 Init Warehouse 来执行。
进一步刷新,监控指标回到 wherehouse3 计算组,可以发现只读计算组, Read Only 计算组出现明显的流量峰值,说明 Demo_2 用户使用计算组执行的 TPCH_1t 数据的 Q1 的查询也成功使用这份计算资源。
最后还会有一个问题,对于 Demo_2 用户,默认使用的是只读计算组,用户能不能执行数据写入的操作。答案是可以的。默认开启计算组的自动路由功能,功能的作用是针对 Demo_2 用户使用 Read Only 计算组的场景下,如果执行一个数据写入的操作,会判断它是否有 Init Warehouse ,也就是主计算组的使用权限。如果有会默认使用主计算组来完成这次数据的写入操作,来具体演示同样使用 Demo_2 用户指定 Read Only 计算组来执行数据的写入,点击运行。
首先可以发现这条 SQL 没有报错,意味着这条 SQL 在正常执行,只需要静静等待这条 SQL 执行完成即可。导入任务已经完成,回到 Hologres 管理控制台的监控指标,进一步刷新监控指标,选择主计算组 Init Warehouse , 发现 Init Warehousee 下已经有明显的第二个流量峰, CPU 峰值,意味着的 Demo_2 用户刚刚执行的数据导入任务成功执行,并且成功的自动路由使用主计算组 Init Warehouse 的计算资源,实现负载隔离的效果。 Demo_2 这一类的用户的查询默认使用的是 Read Only 计算,如果需要写入可以把写入任务自动路由到主计算组,通过这样的方式实现负载隔离的能力。
针对计算组的流量切换使用类似的方式来实现,再登录一次 Hologres web 。回到安全中心的计算组管理。计算组用户授权管理页,默认情况下所有的用户默认使用主计算组 Init Warehouse , 流量切换的时候,在计算组授权管理页把希望切流的用户选择出来,比如 Demo_2 用户,希望他的流量转向的计算组定义好,通过账号设置使用 Read Only 计算组的权限,并且计算组是用户的默认计算组,就可以完成所有切流的工作,设置完成之后。未来所有 Demo_2 的连接请求都会自动的连接到 Read Only 计算组上。所有的查询请求都会使用 Read Only 的计算组的资源来进行查询。
2.5 计算组的监控指标
下一个部分演示计算组的监控指标。在管控台上,可以选择每一个计算组,针对于具体的监控指标。计算组维度的所有的指标,包括 CPU ,内存这些指标都是计算组维度,包括一些 QPS ,一些延时等指标。 IO ,流量以及一些其他方面的指标也都是把计算组进行展开。
2.6 通用型/主从实例转为计算组型
最后介绍一下,如果目前使用的不是计算组型的实例,而是一个通用型,甚至一个主从实例,要如何把它转成计算组型,首先有两方面的限制,一方面在 2.0.4 版本起开始支持计算组型实例,老的实例一定要在这些版本起,另外不支持 8 Core 规格的通用型实例转成计算组, 32CU 起步,转换的过程业务影响是采用标准的转换方式需要停机,通常是 10 到 20 分钟。如果实例的表数量非常多,原数据量非常大,可能会更久。
针对原本的实例类型,如果是通用型,只需要业务上选择一个时间窗口提交工单,后台协助大家从通用型实例转成计算组型就可以了。如果是主从实例会稍微麻烦一点,因为主从实例主和从是不同的 End Point ,计算组实例只有一个 End Point 。这就意味着需要用户先把只读从实例的流量迁移到主实例上,然后把只读从实例解绑或者释放掉。这一步完成之后。相当于把原本的主从实例,已经变成通用性实例。
这种情况下,可以按照刚刚所说的方式确定时间窗口提交工单,后台就可以协助,从主从改成的通用型实例给转换成计算组型。当完成实例类型的转换之后。
实例下会有几个主要参数的变化,
一个是实例类型,在管控台上可以看到它从通用型变成了计算组型;
一个是 Getway 节点数量,参数在转换前的通用型没有概念,因为不需要多组计算资源,不需要通过 Getway 进行路由,当转换之后,会有概念,可以实际根据 Getway 的使用情况来修改 Getway 配置,也有具体的监控指标可以看。
第三个部分是计算资源,在转换前有一批计算资源,转换后会完全兼容转换前的模式,所有的计算资源都会分配给 Init Warehouse 来保证转换前后的业务不受任何影响,完全兼容。
03. 分时弹性入门实践
第三部分演示分时弹性的入门实践。这里包括三个部分。第一点是分时弹性的相关概念和计费内容。第二点是演示分时弹性如何配置如何使用。第三点是演示分时弹性的监控与告警。
3.1 分时弹性概念与计费
首先是分时弹性相关的概念,当使用分时弹性前,其实 Hologres 的计算资源都是包年,包月或者按量付费,都是一个预留计算资源的模式,使用分时弹性之后,会多出两层的概念,一个是实例的弹性资源,一个是实例的总计算资源。
弹性资源顾名思义就是计算组使用分时弹性额外弹出的资源总量。这一部分资源只需要按使用时长和资源量按量付费。
实例级别拆成三个,预留,弹性,总三份资源。
计算组级别同样有三个概念,针对于最开始演示的分时弹性的使用场景,通过 400CU 预留 352CU 弹性的方式进行使用,在成本上会有什么样的变化。如果不使用分时弹性,有 752CU 的预留计算资源,这部分假设包年,包月,目录价是如上图所示。如果使用分时弹性,其中 400CU预留, 352CU 弹性。并且每天只有两点到九点使用七小时,总体计算,使用分时弹性之后,示例的场景可以直接降本接近 30% ,这个幅度非常巨大,资源使用率能够显著提升。
3.2 分时弹性使用实践
具体演示分时弹性的使用方法。回到 Hologres 管控台,进入实例,点击计算组管理,可以看到计算组管理页面的顶部,刚刚演示的是计算组资源管理,接下来会演示具体分时弹性如何使用,点击计算组弹性计化,可以看到这个页面,首先是弹性计划的时序图,这张图会具体展示,比如实例是计算组和分时弹性 Demo 实例,实例总的计算资源是 64CU 。计算组列表可以具体对每一个计算组专门的设置弹性计划,比如给 Init Warehouse 设置一个弹性计划,选择每天的两点到六点,弹性资源 32CU ,点击保存已生效,这时可以发现在时序图里,可以选择到 Init Warehous 计算组,然后会发现这张时序图发生变化。计算组每天的预留计算资源是 32CU 。在每天早上两点到六点时间段,会弹出 32CU 。
接下来进一步对 Read Only 计算组配置弹性计划,增加一个时间段,弹性计划如果所设的时间段涵盖当前的时间范围,它会立刻生效。具体演示,选择晚上 8 点到晚上 24 点时间段,预留计算资源是 32CU ,设置弹性计算资源是 16CU ,点击保存,这时候会收到提示,当前时刻位于该时间段内。保存后计算组会立即变配,所以在使用配置分时弹性的时候也需要谨慎操作,避免配置弹性计划的时候直接对计算组进行扩缩容,影响线上的其他业务,在 3.0 版本的时候,计算组扩容期间已经能够做到无损,但缩容还是有影响的。
3.1 版本才会扩缩容全部都无损,当操作完之后。在时序图里选择 Read Only 计算组,可以看到计算组每天的预留计算资源是 32CU ,在每天晚上 8 点到 24 点时间段。会增加 16CU 的弹性计算资源。因为设置的时间段,涵盖目前录制视频的时间点,所以配置会立即生效,回到计算组资源管理页面,可以看到对 Read Only 计算组的弹性计算资源已经是 16CU ,计算组的总计算资源是 48CU ,实例目前的弹性计算资源是 16CU ,在弹性化的执行日志里可以进一步的看到每一次弹性计划的实际的扩容和实际的缩容的执行状态以及一些资源变化情况。
3.3 分时弹性监控与告警实践
首先是的监控指标,来到监控信息,这里有 Serverless 和资源弹性选项,可以看到已经支持分时弹性弹出的 Core 数指标,会具体展示一个实例。每天几点到几点会弹出多少的计算资源的监控指标来帮助实时监控的弹性 CU 使用情况。第二点监控方式是弹性计划执行日志,这里会具体展示每一次执行的状态。第三方面是云监控里会如实上报计算组扩缩容的事件,进入云监控页面,看到系统事件中心系统事件选项。看到刚刚所操作的实例,在 9:58 的时候开始进行分时弹性的变配操作,在 9:59 的时候完成计算组分时弹性的变配操作,具体详情,资源,具体时间细节等信息都可以在事件内容里进行监测,可以进一步使用云监控的能力,对于计算组分时弹性的变配事件进行订阅,帮助监控分时弹性的具体使用。
3.4 Hologres 作为一体化实施湖仓平台的 40 家客户案例合集
这里是 Hologres 作为一体化实施湖仓平台的 40 家客户案例合集,包括阿里云上涵盖多行业的客户案例,以及阿里巴巴集团内部的各行各业的优秀案例。扫码登录 Hologres 官网查看相关案例,同样欢迎扫描右下角二维码免费试用 Hologres 。可以领取一定的计算资源CU和一定的存储资源免费试用额度来进一步体验 Hologres 在资源隔离一体化实施湖仓相关的各种能力。