【问题标题】:Kubernetes / Node MySQL - Concurrent requests exponentially slowing and causing pod to crashKubernetes / Node MySQL - 并发请求以指数方式减慢并导致 pod 崩溃
【发布时间】:2018-03-06 18:57:27
【问题描述】:

我有一个使用 Kubernetes 集群进行部署和 MySQL 后端的 Node/React 应用程序。我发现当同时访问相同的路由时,每个连续的请求都会变得相当慢,并且对于一些数据负载稍大的路由(例如,一页返回 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)

谁能建议豆荚崩溃的原因以及如何防止这种情况?老实说,我觉得 330 行数据并不多,即使有 10 个并发请求。

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

同样奇怪的是,我为应用程序的每个组件都有 3 个 pod;前端、网关和后端。只有前端 pod 崩溃了 - 我会考虑后端 pod 是否应该崩溃,因为它们是处理数据库调用的那些。

【问题讨论】:

  • 也许你在 nodejs 上达到了 RAM 限制

标签: mysql node.js concurrency kubernetes


【解决方案1】:

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

虽然查询花费了极少的时间来处理(53 毫秒),但返回的结果包含每个连接实体的每一列(即,如果我查询具有 3 个连接的表,我会收到 4 个表的列在回复中)。这本身很好,但是前端和网关都在使用 GraphQL,它似乎无法同时处理如此大量的数据。

解决方案是重新构建查询结构,以便只检索所需的列/行(这将行数降低到两位数)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2020-04-21
    • 2022-10-13
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多