实操干货|云原生数仓AnalyticDB发布实例暂停功能,助力成本优化
背景
数据周期性归档:可通过api进行启动和暂停,在归档结束后,可立即暂停;仅在偶发分析和归档期间进行计算使用,高效的节省归档成本,节省近80% 的使用成本; 低成本POC测试:用户不再需要对测试过程中的实例进行频繁释放,使用实例启停可降低近80%以上的POC成本,用户若在一周期内进行密集使用,则倾向于进行暂停从而简化每次初始化的复杂度,提升POC效率。
功能
实例暂停
实例暂停时,只收取存储费用,不收取计算资源费用。为了保证更精确的使用统计,我们对底层的计费服务进行了改造,计费服务会实时感知实例启动和停止事件,按照秒级精度计算真正使用时长,然后按小时出账单。
技术架构
资源生命周期管理
计算资源
实例运行在k8s上,涉及Pod优雅停止和新建、调度、pod信息重建:
不直接依赖Pod的GraceTerminating来杀死实例,通过内核单独的操作来优雅Kill session,保护用户SQL请求;
保留了完整的管控元数据,通过“申请临时实例,交换OwnerReference”的方式重建Pod;
在资源池容量不够导致再次申请资源失败的情况,通过告警处理,保证5min完成资源扩容。
网络资源
在原生的k8s里,网络资源往往和Pod生命周期一致,随着Pod销毁而释放。有状态服务强依赖IP的场景下,社区大多采用IPPool的来实现IP保持,我们采用类似的将ENI和Pod关系一一对应的方式,单独管理ENI的保留和复用,保证:
内核和链路使用原有IP,加速恢复启动时间; Hold IP资源,防止耗尽导致恢复实例失败。
包含用户数据、缓存数据、备份数据三部分。其中用户数据使用云盘或OSS存储,我们将保留复用;缓存可以释放,减少资源浪费;关于备份数据,我们将定期(典型的为7天)清理的策略改为保留最后一份备份集,这样实例在恢复启动时,还可以使用暂停前的备份数据,保障数据可靠性。
在云原生生态里,可以看到越来越多的控制器基于事件驱动实现,我们也采用类似方案,采用阿里SLS作为CloudEvent通道,实现:
秒级计费:基于启停事件计算各资源真正的使用时长; 事件通知:提供了OpenAPI接口,并在控制台进行了可视化展示,做到可跟踪、可解释; 云监控告警:用户可通过云监控,设置短信、电话、邮件、webhook等告警配置。
最佳实践
提示:目前Serverless 仅有按量付费支持暂停,包年包月由于资源预购,故暂停无显著效果。点击「阅读原文」购买Serverless实例 按量付费试用
手动暂停实例
登陆云原生数仓AnalyticDB PostgreSQL产品控制台,进入实例列表页面,在要暂停的实例的更多操作里,点击"暂停实例":
下发任务后,实例会变成暂停中状态,大约2min后,实例变为已暂停状态:
手动启动实例
在实例详情页,通过"实例管理" -> "启动实例":
启停事件的查看和配置告警
在云原生数仓AnalyticDB PostgreSQL产品控制台的事件中心,通知事件类别里可查看所有的启停事件:
通过"配置告警"链接,可跳转到云监控页面,我们帮助用户自动填写了默认参数,可配置电话、短信、邮件、webHook等报警信息:
OpenAPI
http(s)://gpdb.aliyuncs.com/?Action=PauseInstance
&DBInstanceId=gp-bp***************
&公共请求参数
http(s)://gpdb.aliyuncs.com/?Action=ResumeInstance
&DBInstanceId=gp-bp***************
&公共请求参数
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>gpdb20160503</artifactId>
<version>1.0.25</version>
</dependency>
结束语
/ End /