美文网首页JAVA后端架构
使用并发工具实现 RPC 调用流量控制

使用并发工具实现 RPC 调用流量控制

作者: AI乔治 | 来源:发表于2018-06-08 21:39 被阅读6次

    前言

    RPC 服务中,每个服务的容量都是有限的,即资源有限,只能承受住给定的网络请求,所以,在设计 RPC 框架的时候,一定要考虑流量控制这个问题。而 Java 中,实现流量控制有很多中方式,今天说 2 种。


    Semaphore 实现流控

    代码:

    代码中,我们模拟了 100 个线程,每个线程无限调用 RPC。

    同时使用另一个定时任务,定时更新 Semaphore 可用许可为 100。

    客户端线程调用时,会尝试获取信号量,当获取成功时,才会调用调用 RPC,反之,打印失败。

    这个小程序实现了每秒钟限制 100 个请求的 RPC 的流量控制。


    AtomicInteger 实现流控

    代码:

    这段代码和上面的类似,只是使用的 API 不同,这里使用的是 CAS。通过对 CAS 递减,达到流控的目的。

    注意,这里有一个双重判断,先判断 count.get() >= 0,为什么呢?

    如果直接使用 decrementAndGet 方法,则会使用 CAS,100 个线程并发使用 CAS ,将会导致定时任务的 CAS 操作不够及时。

    所以,先判断,是否小于0 ,如果小于0了,就不必尝试 CAS,避免影响定时任务。

    在此我向大家推荐一个架构学习交流群。交流学习群号:478030634  里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多


    注:关注作者微信公众号,了解更多分布式架构、微服务、netty、等知识点。公众号:《Java烂猪皮》


    相关文章

      网友评论

        本文标题:使用并发工具实现 RPC 调用流量控制

        本文链接:https://www.haomeiwen.com/subject/tskzsftx.html