天道酬勤,学无止境

拥堵

一次Dubbo拥堵的分析

文章内容结构 第一部分介绍生产上出现Dubbo服务拥堵的情况,以及Dubbo官方对于单个长连接的使用建议。 第二部分介绍Dubbo在特定配置下的通信过程,辅以代码。 第三部分介绍整个调用过程中与性能相关的一些参数。 第四部分通过调整连接数和TCP缓冲区观察Dubbo的性能。 一、背景 生产拥堵回顾 近期在一次生产发布过程中,因为突发的流量,出现了拥堵。系统的部署图如下,客户端通过Http协议访问到Dubbo的消费者,消费者通过Dubbo协议访问服务提供者。这是单个机房,8个消费者3个提供者,共两个机房对外服务。 在发布的过程中,摘掉一个机房,让另一个机房对外服务,然后摘掉的机房发布新版本,然后再互换,最终两个机房都以新版本对外服务。问题就出现单机房对外服务的时候,这时候单机房还是老版本应用。以前不知道晚上会有一个高峰,结果当晚的高峰和早上的高峰差不多了,单机房扛不住这么大的流量,出现了拥堵。这些流量的特点是并发比较高,个别交易返回报文较大,因为是一个产品列表页,点击后会发送多个交易到后台。 在问题发生时,因为不清楚状态,先切到另外一个机房,结果也拥堵了,最后整体回退,折腾了一段时间没有问题了。当时有一些现象: (1)提供者的CPU内存等都不高,第一个机房的最高CPU 66%(8核虚拟机),第二个机房的最高CPU 40%(16核虚拟机)。消费者的最高CPU只有30%多

2021-03-27 00:17:54    分类:博客    Dubbo   拥堵   netty   Java与JVM