本文分享自华为云社区《GaussDB(for MySQL) Serverless全面商用:无感弹性,极致性价比》,作者: GaussDB 数据库。
技术背景
对于现代企业级IT系统,数据库往往是作为底座一般的存在,数据库的稳定性、可靠性如果难以保障,整个系统的平稳运行将无从谈起。出于如上考量,在部署数据库资源时,客户基本都会较保守地进行配置,包括但不限于计算、内存、存储等多种资源及参数设置,通过一定程度的资源冗余来保障业务高峰时数据库的正常运行。
然而,在业务波谷期,冗余配置的数据库资源会大量闲置,成本空转,而在面对预期外的激增业务压力时,即使已经保守配置,数据库资源也有可能出现短时间的不足情况,系统整体有受损风险。
除了以上典型的企业级用户,云上还存在大量低频小规格的数据库使用场景,如研发测试环境、小程序云开发、学校的实验教学环境等。这些场景中,用户往往对数据库规格要求不高,但也有一定业务连续性要求,不能通过不断创、删按需实例解决,即使购买较低配置的包周期实例,完全无负载的时间段稍长,仍显得成本浪费问题严重。
针对这些客户场景及痛点问题,Serverless数据库无疑是很好的解决方案。数据库集群资源将随客户业务负载动态弹性扩缩,需要时多用,不需要时少用甚至不用,真正做到了负载与资源动态匹配的按量付费模式,助力企业级用户进一步降本增效,同时普惠万千中小客户,彻底打破云数据库的使用门槛。
特性价值
(1)业务无感的秒级弹性:面对负载突增或预期外压力,纵向扩容秒级完成,业务无感知;支持横向扩容,结合proxy负载均衡和高性能全局一致性能力,应用侧可平滑享受弹出的只读来分担流量压力,无需人工介入或业务改造。
(2)负载与资源动态匹配,极致性价比:数据库实时性要求高,但使用需求不稳定,峰均比高的场景,或业务平常整体负载较低,但偶有大幅波动或预期外负载的场景。此类场景下,相比固定规格,serverless实例平均可降低使用成本超30%,特定情况甚至有80% +的成本降低。
实现原理
- Buffer Pool快速弹性伸缩,降低伸缩过程对业务的影响
- 分阶段采用多线程并行处理Buffer Pool伸缩中的页面处理和多个哈希表重新映射。充分利用并行能力,减少Buffer Pool扩缩容时间。
- 针对扩缩容中涉及到的页面和哈希表对应的内存,采用在临界区外预申请和延后释放等方式,缩短临界区时间,减少对业务影响的时间。
- Buffer Pool Chunk的初始在临界区外进行,并且在临界区内采用O(1)时间复杂度的方式加入到空闲链表,缩短临界区时间,减少扩容场景对业务影响的时间。
- 通过遍历事务链表重构锁记录哈希表,避免重构锁记录哈希表时出现的大量无效遍历,缩短重构锁记录哈希表的时间。
- 高性能全局一致性,横向拓展对业务平滑
GaussDB(for MySQL)提供基于内核层的高性能全局一致性服务,使得客户在使用横向拓展的serverless集群时,无需担心弹出只读与主节点的一致性问题,保证发往集群任意副本的读请求都可以获得强一致性的结果。
计算节点间通过高性能网络做LSN同步,当业务入口到Proxy层,Proxy会将读请求发送到只读节点,此时若读节点发现LSN落后于主节点,会等待当前的LSN推进到主机最近的LSN位点后,再读取最新数据返回,允许等待的超时时间和超时分发策略用户可设置,真正做到满足各个用户实际场景的高性能全局一致性。
业务场景/流程
- 购买Serverless实例
- 进入购买云数据库 GaussDB(for MySQL)页面。
- 在"服务选型"页面,计费模式选择"Serverless"。
- 按需选择算力范围即可,如需横向扩展能力,可在创建完成后设置只读节点数量范围。
- 修改Serverless配置
购买Serverless实例后,可根据需要修改Serverless算力的最小值和最大值,包括设置集群中允许横向拓展的只读节点上限,当只读节点已经纵向扩展到设定规格上限,集群中现有的只读节点的CPU使用率或内存使用率仍然满足纵向扩展的条件,则会自动触发只读节点的横向扩展。
总结
GaussDB(for MySQL) Serverless集群,可根据客户业务实时负载,集群资源秒级动态弹降,结合内核深度优化,在各种场景下做到对上层业务透明无感。针对负载峰均比高或负载不可预测的企业级客户,Serverless实例自动弹性扩缩,节省资源浪费同时助力运维效率提升;针对个人开发者、学生实验等中小客户,Serverless实例具备极致性价比,真正将云原生技术普惠万千用户。
附录
- 本文作者:华为云GaussDB(for MySQL)团队
- 华为云GaussDB(for MySQL)官方产品文档:https://support.huaweicloud.com/gaussdbformysql/index.html