Kubernetes / Node MySQL - 并发请求呈指数级减慢并导致pod崩溃

时间:2018-03-06 18:57:28

标签: mysql node.js concurrency kubernetes

我有一个Node / React应用程序,使用kubernetes集群进行部署和MySQL后端。我发现当同时访问相同的路由时,每个连续的请求变得相当慢,并且对于某些数据加载稍大的路由(例如,一个页面返回330个MySQL行),请求导致kubernetes pod崩溃,请求超时。这导致服务器错误并使站点无法使用。

请参阅以下ab测试结果,包含100个请求(10个并发): Percentage of the requests served within a certain time (ms) 50% 711 66% 850 75% 1105 80% 1199 90% 1562 95% 1763 98% 1831 99% 2102 100% 2102 (longest request)

页面上加载更多数据的类似请求:只有10个请求(10个并发): The timeout specified has expired (70007)

任何人都可以建议为什么豆荚会崩溃以及如何防止这种情况发生?老实说,即使有10个并发请求,我也不认为330行数据非常多。

群集规格应该合适: n1-standard-1 (1 vCPU, 3.75 GB memory) Total cores 3 vCPUs Total memory
11.25 GB

奇怪的是,我为应用程序的每个组件提供了3个pod;前端,网关和后端。只有前端pod正在崩溃 - 我会想到后端pod应该崩溃,因为他们是处理数据库调用的人。

1 个答案:

答案 0 :(得分:1)

对于可能遇到类似问题的其他人,我发现问题源于一系列问题:

虽然查询花了很少的时间来处理(53ms),但发回的结果包含每个连接实体的每一列(即如果我查询了一个包含3个连接的表,我收到了4个表的列值在回应中)。这本身就没问题,但是前端和网关正在使用GraphQL,它似乎无法同时处理如此大量的数据。

解决方案是重新构造查询,以便只检索所需的列/行(这会将行数减少到两位数)