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

标签 mysql node.js concurrency kubernetes

我有一个 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/

相关文章:

php - 从日期时间 PHP 转换字符串

php - 选择查询以获取所有值以及不同值

JavaScript/node.js 从模型中获取数据

PHP 变量值不更新 MySQL 表字段?

mysql - Mysql中uniqueidentifier的替代品是什么

javascript - PBEWithMD5AndTripleDES/CBC/PKCS5Padding 的 Nodejs javascript 实现

node.js - AWS - 如何从 NodeJs Lamda 中的 token 获取用户名?

multithreading - (术语) "Contended"与 "Contented"锁

amazon-web-services - Lambda 并发数未按预期增加

go - 一段时间后停止协程