【问题标题】:Cloud PubSub to App Engine memory Issue (and Should I move to DataFlow?)Cloud PubSub 到 App Engine 内存问题(我应该转移到 DataFlow 吗?)
【发布时间】:2019-04-21 21:14:18
【问题描述】:

我目前在(Google Cloud 的 App Engine)上运行一个“小型”flask 应用程序,用于集成应用程序(它侦听 webhook 并调用其他 API)。问题是我在 35 - 45 个请求后一直超过软内存限制。

组合实例的内存占用:

由于我打算将这个系统的负载增加几个数量级,这让我很担心。

对我来说似乎有三种可能的解决方案,但我不知道从哪里开始:

  1. 切换到 DataFlow:我已经在两个 App Engine 实例之间使用 Pub/Sub 来增加更高的一致性,但可能 App Engine 是错误的平台或此类平台。
  2. 修复内存泄漏:这里的问题可能是内存泄漏,但我找不到合适的工具来分析 App Engine 平台上的内存使用情况(在我的本地机器上,Python 进程的使用情况徘徊在 51MB 左右)
  3. 将系统划分为多个微服务以减少每个实例的占用空间。 (不过,维护代码库可能会更难)。

非常欢迎任何建议或经验。

【问题讨论】:

  • @snakecharmerb 这可能是个好建议。你知道当达到软内存限制时是否有某种方法可以检查正在处理的并发请求数?
  • 如果您正在考虑切换平台,Cloud Functions 可能比 DialogFlow 更适合。它有一个新的 Python 3.7 运行时。
  • @Dustin 我记得我遇到了更严格的云功能内存限制,但现在它们似乎不那么严格了(cloud.google.com/functions/quotas)。也许我应该再试一次。

标签: python google-app-engine memory out-of-memory google-cloud-dataflow


【解决方案1】:

如果您的情况确实是内存泄漏,您需要验证您的代码,因为这将始终导致您的应用程序崩溃。还有其他帖子,例如 this one,讨论了解决 Python 代码中内存问题的工具和策略。

您可能会在项目中使用 Dataflow 或 Cloud Functions。如果您在单独的问题中提供有关用例性质的更多详细信息,则可以评估这些选项是否可以更好地替代您当前的 App Engine 方法。

最后,将您的应用程序划分为多个服务可能是解决您的问题的最佳长期解决方案,因为这样可以更轻松地发现任何内存泄漏、控制成本并普遍维护您的应用程序。

App Engine 的文档中很少有页面讨论使用 App Engine [1] [2] [3] 进行微服务设计的最佳实践。适当的基于微服务的应用程序允许清晰的日志记录和监控以及提高应用程序的可靠性和可扩展性,以及其他好处 [1]。我在这里提到的这些好处对你很重要。按照 [4] 中讨论的布局,您可以单独且彼此独立地扩展您的服务。如果您认为您的一项服务对资源的要求更高,您可以调整扩展参数以便为该服务提供最佳性能。例如,您可以管理在操作期间触发的实例数量。

您可以使用应用程序元素 max_concurrent_requeststarget_throughput_utilization,您可以在 App Engine 的配置文件 app.yaml 文件中定义它们。见[5]。为了澄清,你想减少你的max_concurrent_requests

请注意,正如之前的 cmets 所讨论的,这条道路可能会导致更高的成本。如果您使用的是免费层,那么您需要检查 [4] 在此层中为您提供的可用资源。

关于你的实例内存不足的问题,如果你发现它不是由于内存泄漏,那么另一个解决方案是使用不同的instance_class,这意味着你可以实例化具有更高计算资源(成本也更高)。请参阅 [5] 和 [6]。

[1]https://cloud.google.com/appengine/docs/standard/python/microservices-on-app-engine
[2]https://cloud.google.com/appengine/docs/standard/python/designing-microservice-api
[3]https://cloud.google.com/appengine/docs/standard/python/microservice-performance
[4]https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine
[5]https://cloud.google.com/appengine/docs/standard/python/config/appref
[6]https://cloud.google.com/appengine/docs/standard/#instance_classes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2020-11-24
    • 2020-01-22
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2021-07-07
    相关资源
    最近更新 更多