gcloud Kubernetes API – 无法超过25 RPS的扩展,或如何找到瓶颈

80次阅读
没有评论

问题描述

最近将他们的GraphQL API从一个大型有状态的单体应用迁移到了在Google Cloud上运行的无状态设计的Kubernetes上。他们的生产集群由以下组成:
– 6个n1-standard-2实例(2个vCPU,7.5 GB内存)
– 3个实例组(地区)上的6个节点

在Kubernetes系统Pod之上,他们还有:
– 每个节点2个api-service(总共12个)
– 每个节点1个nginx服务(总共6个)
– 一个由所有api-service共享的单个redis实例(总共1个)

他们使用locust开发了一些负载测试,对集群进行GraphQL查询。测试运行了主进程和从进程,通过我们的端点运行查询以模拟用户负载。

他们尝试了不同的配置,但似乎在每秒约25个请求时遇到了瓶颈。到目前为止,他们尝试了以下方法:
– 为了确保测试不是问题的原因,他们在更多的计算机上运行了更多的从进程来运行测试(非常强大的8核机器)
– 在测试期间,节点的CPU利用率约为25%,因此他们尝试将Pod数量翻倍,但没有效果
– 他们尝试启动第二个redis实例,以查看redis是否是瓶颈 – RPS没有变化
– SQL服务器的负载非常低(CPU使用率约为15%,有足够的可用内存,没有IO瓶颈)
– 我们的Pod是100%无状态的,所以它们甚至没有挂载磁盘,没有IO瓶颈
– 内部网络流量很慢…没有网络瓶颈
– 我们的api-service容器(dotnetcore)有足够的线程可用(最大线程数默认为32768,但在“最大负载”期间只使用了5-6个线程)
– 我们的api-service代码是非阻塞的,使用了尽可能多的异步调用
– 在负载下,我们确实遇到了一些redis超时错误,但我们找不到原因。slowlog偶尔返回1个查询

因此,我们开始对为什么这个设置无法扩展更高的理论进行详细调查。我们现在开始怀疑我们的实际测试,并在那个方向上进行调查,但我们还没有找到任何可疑的地方。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据您的描述,您已经尝试了许多方法来解决扩展性问题。以下是一些可能的解决方案和建议:
1. 检查负载测试的准确性:确保负载测试的设置和配置正确,并且能够准确模拟实际用户负载。您可以使用其他工具或方法进行验证,以确保测试结果的准确性。
2. 检查Kubernetes集群的资源使用情况:使用kubectl top命令检查集群中各个节点的资源使用情况,特别是CPU和内存。确保节点没有超过其资源限制,并且没有资源瓶颈。
3. 检查Kubernetes服务配置:确保您的服务配置正确,并且没有任何限制或瓶颈。您可以使用kubectl describe service命令来查看服务的详细信息,并确保它们按预期工作。
4. 检查Redis实例的性能:尽管您已经尝试了启动第二个Redis实例,但仍然有可能存在Redis实例的性能问题。您可以使用Redis的监控工具来检查Redis实例的性能指标,并查看是否存在任何瓶颈。
5. 检查网络连接和延迟:确保网络连接稳定,并且没有任何延迟或网络瓶颈。您可以使用网络监控工具来检查网络连接的质量,并查看是否存在任何问题。
6. 检查应用程序代码:确保您的应用程序代码没有任何性能问题或瓶颈。您可以使用性能分析工具来检查应用程序的性能,并查看是否存在任何瓶颈或性能问题。

方案2

如果您的负载测试已经验证无误,并且您已经尝试了各种方法来解决扩展性问题,但仍然无法找到瓶颈所在,那么您可以考虑升级您的Kubernetes集群或增加节点的数量。这将提供更多的计算资源和容量,以支持更高的请求速率。

请注意,升级Kubernetes集群或增加节点的数量可能需要一些额外的配置和操作。在执行这些操作之前,请确保您已经了解了相关文档和指南,并且已经做好了备份和风险评估。

方案3

如果您仍然无法找到瓶颈所在,或者您的负载测试已经验证无误,但仍然无法达到预期的请求速率,那么您可以考虑与Google Cloud的支持团队联系。他们可能能够提供更多的帮助和指导,以解决您的问题。

请注意,与Google Cloud的支持团队联系可能需要一些额外的步骤和过程。在与他们联系之前,请确保您已经准备好了所有必要的信息和日志,并且已经了解了相关的支持流程和要求。

总结

在您的情况下,您已经尝试了多种方法来解决扩展性问题,但仍然无法达到预期的请求速率。建议您首先检查负载测试的准确性,并确保Kubernetes集群和服务的配置正确。如果问题仍然存在,您可以考虑升级集群或增加节点的数量。如果问题仍然无法解决,建议您与Google Cloud的支持团队联系,以获取更多的帮助和指导。

希望这些解决方案对您有所帮助!如果您有任何其他问题,请随时提问。

正文完