【问题标题】:Google app engine's flexible always routes traffic to the same instance?谷歌应用引擎灵活总是将流量路由到同一个实例?
【发布时间】:2019-07-02 05:32:32
【问题描述】:

使用部署在 google app engine flexible 上的集群的 node.js 应用确实可以扩展,但流量总是被发送到一个实例。

应用程序使用集群模块来利用所有 cpu,指定扩展度量的唯一方法是使用 cpu_utilisation,所以我们这样做了。

缩放工作正常,一旦达到 target_utilization 就会产生另一个实例。

但问题是,无论启动了多少个实例,相同的负载测试都需要完全相同的时间。这只能意味着流量没有在所有实例之间分配。

所以我想知道流量是否总是流向同一个实例,有什么方法可以证明或改进?

编辑:

负载测试只是一个常规的负载测试,第一个是 20 个线程,循环 4 次,每次 5 秒。

编辑 2:

更新:它现在似乎可以正确缩放。不确定我的代码库变化很大,但路由也正确完成。谷歌云平台更新可能解决了我的问题?

【问题讨论】:

  • 标准 env 实例显示了它们在 Instances 页面上服务的请求数,也许 flex 实例也是如此。
  • 你还应该描述你的负载测试
  • 不幸的是,我无法像在标准 env 实例上那样看到这些信息

标签: node.js google-app-engine load-balancing app-engine-flexible


【解决方案1】:

如果您在只有最少数量的实例时开始测试,并且在测试时扩展,则测试之间的时间不会改变,因为扩展所做的是允许应用程序将请求数量与为他们提供服务以避免 5XX 错误所需的资源。

如果您的测试正在生成 spawn 实例,那么这些实例正在工作,因为如果没有,它们会因为不需要它们而被杀死。 扩展所做的不是加快服务时间,而是匹配在任何给定点为 X 数量的请求提供服务所需的资源量,因此应用程序始终可以以相同的速度处理请求。

【讨论】:

  • 感谢您的回复,正如我所说,缩放工作正常,正如您所说,随着请求数量的增加,实例数量也在增加:缩放正常。现在的问题是,随着更多实例已经在运行,负载测试完成仍然需要相同的时间。因此,如果我在运行测试时有 x 个实例或 x + 5 个实例,时间是相同的,我看到的唯一可能性是它总是将流量路由到同一个实例。
  • 请向我提供有关测试的更多信息,以便我可以尝试进一步帮助您
  • 我将初始测试缩减为最基本的压力测试。 5 个线程同时向在云上运行的应用程序发出 post 请求。简单地说,它是一个生成各种报告的 node.js 应用程序。而且我说,多或只有1个,不会改变测试的时间,什么样的信息对调查更有帮助?
  • 这 5 个线程发出了多少请求?难道是考试不够“紧张”?您可以尝试使用 Apache 基准测试对应用程序施加压力并将您用于它的命令转发给我吗?这是用于 Apache 基准测试tutorialspoint.com/apache_bench/apache_bench_quick_guide.htm
  • 会做的,给我一些时间,我会为你提供详细的更新
【解决方案2】:

Buckors 关于缩放的解释是正确的,但是,您仍然应该看到负载测试的改进。检查您的实例是否实际获得分布式负载的一种快速方法是检查Stackdriver 日志。

你可以去

Stackdriver -> GAE 应用程序 - [服务名称]

然后您可以看到您的服务正在处理/处理的请求列表。然后,您可以通过 Cloud Console 上 App Engine -> Instances 下的各个 App Engine Flex 实例 ID 将其过滤掉,您会看到类似“aef-Service Name”的 ID -字母数字”

如果您的请求未正确路由,我建议您将问题发布到 Private Issue,Google Cloud 工程应该能够在此查看您的项目。

【讨论】:

  • 更新:它现在似乎可以正确缩放。不确定我的代码库变化很大,但路由也正确完成。更新可能解决了我的问题?
猜你喜欢
  • 2016-08-01
  • 1970-01-01
  • 2017-10-18
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
相关资源
最近更新 更多