Google App Engine 上的并发请求处理

2023-12-04

我正在几个平台上尝试并发请求处理。

该实验的目的是有一个broad衡量某些选定技术的能力界限。

我在我的机器上设置了一个 Linux 虚拟机,其中包含一个基本的 Go http 服务器(vanillahttp.HandleFunc of the http默认包)。 然后服务器会计算出一个修改后的版本fasta将线程和进程限制为 1 的算法,并返回结果。 N 设置为 100000。 该算法运行时间大约为 2 秒。 我用的是sameGoogle App Engine 项目的算法和逻辑。

该算法是使用相同的代码编写的,只是处理程序设置完成init()代替main()根据 GAE 要求。

在另一端,Android 客户端生成 500 个线程,每个线程并行发出一个GET请求给fasta计算服务器,请求超时5000毫秒。

我原本期望 GAE 应用程序能够扩展并回复每个请求,而本地 Go 服务器在处理 500 个请求中的某些请求时会失败,但结果却相反: 本地服务器在超时范围内正确回复每个请求,而 GAE 应用程序只能处理 500 个请求中的 160 个。其余请求超时。

我检查了 Cloud Console,确认已生成 18 个 GAE 实例,但绝大多数请求仍然失败。

我认为大多数失败的原因是每个 GAE 实例的启动时间,所​​以我立即重复了实验,但得到了相同的结果:大多数请求超时。

我原本期望 GAE 能够扩展以适应所有请求,并相信如果单个本地虚拟机能够成功回复 500 个并发请求,GAE 也会做同样的事情,但事实并非如此。

GAE 控制台不会显示任何错误并正确报告传入请求的数量。

这可能是什么原因造成的?另外,如果单个实例可以仅凭借 goroutine 来处理我的机器上的所有传入请求,那么为什么 GAE 需要扩展这么多呢?


为了在最小化成本方面实现最佳使用,您需要配置一些东西app.yaml:

  • Enable threadsafe: true-实际上它来自Python配置不适用于 Go,但我会设置它以防万一。
  • Adjust scaling section:
    • max_concurrent_requests- 设置为最大 80
    • max_idle_instances- 设置为最小值 0
    • max_pending_latency- 将其设置为自动或更大min_pending_latency
    • min_idle_instances- 将其设置为 0
    • min_pending_latency- 设置为更高的数字。如果您可以接受 1 秒延迟,并且处理程序平均需要 100 毫秒来处理,请将其设置为 900 毫秒。

那么您应该能够在单个实例上处理大量请求。

如果您愿意为了响应能力和可扩展性而烧钱 - 增加min_idle_instances & max_idle_instances.

您还对 VM 和 GAE 使用类似的实例类型吗? GAE F1 实例不太快,并且更适合异步任务,例如使用 IO (数据存储、http 等。)。您可以配置使用更强大的实例,以更好地扩展计算密集型任务。

您还在付费帐户上进行测试吗?免费帐户有配额,如果 AppEngine 认为如果连续使用相同模式负载将超过每日配额,则 AppEngine 将拒绝一定比例的请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google App Engine 上的并发请求处理 的相关文章

随机推荐

  • 如何禁用控制台回显

    我正在编写一个命令行程序 它利用 println 以非常特定的格式显示文本 我遇到的问题是 每次我要求用户通过 Scanner nextLine 输入某些内容时 控制台都会自动在控制台中回显他们的输入 有没有办法禁止控制台立即显示用户输入的
  • 将sql数据库中的ascii撇号替换为真正的撇号

    我正在使用参数化查询将经典 asp 转换为 Net 我的问题是 在我的经典应用程序中 我会用 ASCII 等效项替换撇号 39 现在我想用真正的撇号替换数据库中的该值 我不确定执行此操作的语法应该如何 我可以找到 39 但我不知道如何更换
  • Object.keys 迭代导致 Typescript 错误“元素隐式具有 'any' 类型,因为索引表达式不是 'number' 类型”

    我正在尝试显示返回对象的 API 调用的结果 为了制作 map 我使用了Object keys以便它显示结果 我正在学习 Typescript 的新知识 并尝试在个人项目中进行练习 但我被这个问题难住了 我正在进行 API 调用并取回一个对
  • C# 正则表达式仅在标签外部替换字符串

    我有一个字符串 它代表 xml 的一部分 string text word foo
  • Python webbrowser.open() - 设置 new=0 在同一浏览器窗口中打开不起作用

    给出这个 python 代码 import webbrowser webbrowser open http slashdot org new 0 webbrowser open http cnn com new 0 我希望打开浏览器 加载第
  • C++中重载new和delete

    HI All 我试图重载 new 和 delete 以修复项目中的内存泄漏问题 但遇到了一些编译错误 目前这段代码有点破旧 这是我的 hdr 文件 include
  • 小计 <> 行总和

    我是 DAX 的新手 所以请耐心等待 用最简单的术语来说 我想将欧洲以外的所有区域的度量金额加倍 然后将结果相加 以下是 DAX 的一些示例 DEFINE measure Fact test CALCULATE IF SELECTEDVAL
  • Web 服务与 WCF 服务

    它们之间有什么区别 我什么时候会选择其中一种而不是另一种 这个答案基于一篇不再存在的文章 文章摘要 基本上 WCF 是一个服务层 允许您构建可以使用各种通信机制进行通信的应用程序 有了它 您可以使用点对点 命名管道 Web 服务等进行通信
  • Git 强制推送到 github 的大文件已被删除且不再跟踪而被拒绝

    所以我对 git 还很陌生 并且遇到了一些麻烦 我的本地副本有许多与我的 github 存储库冲突的新更改 但是我的本地副本是正确的 我只想覆盖远程存储库 本地和远程副本有 2 次和 3 次提交的差异 我还意外地将一些非常大的 csv 文件
  • DataGridView 加载速度非常慢。如何优化DataGridView中行的添加?

    datagridview 加载速度非常慢 我该如何优化它 datagridview 有 4 5 千行 我必须根据几个参数动态生成 datagridview 来自数据库的数据 列数 我必须从数据库中的表 id name contact 垂直生
  • 我可以将 JRadioButton 添加到 JTable 中吗

    我尝试添加JRadioButton into JTable通过使用CellEditor and CellRenderer 但我无法添加JRadioButton into JTable 我正在使用 NetBeans 和后端 MySQL 请帮我
  • 如何通过分隔符将数组对象分成两个(或二维数组)

    我想分割一个数组 如下所示 let arrayToSplit Europe France Paris Europe Italy Rome America USA Washington America Canada Ottawa Into l
  • Hive 中的减速器选择

    我有以下记录集来处理 1000 1001 1002 to 1999 2000 2001 2002 to 2999 3000 3001 3002 to 3999 我想使用HIVE处理以下记录集 以便reducer 1将处理数据1000到199
  • 不能从静态上下文中引用非静态方法(方法名())。为什么?

    我对此真的很困惑 我有2节课 Club and 会员资格 在会员资格中我有方法 获取月份 在俱乐部我有加入月份 它采用参数 月份 因此用户输入月份 然后我希望它返回在该特定月份加入的会员资格 我试图从类 Club 中调用 getMonth
  • 方法“getElementsByClassName”无法识别

    我想启动 Windows 资源管理器并登录网站 登录后我想单击注销文本链接 但我收到此错误 Method invocation failed because mshtml HTMLDocumentClass doesn t contain
  • 两个相同的文件根据 C# 的编写方式具有不同的文件大小

    我正在尝试将对象数组序列化为 JSON 格式写入文件 我正在尝试以两种不同的方式编写它 如下所示 ToSerialise Obj new ToSerialise 10 for int i 0 i lt 10 i Obj i new ToSe
  • Django 在文件末尾添加一些奇怪的字符

    当我将文件提交到 django 服务器并且文件名存在于目录中时 我遇到了问题 Django 不会覆盖该文件 但会在名称末尾添加一些字符 我怎样才能添加字符而不是 Django 我的 model py 看起来像这样 class UpLoadF
  • 使用 ggplot2 绘制不同长度的向量

    我有 8 个不同长度的数据向量 MAP 分数 评级的文档数量不同 从 80 到 500 如何将它们读入 R 并在 ggplot2 中将它们绘制为相同的长度 将它们视为从 0 到 1 范围内的不同数量的数据点 它们应该按比例缩小 放大 以便它
  • OCaml 中函数以相反顺序返回列表

    我想从文件中读取一些数字 将它们放入列表中 最后将它们显示在屏幕上 Numbers txt 目前有2 3 5 7 11但是作为输出我得到11 7 5 3 2 unit 为什么会发生这种情况 let rec int list from sb
  • Google App Engine 上的并发请求处理

    我正在几个平台上尝试并发请求处理 该实验的目的是有一个broad衡量某些选定技术的能力界限 我在我的机器上设置了一个 Linux 虚拟机 其中包含一个基本的 Go http 服务器 vanillahttp HandleFunc of the