App Engine 主页指出“为 Python 环境编写的应用程序代码必须专门用 Python 编写。不支持用 C 语言编写的扩展。”
https://developers.google.com/appengine/docs/whatisgoogleappengine
我们需要将 C/C++ 应用程序移植到 SaaS 服务。可以用 Google App Engine 完成吗?
App Engine 主页指出“为 Python 环境编写的应用程序代码必须专门用 Python 编写。不支持用 C 语言编写的扩展。”
https://developers.google.com/appengine/docs/whatisgoogleappengine
我们需要将 C/C++ 应用程序移植到 SaaS 服务。可以用 Google App Engine 完成吗?
目前有四种可用于 Google App Engine 的运行时:Go、Java、Python 和 PHP。
这些不仅是唯一可用的运行时,而且您还受到语言功能的限制。您无法使用许多传统上可用的子系统来帮助您扩展 Web 应用程序。您链接的页面上的主要示例提到不允许打开套接字或写入文件系统。线程化或执行耗时超过一分钟的计算是另一个常见的限制。
沙盒
应用程序在提供对底层操作系统的有限访问的安全环境中运行。这些限制允许 App Engine 跨多个服务器分发应用程序的 Web 请求,并启动和停止服务器以满足流量需求。沙盒将您的应用程序隔离在其自身安全、可靠的环境中,该环境独立于 Web 服务器的硬件、操作系统和物理位置。
安全沙盒环境的限制示例包括:
- 应用程序只能通过提供的 URL 获取和电子邮件服务访问 Internet 上的其他计算机。其他计算机只能通过在标准端口上发出 HTTP(或 HTTPS)请求来连接到应用程序。
- 应用程序无法在任何运行时环境中写入文件系统。应用程序可以读取文件,但只能读取使用应用程序代码上传的文件。应用程序必须使用 App Engine 数据存储区、内存缓存或其他服务来处理请求之间持续存在的所有数据。Python 2.7 环境允许读取、写入和修改字节码。
- 应用程序代码仅在响应 Web 请求、排队任务或计划任务时运行,并且无论如何必须在 60 秒内返回响应数据。发送响应后,请求处理程序无法生成子进程或执行代码。
Google App Engine 的重点是编写基于它们提供的可扩展服务的单线程应用程序。与传统的 C/C++ 应用程序开发相比,这是一个相当大的范式转变,因为您需要使用 Google 的机制来存储数据、访问 Internet 上的其他资源、发送和接收电子邮件、缓存。这样做的原因是为了消除应用程序中的瓶颈,以便可以根据请求需求启动和拆除应用程序的大量实例。
将传统的 C/C++ 应用程序移植到 GAE(和许多其他 SaaS)很可能需要大量重构,以至于需要进行重写才能利用在 SaaS 平台上运行所获得的收益。