其他
一个优秀的RPC框架,流量控制是必不可少的功能之一。在上一篇文章聊聊服务注册与发现中,我们讲了微服务架构中核心功能之一服务注册与发现。在本文中,我们将着重讲下微服务的另外一个核心功能点:流量控制。在微服务系统中,整个系统是以一系列固有功能的微服务组成,如果某一个服务,因为流量异常或者其他原因,导致响应异常,那么同样的也会影响到调用该服务的其他服务,从而引起了一系列连锁反应,最终导致整个系统崩溃。针对此种问题,我们在之前的文章微服务架构之雪崩效应有讲解过解决方案,今天我们针对方案中的限流控制来进行深入讲解。1引言限流这件事,对于微服务架构来说,最直接的就是跟系统承载能力正相关。任何系统都有它服务能力上限,如果在请求链路上,某个子服务的请求量超过其承载能力,那么该链路上的请求将无法正常响应,而此时,如果在client端对于不能返回的请求不断重试(retry),那么对原本已经超过负载上限的子服务来说,无异于雪上加霜。而这一的模式在拖垮了链路上的某个子服务后,可能会影响到其上游服务,导致影响范围持续扩大,进而让其它原本正常的服务也跟着失效,从而引起雪崩,雪崩效应会加速整个系统无法提供服务。解决这个问题的方式,就是限流。如果监测到这个现象时候(错误率增高,rt变大或者是服务负载高于其安全阈值),就直接开启某些策略,在服务负载恢复前,丢弃新的request,以使得整个系统安全可靠。这个就是限流的目的。不过,这个机制困难的不在于要挑选哪种框架或者给某个服务来使用,而是是否有办法精准掌握系统内各个子服务的负载上限,并且有能力做好整合,进一步做到自动化调节限流策略。2概念在解释什么是限流之前,我们先了解一个点,就是服务的请求上限,也可以理解为是服务承载量,即该服务支持一定时间内最多能够支持多少请求。只有将服务承载量进行量化,能够被测量,才能根据这个测量值,采取一定的对应措施。服务承载量,指的是单位时间内的处理量。北京地铁早高峰,地铁站都会做一件事情,就是限流了!想法很直接,就是想在一定时间内把请求限制在一定范围内,保证系统不被冲垮,同时尽可能提升系统的吞吐量。再以我家里的带宽为例,是联通100m的,也就是说,每一秒钟,联通提供最大100m