.NET Core延迟高峰-MySQL和Redis偶尔无法连接

时间:2018-07-17 12:01:29

标签: mysql docker asp.net-core redis .net-core

我正在Amazon Linux AMI(基于CentOS)上的 Docker 中运行 .NETCore 应用程序(在Amazon EC2实例中运行), MySQL 托管在Amazon RDS上的数据库和 Redis 托管在与.NETCore应用相同的本地计算机上

应用位于 Apache 代理

的后面

要连接到MySQL和Redis,我使用 MySql.Data StackExchange.Redis nuget程序包

问题: 应用有巨大的延迟峰值,有时会因错误而失败

Connection id "0HLFB3QH78G7P", Request id "0HLFB3QH78G7P:00000001": 
An unhandled exception was thrown by the application.
StackExchange.Redis.RedisTimeoutException: Timeout performing ZREVRANGE globalLeaderboard, 
inst: 1, queue: 7, qu: 0, qs: 7, qc: 0, wr: 0, wq: 0, in: 7, ar: 0, 
clientName: RedisConnection, serverEndpoint: 172.17.0.1:6379, keyHashSlot:1809

或者出现MySQL连接超时错误(暂时没有登录)

Graph from Grafana 在哪里可以看到峰值

我已经尝试过使用不同的Linux发行版和Nginx代替Apache,但是没有成功

这是我的RedisConnector基类,所有进行Redis操作的类都从该基类继承https://pastebin.com/aq7mDhk5

这是我的BaseDatabase基类,所有执行MySQL操作的类都从该基类继承https://pastebin.com/2639X5va

1 个答案:

答案 0 :(得分:0)

问题已解决

所有问题是因为我正在使用自定义中间件,该中间件在调用_next.Invoke()之前做了一些同步的数据库操作,并且考虑到该中间件被视为单例,因此它可能阻塞了接收线程。