驾驭千级节点——揭秘PUMA大规模集群能力(三) ---- 弹性伸缩

举报
步步清风 发表于 2017/09/18 16:38:48 2017/09/18
【摘要】 前面两篇博客中介绍了PUMA大规模集群的一些背景信息,包括产品需求、业界分析和可能瓶颈点的理论分析,这里就简单说一下PUMA针对大规模集群在弹性伸缩上做的技术突破---突破大规模集群弹性伸缩、集群迁移备份等关键技术。线性扩展支持单集群500+节点,超越业界部署最大集群规模(50节点)10倍,支持海量队列、千万级别TPS。单集群规模的提升使得部署成本节省约20%,管理成本降低约30%;

1.1保证负载均衡的扩容

当前原生Kafka已经支持简单的扩容节点能力,但是有一个很严重问题,就是如果有新扩容节点加入集群,新创建的topic不会自动分配到新加入的空闲节点上,它还是以轮训的方式分配topic对应的partition到所有的节点上,这样会导致新加入的节点上的topicpartition数都偏少,导致负载失衡,进而影响集群稳定性。所以这里我们需要做的就是是:新创建的topic分区优先分配在新扩容节点上。

具体的技术细节这里就不赘述了,主要就是在创建topic时,改变其分区尤其是leader分区的创建和分配策略,然后提供新的创建topic接口和脚本命令,实现topicpartition优先分配到新加入的空闲节点上,最终实现partitionleader在所有集群节点上的均衡,有效防止集群因资源使用不均匀而出现异常。

1.2基于分区的细粒度缩容

业界目前没有缩容分区的能力,PUMA通过新增后台处理线程、添加分区数据老化及迁移流程来实现业务无感知的分区缩容能力,实现细节这里不多说,给一个整体的流程图吧

上图,在Controller内部的PartitionStateMachine状态机中增加对删除分区事件的监控,具体在zk上新增删除分区的的目录,然后对每个Topic创建删除分区事件的Listener(DelPartitionListener)。增加一个删除分区命令用于生成具体的删除分区目录,当进行删除分区时,DelPartitionListener可以在这个目录上感知有哪些分区要删除,更新controller的元数据,后台的PartitionDeleteThread就会定时检查并删除这些分区。

1.3弹性伸缩价值点

PUMA提供动态对节点、分区、集群等扩容/缩容能力,主要的价值在于:

1. 应对业务负载峰值, 因为每个节点提供的能力一定峰值限制(磁盘、网卡、Topic总数等),通过增加节点提升整体集群的能力。例如云消息服务,扩展节点才能提升增加更多的租户,满足业务需求。

2. 增加特定业务负载能力因为只增加节点并不会有分区分配到上面,通过增加分区或者迁移分区到新节点可以提升特定业务的负载能力。例如云消息服务,某个租户需要提升处理能力(5千提升到10w)以应对业务峰值(例如vmall抢购)

3. 增加云容量,接纳更多用户。例如云消息服务,一个集群所能承受的租户和Topic数是有限制的,当租户超过一定值时,单一集群性能会下降。通过扩展集群,可以接纳更多租户。

4. 减少资源的浪费,提升资源利用率。例如缩容在峰值抢购结束后,可以尽快减少资源提高资源利用率。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:hwclouds.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。