我有一个 Node/React 应用程序,使用 kubernetes 集群进行部署和 MySQL 后端。我发现,当同时访问同一路由时,每个连续的请求都会变得相当慢,并且对于某些数据负载稍大的路由(例如,一页返回 330 个 MySQL 行),这些请求会导致 kubernetes pod 崩溃并且请求超时。这会导致服务器错误并使网站无法使用。
请参阅下面的 100 个请求(10 个并发)的 ab 测试结果:
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)
任何人都可以建议 Pod 崩溃的原因以及如何防止这种情况发生吗?老实说,即使有 10 个并发请求,我也不觉得 330 行数据太多。
集群规范应该合适:
n1-standard-1 (1 vCPU, 3.75 GB memory)
Total cores
3 vCPUs
Total memory<br/>
11.25 GB
同样奇怪的是,我为应用程序的每个组件都有 3 个 pod;前端、网关和后端。只有前端 Pod 崩溃了 - 我本以为后端 Pod 应该崩溃,因为它们是处理数据库调用的。
最佳答案
对于可能遇到类似问题的其他人,我发现该问题源于以下问题的组合:
虽然查询花费了极少的时间来处理(53ms),但发送回的结果包含每个连接实体的每一列(即,如果我查询具有 3 个连接的表,我会收到 4 个表的列)在响应中)。就其本身而言,这很好,但是前端和网关使用的是 GraphQL,它似乎无法同时处理如此大量的数据。
解决方案是重新构造查询,以便仅检索所需的列/行(这将行数减少到两位数)
关于mysql - Kubernetes/Node MySQL - 并发请求呈指数级减慢并导致 pod 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49138098/