问题现象:
服务器无报警,但.NET站点、Java站点接口的请求时快时慢
排查&分析:
1、查看站点CPU使用率在10~20%,计算密集但还算正常(4核的ECS配置单个进程CPU使用率需控制在25%以下)
2、查看Java站点的trace_log,发现发生慢的请求是调用.NET的服务接口占用时间很长,确定是.NET站点的问题
3、对.NET站点集群中的每一台单独模拟请求,发现有几台ECS站点请求快,有几台ECS站点请求慢
4、陆续重启所有站点后,那几台ECS站点过一会儿之后依旧请求慢
5、查询API请求日志,发现今天有较多租户提交考试
![](https://img.haomeiwen.com/i1636821/3149548c8a855507.jpg)
6、考试为计算密集型的接口,有可能是因为有较多的请求队列积压,导致单台服务器的吞吐率变慢。目前应用程序池的队列长度都是设置为5000
7、研究IIS服务器配置优化,了解站点的最大并发连接数、应用程序池的队列长度等工作机制原理
最大并发连接数 = 队列长度 + IIS最大并发工作线程数
最大并发连接数系统默认配置是无限大
最大并发工作线程数是未知的、不可配置的,按照之前压测的经验,单台ECS能并发同时处理的请求数(tps)一般只有小几百。
推断:以目前的配置,会导致服务器请求队列积压较多,新的请求响应需要等待较长时间。
方案:
1、优化IIS服务器配置:
a) 调整队列长度回默认值1000;
b) 调整最大并发连接数为1500 = 1000 + 500tps,超过的请求将直接返回503(此处返回503的情况与队列长度达到上限时的503现象的不同点在于:应用程序池不会被停止,只是拒绝新的请求);
c) 调整应用程序池的最大工作进程数为2,提高多核CPU的利用率。后续观察各台不同配置的ECS的CPU使用率再做调整。
2、通用SLB负载均衡配置,在考试服务还未从.NET服务中独立出来前(考试Java独立服务重构将在V2.20.0上线),临时将考试接口与其它接口的请求服务器分开,实现临时的考试独立服务
后续方案:
3、研究解决混合云租户的白名单限制方案,以方便服务临时水平伸缩
4、研究阿里云动态伸缩方案,实现考试、直播等并发不均衡服务的服务器动态伸缩
5、继续推进目前.NET单块应用的Java独立服务重构,避免单块应用一起死的现象
4、继续深入研究微服务框架,实现更多的服务治理功能(服务监控、链路监控、限流、升降级等)。初步考虑是Java启用另外的微服务框架(应该是使用阿里云的企业级分布式应用服务产品 EDAS),不受异构语言的限制
网友评论