当前位置: 首页 > 面试题库 >

Google App Engine可以用于大规模并行计算吗?

虞高雅
2023-03-14
问题内容

在大约2011年3月,我测试了GAE(Java版本)作为大规模并行计算的潜在平台。该日期很重要,因为GAE一直在发展。我发现该应用程序被有效地限制在大约43.2倍的计算吞吐量上。
是否有人成功使用GAE进行大规模并行计算或获得了更高的计算增益? 出于这个问题的目的,我将任意定义大规模并行计算,以表示大于1000倍的计算吞吐量。

我使用了一个桌面客户端,该客户端实例化了多个线程来访问URL。我正在使用GAE任务队列。无论是数据存储区还是HTML,该应用程序所需的输入量很少,产生的输出也很少,因为它旨在评估计算吞吐量。

由于通常建议将GAE任务保持在1秒以下(尽管目前尚不清楚此建议是否适用于任务队列任务),因此我尝试了各种排列方式。我的一些结果包括在这里。如您所见,即使执行0.8秒的任务(与1秒以下的建议一致),吞吐量也达到43.2倍的峰值。

Elapsed    Tasks        SecondsOf     Total   Gain
Seconds    Requested    WorkPerTask   Work

FLT (FEW LARGE TASKS)
15         72           1             72      4.9
103        72           20            1440    14.0
1524       72           400           28800   18.9

MST (MANY SMALL TASKS)
53         1000         0.8           800     15.1
63         2000         0.8           1600    25.4
127        4000         0.8           3200    25.2
313        4000         0.8           3200    10.2
258        8000         0.8           6400    24.8

177        8000         0.8           6400    36.2 (Have 5% of tasks do nothing.)

49         2000         0.8           1600    32.7 (Have 1% of tasks do nothing.)
37         2000         0.8           1600    43.2 (Have 5% of tasks do nothing.)
42         2000         0.8           1600    38.1 (Have 10% of tasks do nothing.)
249        2000         0.8           1600    6.4  (Have 50% of tasks do nothing.)

MLT (MANY LARGE TASKS)
6373       1000         200           200000  31.4
380        200          60            12000   31.6

请注意,对于“任务队列”任务,建议不要超过600秒,因此,我为了达到安全性考虑,最高只能达到400秒。有些任务无能为力的情况是降低每个任务必须完成的平均工作量,以影响整个Google的“会计”。因此,每个2000个任务有0.8秒的工作时间,但是还有222个任务没有工作,这意味着10%的工作没有工作。

编辑:@PeterRecore,我正在测量吞吐量增益,它是totalWorkInSeconds除以elapsedTimeInSeconds,并且在客户端进行测量。客户端发出请求并测量直到所有GAE任务完成为止的经过时间,这由每个发送一个很小的响应表示。我试图找出GAE的当前形式是否可用于创建实现高吞吐量增益值的应用程序。在2011年3月,似乎不太可能。今天怎么样?以及如何完成或您实际如何进行?达到了什么水平的吞吐率?就像我说过的,数据存储区的使用是最少的,并且由每个任务组成,每个任务在完成任务后都会写入一个很小的对象。每个任务循环为与secondsOfWorkPerTask成比例的整数。GAE分解实例是问题的一部分。Google告诉人们他们喜欢次秒级的任务,从而使这个问题更加恶化。如果我有大量任务,则可以缓解此问题,因为实例化所使用的周期数所占的百分比较小。


问题答案:

App Engine实际上并不是为用作大量计算任务的后端而设计的-
它是为快速高效地服务可伸缩网站(以及API)而设计的。它所做的并没有围绕您要实现的目标进行优化



 类似资料:
  • 如果我们使用azure connect DirSync与azure active directory进行本地AD同步,并且没有选择密码同步,那么 > 部署是针对大规模用户还是批量用户? 用户迁移到Azure后,他们是否必须手动更改 凭据才能登录到他们的Office 365帐户(他们现在和之后使用他们的电子邮件凭据登录 Office 365 Azure AD, 他们将使用他们的AD凭据登录? 是否可

  • 校验者: @文谊 翻译者: @ゞFingヤ 对于一些应用程序,需要被处理的样本数量,特征数量(或两者)和/或速度这些对传统的方法而言非常具有挑战性。在这些情况下,scikit-learn 有许多你值得考虑的选项可以使你的系统规模化。 6.1. 使用外核学习实例进行拓展 外核(或者称作 “外部存储器”)学习是一种用于学习那些无法装进计算机主存储(RAM)的数据的技术。 这里描述了一种为了实现这一目的

  • 9.3 并行计算* 计算思维是建立在计算机的能力和限制之上的,计算机科学家的任务是尽量发扬计算机 的能力,避开计算机的限制。传统的计算概念是在计算机发明之初形成的,就是由一个处理 器按顺序执行一个程序的所有指令。并行计算则突破了这种限制,试图让多个处理器同时做 事情。并行计算的好处是显然的,想想一个人吃一锅饭与一百个人同时吃一锅饭的差别,就 能理解并行计算的威力。 可以在不同层次上讨论并行。最底层

  • MXNet后端会自动构建计算图。通过计算图,系统可以知道所有计算的依赖关系,并可以选择将没有依赖关系的多个任务并行执行来获得计算性能的提升。例如“异步计算”一节的第一个例子里依次执行了a = nd.ones((1, 2))和b = nd.ones((1, 2))。这两步计算之间并没有依赖关系,因此系统可以选择并行执行它们。 通常,一个运算符会用到所有CPU或单块GPU上全部的计算资源。例如,dot

  • Java标准库中的大多数集合(如ConcurrentLinkedQueue、Concurrent LinkedDequeue和ConcurrntSkipListSet)的文档都附带以下免责声明: 注意,与大多数集合不同,size方法不是一个恒定时间的操作。由于这些集合的异步性质,确定元素的当前数量需要遍历元素,因此如果在遍历过程中修改了集合,可能会报告不准确的结果。 那是什么意思?为什么他们不能保