| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> HDFS RPC限流方案实践探索 -> 正文阅读 |
|
[大数据]HDFS RPC限流方案实践探索 |
前言在前面的一篇关于分布式集群下的限流方案文章里,笔者阐述了一种在HDFS集群里的RPC限流架构。其间也提到了很多关于分布式限流架构里的关键要素,包括用户区分,分级队列的概念等等。不过上次文章更多偏向于理论原理篇,本文笔者将结合实际生产环境的特点,来给大家讲讲如何真正将限流方案实施到生产集群,并能够达到预期的效果。 HDFS RPC限流方案这里要首先聊聊笔者目前集群所将要采用的HDFS RPC限流方案。和上篇文章所设计的略有不同 ,在最新的方案设计里面暂时不考虑Router的服务。这里主要出于2点理由:1)我们目前单Router的处理速度非常快,很少出现请求积压的情况,这样不太容易触发到FairCallqueue的限流效果。2)Router服务目前不支持refreshCallqueue的动态刷新功能。FairCallqueue的功能需要不断进行调参优化改进,如果不支持动态刷新的功能,将会带来比较高的部署成本。 所以目前我们是完全在下游NameNode做的限流设计,限流的结构依然采用的是社区比较成熟的FairCallqueue的功能。FairCallqueue的功能在设计上与我们的使用场景极为吻合,再加上社区在此功能上进行了不断地完善,使得集群admin管理员能够更加方便,灵活地在NameNode上使用此功能。FairCallqueue目前不仅对于其内部priority queue的数量能进行配置化设置之外,还能够对RPC优先级设置的阈值进行调整。但同时这里指出一点,FairCallqueue这种过于灵活的参数配置,让集群管理员一开始不知道如何精确地对FairCallqueue功能进行调参。 出于上面精确调参的问题,笔者在FairCallqueue内部多实现了一个admin的管理命令,来能够动态调整user RPC的priority。这里admin设置的user priority会覆盖掉由FairCallqueue内部算法算出的priority结果。这样能够避免由于参数配置不准确导致部分用户的application被限流处理。 通过上面admin命令的改造再结合HDFS本身的refreshCallqueue功能,笔者设计了下面新的在NameNode端的限流方案:
上述架构如果在FairCallqueue参数配置完美的情况下,大大利用其分级队列的原理,当然能达到比较好的限流效果,但是在运行过程中,完美还是得面临逐步调参的过程。这里另外一个关键的问题来了:我们如何来一步步准确地对FairCallqueue来调参呢? 分级RPC queue的调参我们经常调侃调参是一门艺术,参数调得准确与否只有一步一步实践了才知道。
从笔者的实际使用经验来说,我们采用的一个原则是逐步调整的原则,所以在一开始的时候建议采用的是一种偏向保守的参数设置。在queue数量的设置上,3到4个优先级queue的设置笔者个人建议比较适合,基本达到区分出高优先级,中优先级和低优先级的三级队列的设置即可。 其次是priority设置的条件阈值,简单来讲就是我们如何判定某个用户的RPC应该的高priority或者低priority的。这里我们可以参考默认FairCallqueue的配置,将超过50%的当前时段的RPC量的用户列为最低priority的用户。然后前面2个queue的priority的切分阈值可调整为20%或者30%这样的比例。 最后是RPC priority queue的处理权重设置。这里的处理权重指的是NameNode在每次处理周期内处理各个RPC queue请求的数量比。按照正常情况,高优先级queue的RPC请求理应被处理地更多,而低优先级的queue的请求应被更少地处理。当然我们可以将高优先级的queue的权重设置的远高于低priority。但是基于一开始的保守调参的原则,笔者建议在一开始调成略偏向于高优先级的权重设置即可,比如6:5:4这样的设置,意为NameNode在处理的周期内,会处理掉6个高优先级queue RPC,5个中优先级的queue的RPC和4个低优先级queue的RPC。当然这个权重比例的设置在经过实践运行后更加偏向于高优先级的queue。 分级RPC queue的insight上节的分级队列调参只是初步保守的参数设置,并不是笔者所谓的"黄金配置"。因为在后面实际生产集群的使用过程中,我们肯定会看到是否那些真正的bad user被限制住了,是否高优先级queue的用户RPC被正常地处理。这里其实牵扯到的就是分级RPC queue的insight了,如果我们只有了解了FairCallqueue内部实际的处理情况后,才好对现有的配置参数做进一步地调整优先。 不过好在目前社区FairCallqueue对外已经暴露了很多的内部指标metric来帮助用户了解实际的Callqueue的运行状况,这里主要有下面两个方面的指标: 与分级queue相关的指标:
这部分的metric如下所示:
与用户相关的指标:
此部分的信息通过FairCallqueue的jmx可以看到,样例如下所示:
通过上述FairCallqueue的metric,我们能了解它里面的一个insight,继而可以帮助我们不断优化调整FairCallqueue的参数,最终发挥出FairCallqueue的限流功效。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 20:32:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |