前言
如今在大数据时代,面对如今规模数据体量快速增长的一个阶段,HDFS单集群模式已经无法支撑更加平稳高效的数据服务能力。多集群联合模式逐渐成为一种新的架构尝试,笔者所在公司亦是如此。我们内部目前采用了社区的RBF(Router-based Federation )方案来做统一的数据服务。最近我们在尝试解决一个棘手的问题:多用户的RPC请求隔离问题。这个问题其实在原始HDFS单集群模式本身也是存在的,但是在多集群模式下这个问题只会变得更为严重。多集群模式下,更多的用户数据被写入到集群,而这也意味着更多的用户请求将会被处理。那么这中间是可能出现一些异常的用户发送大量的请求拖慢了NameNode,导致其他正常的用户的请求处理被影响到。因此在这里,笔者想聊聊在多集群模式下如何做这种RPC请求的限流管控。
RPC请求限流的核心本质
限流这个词我们在日常生活中其实也经常会听到,比如手机流量用得过多了,有可能会受到一定的网络限速。但是我们平常更多的限速说的只是限制速率,但是在分布式系统中限流的概念要比限速要更宽泛一点。用一句通俗的话来解释RPC的限流:对RPC请求流量的限制。
既然我们说的是对RPC请求流量的限制,我们从限制对象的角度出发来做限制,有下面3种类型的限制方法:
- 从RPC请求的发起者做限制,就是按照用户做限制。
- 对请求操作类型做限制,就是按照操作类型做限制。
- 同时结合用户和操作类型做限制
按照用户做限制其实具体再细分又可以分成下面两种:
- 限制bad user的异常请求行为
- 保证重要用户的正常请求行为
而按照请求操