我有一个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应该崩溃,因为他们是处理数据库调用的人。
答案 0 :(得分:1)
对于可能遇到类似问题的其他人,我发现问题源于一系列问题:
虽然查询花了很少的时间来处理(53ms),但发回的结果包含每个连接实体的每一列(即如果我查询了一个包含3个连接的表,我收到了4个表的列值在回应中)。这本身就没问题,但是前端和网关正在使用GraphQL,它似乎无法同时处理如此大量的数据。
解决方案是重新构造查询,以便只检索所需的列/行(这会将行数减少到两位数)