【问题标题】:How Google App Engine limit Python?Google App Engine 如何限制 Python?
【发布时间】:2011-05-28 16:04:29
【问题描述】:

有人知道,GAE 如何限制 Python 解释器吗?例如,它们如何阻止 IO 操作或 URL 操作。

共享主机也以某种方式做到这一点?

【问题讨论】:

  • 好吧,首先,你只能使用 Python 2.5
  • 是的。只有2.5。但是“沙盒”在内部是如何工作的呢?
  • OP 正在寻找 如何 AppEngine 阻止/限制 python 访问操作系统,而不是 什么 他们限制。我认为@Anton 想知道 Google 的技术/方法来构建像 GAE 使用的沙箱。
  • 啊,好的,谢谢,这更有意义。

标签: python hosting shared-hosting


【解决方案1】:

沙盒“在内部工作”由他们拥有特殊版本的 Python 解释器。您运行的不是标准的 Python 可执行文件,而是经过特别修改以在 Google App 引擎上运行的一个。

更新:

不,它不是普通意义上的虚拟机。每个应用程序都没有完整的虚拟 PC。可能会进行一些虚拟化,但 Google 并没有具体说明多少或什么。

操作系统中的进程通常已经限制了对操作系统其余部分和硬件的访问。谷歌对此进行了更多限制,您将获得一个环境,您只能读取文件系统的非常特定部分,而根本不能写入,您不能打开套接字,也不能进行系统调用等.

不过,我不知道每个限制在 OS/Filesystem/Interpreter 的哪个级别实现。

【讨论】:

    【解决方案2】:

    来自 Google 的网站:

    • 一个应用程序只能访问其他 通过 Internet 上的计算机 提供 URL 获取和电子邮件 服务。其他电脑只能 通过使连接到应用程序 HTTP(或 HTTPS)请求 标准端口。

    • 应用程序无法写入 文件系统。一个应用程序可以读取文件, 但只有文件与 应用程序代码。该应用程序必须使用 App Engine 数据存储区、内存缓存或 所有数据的其他服务 在请求之间持续存在。

    • 应用程序代码仅在 响应网络请求,排队 任务或计划任务,并且必须 30内返回响应数据 无论如何秒。一个要求 处理程序不能产生子进程或 响应后执行代码 已发送。

    除此之外,您还被 Python 2.5 困住,无法使用任何基于 C 的扩展,在某些情况下,更新版本的 Web 框架将无法工作(再次使用 Python 2.5)。

    您可以阅读整篇文章What is Google App Engine?

    【讨论】:

    • 每个应用都使用单个虚拟机吗?
    • @Anton 我不确定具体的实现细节,但您可以将沙盒想象成一个虚拟机。
    【解决方案3】:

    我找到了这个网站

    这有一些相当不错的信息。你到底想做什么?

    Here

    新鲜!

    看这里:http://code.google.com/appengine/docs/python/runtime.html

    您的 IO 操作限制如下(禁用模块除外):

    App Engine 会记录应用程序在一个日历日内使用的每种资源的数量,并在该数量达到应用程序的资源配额时认为资源已耗尽。日历日是从太平洋时间午夜开始的 24 小时时段。 App Engine 会在每天开始时重置所有资源测量值,但始终表示正在使用的数据存储存储量的存储数据除外。

    当应用消耗所有分配的资源时,该资源将变得不可用,直到配额被补充。这可能意味着您的应用在配额被补充之前将无法运行。

    应用程序可以通过调用配额 API 来确定当前请求到目前为止已经占用了多少 CPU 时间。这对于分析 CPU 密集型代码以及寻找可以提高 CPU 效率以节省更多成本的地方很有用。您可以测量整个请求使用的 CPU,也可以在一段代码前后调用 API,然后减去以确定这两点之间使用的 CPU。

    资源|免费默认配额|计费启用默认配额 Blobstore |存储的数据| 1 GB| 1 GB 免费;没有最大值 资源 |启用计费|默认配额 每日限额|最大速率 Blobstore API 调用 |140,000,000 次调用| 72,000 次通话/分钟

    嗯,我的桌子不太好,但希望仍然可读。

    编辑:好的,我明白了。但是先生,您不必使用“f”字。 :) 你知道,这有点像整个“教人钓鱼”的场景。谷歌是我经常问的人,这就是我在这里回答问题的原因。

    再次编辑:好的,在评论被采纳之前这更有意义。所以我又去回答了这个问题。希望对你有帮助。

    【讨论】:

    • 您需要了解问题和评论之间的区别。这就是粗鲁和诚实的区别。只有在您有帮助的时候才应该留下答案。
    • 我真的认为直接提供指向信息的链接有点帮助,但我想不是,所以我只是自己阅读并在此处粘贴了一些内容。非常有趣的阅读!我向任何人推荐它,尤其是当您在 StackOverflow 上询问有关该主题的问题时。
    • 这很有趣,但实际上并没有回答问题。
    • 这些页面以何种方式无法回答问题? code.google.com/appengine/docs/quotas.html#UrlFetch code.google.com/appengine/docs/quotas.html#Requests 编辑:好的,他想知道他如何实现与他们相同的目标,而不是他们限制或阻止的目标。触摸。
    【解决方案4】:

    IMO 它不是标准的 python,而是专门为应用引擎打补丁的版本。换句话说,您可以或多或少地认为“更高级别”的 VM 不是模拟 x86 指令而是模拟 python 操作码(如果您不知道它们在尝试编写一个名为“foo”的小函数并执行“import dis; dis.dis(foo)" 你会看到编译器生成的python操作码)。

    通过修补 python,您可以对其施加任何您喜欢的限制。当然,您必须禁止使用用户提供的 C/C++ 扩展模块,因为 C/C++ 模块可以访问进程可以访问的所有内容。

    使用这样的虚拟环境,您可以安全地运行 python 代码,而无需为每个实例使用单独的 x86 VM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 2014-03-30
      • 2015-06-08
      • 2011-07-02
      相关资源
      最近更新 更多