Google AppEngine 适合托管 PHP 应用么?

hizhou 2013-07-04 22:42

php-gae

翻译一段 GAE 托管 PHP 应用的利弊分析文章。以下为内容。

 

你也许想知道,AppEngine 是否真的对 PHP 网站支持的很好。

现在,GAE 将官方的 PHP-5.4 定制和整合到 Google 云平台。很多常用的扩展已经编译进去,当然,不是所有。

这当然是一个有约束的环境,所以你别指望所有 PHP 特性都能用上。GAE 环境和常规环境会存在一些差异,有利的和不利的都有。

还没有人把真正的使用报告给出来,差异肯定比我们想象的要多,我们可以先从官方文档中观察出一些差异。

有利的:

1、几乎无穷的扩张能力

如果你的站点出现了一个请求的高峰,理论上 AppEngine 会处理这些负载。如果是常规环境下,你就需要小心地添加一些服务器并且分发那些请求到这些服务器上。

2、自动备份

AppEngine 会自动备份你的应用和数据库,你也可以按需要定制备份计划。

3、分布式的 session

AppEngine 模拟了一个 memcached 服务,不管你的应用代码在不在同一台机器,你都可以存取数据。

通过这样来存取 session 数据,比 PHP 原生的本地文件的实现方式要好多了。

4、任务队列

AppEngine 提供了队列接口,你可以将脚本的执行延迟到后端进程。为了方便队列的使用,官方已经提供封装好的类库。

你还可以安排任务的执行时间表,就像使用 crontab 一样。

(译者注:任务队列确实是普通虚拟主机提供商不能提供的东东,嗯,还有 memcached 服务。备份还好说,无穷的扩展能力,一般小站还不奢望能用上。)

不利的:

1、没有本地文件系统可以用了

很多 PHP 应用都是可以读写自己的文件的,比如配置文件、用户上传的文件。这些数据现在都是通过特殊的文件流句柄写到云存储服务中了。

你就不能用 require 或 include 去执行动态创建的文件了。虽然看起来,这提高了安全性,但也给很多 PHP 应用强加了限制。

举个栗子,很多 PHP 应用都用到模板引擎,模板引擎的实现就是将模板文件解析为可执行的 PHP 文件,在显示页面时 include 这些解析好的 PHP 文件。所以很多模板引擎就不能用了。还有,类似 WordPress 自动升级的功能也就跑不起来了。

解决方案似乎也有,把云存储上的文件读取下来,然后赋值给变量,然后用 eval 去执行。当然,很多应用根本还不会这样工作。

(译者注:eval 这种方式太不可取了,可以先放一边。没有本地文件系统确实是硬伤,模板引擎也只能用那些不产生中间文件的。很少有应用是不读写本地文件的,所以要上 AppEngine 的应用都避免不了调整)

2、没有远程资源获取途径(如:sockets、Curl)

至少现在看起来,是不能用 fsockopen 或 Curl 扩展去建立 socket 连接的。

如果要连接到远程站点,你得用 fopen、file_get_contents 等类似函数。

(译者注:这样搞起来,很多远程连接的类库也不能用了,是出于什么目的要禁用这些函数和扩展呢?)

3、URL 由 AppEngine 的配置来映射了,而非 mod_rewrite

因为 AppEngine 运行在 Google 的 Web 服务器上,mod_rewrite 这样的扩展肯定不能用了。

URL 和 PHP 脚本的映射是由特定格式的配置文件管理的,得学。

(译者注:配置文件格式和语法如果和 rewrite 的语法类似,问题倒不大)

4、没有 PHP 错误日志了

至少现在看起来,是没有 PHP 错误日志的入口的。意味着,如果生产环境的 PHP 代码出错了,你会看不到它们。

(译者注:AppEngine 应该提供其他渠道能看到吧?)

 

更多细节可以参考:gaeforphp.appspot.com(官网,被墙了)
文章翻译自:Is Google AppEngine a Good Solution for PHP Application Hosting?

[返回] [原文链接]