【BAE3.0使用系列】PHP Runtime介绍

概述

         由3.0版本开始,我们的执行环境发生了质的变化,每个应用的执行环境为一个(或多个)lighttpd+php-cgi的容器中执行,每个容器有单独的运行空间和单独的隔离资源,这样可以隔离不同应用之间的影响,从而保证应用的独立性。另外由于多个实例分属到不同的服务器上,因此需要从应用程序上避免对本地文件的数据存储。

        PHP执行环境基于官方版本 5.4.17 实现,加上了BAE的安全隔离机制,既可以最大程度兼容原生的PHP大部分功能和函数,又可以在PHP级别保障应用之间的代码、数据访问的安全隔离,从而保证用户代码和数据的安全。

开发指南

使用服务

BAE中内置各服务的SDK,请参考:

http://godbae.duapp.com/?p=378

注意

  • require直接写文件名称即可,不需要带绝对路径;
  • 为提高执行效率,需要应用显式引用相关的服务接口文件,以避免不使用的服务文件被自动引用,从而提高页面执行效率。

分布式Session

PHP执行环境为分布式环境,Session不能本地存储,PHP执行环境已自动将Session数据写到独立分布式缓存中,用户可使用PHP Session的源生接口生成Session,不需修改。

临时目录

PHP执行环境对本地读写数据提供了支持,但是每个执行容器只有有限的空间来存放临时文件(比如1G),用户可以对‘/home/bae’下的文件和路径做任何的修改,可放心读写,但是要注意,应用的根目录为/home/bae/app,切记不要对它做操作,否则可能会对应用造成影响。数据也将在配额的支持范围内长期有效。

服务端配置

BAE3.0以容器为单位,尽可能的开放了资源,因此大部分绝大部分应用都可无障碍或者极少的代码修改量,就可运行在这3.0上。

应用日志

暂无

环境变量

         3.0中取消了全局变量,如有需要用到的地方可自行到相关地方获取。

扩展支持

cgi-fcgi

ctype

curl

date

dom

filter

gd

gettext

hash

iconv

json

libxml

mbstring

mcrypt

mysql

mysqli

netfilter

pcre

PDO

session

SimpleXML

SPL

standard

xml

xmlreader

xmlwriter

zlib

Opcache

内置服务

  • Cache(缓存) 提供高性能的分布式的内存对象缓存服务。
  • Counter(计数器) 提供分布式计数服务,用于访问统计、投票应用等场景。
  • Cron(定时任务) 提供分布式环境下的定时任务功能。
  • FetchURL(网页抓取) 提供通过URL抓取网页内容的服务。
  • Image(图片处理) 提供图片抓取和按照用户定义的操作对图片进行处理的服务。
  • Log(日志) 提供日志记录服务,可以根据需要设置日志级别。
  • MySQL(数据库) 提供分布式的关系型数据库服务,后端采用的是业界最为广泛使用的数据库之一:MySQL。
  • MongoDB 提供分布式的非关系型数据库服务,后端采用的是业界最为广泛使用的数据库之一:MongoDB。
  • Redis 提供key-value型非关系型数据库服务,后端采用的是业界最为广泛使用的数据库之一:Redis。
  • Rank(排行榜) 提供分布式的排名统计服务,用于各类信息的实时排名(如游戏、用户访问量等等)。
  • Socket(网络代理) 通过代理访问外部网络,无接口变更,支持TCP,暂不支持UDP及监听。
  • TaskQueue(任务队列) 提供分布式任务队列服务,可以以异步并发方式高效率地执行用户提交的FetchURL、离线下载任务等。

安全限制

本地读写限制

为适应不同流量需求,使应用受访问能力更具有弹性。应用执行在单独的隔离空间中,不同请求发送到后端的服务器相同,本地读写也给予了支持,但不太建议本地读写数据,数据存储提供有缓存,云存储(见组件部分)。单次请求的临时数据所需的临时目录可正常使用,可对执行容器中/home/bae做任何操作(不要对/home/bae下已有的文件进行操作,特别是/home/bae/app),确保单次请求内数据正常。

外网资源访问限制

为了平台安全性以及统一出口,访问外网资源统一经过代理。目前支持http,https,tcp三种方式访问外网。 http,https资源通过使用php curl系列函数进行访问。 tcp资源通过使用php sockets系列函数进行访问。

目录访问限制

应用代码只能访问自身应用目录,其他目录的访问权限被限制。

请求执行时间限制

单个请求最大执行时间为30秒,可使用set_time_limit设置比30秒小的超时时间。

第三方支持

现在可最大限度的对各个应用进行兼容,对绝大部分应用可以做到完全兼容,少量应用只需改动极少的代码即可与3.0兼容。目前经测试:

WordPress 3.6 完全兼容;

Mediawiki 1.21.1 修改2行代码兼容:

includes/installer/MysqlInstaller.php,156行改为$this->getVar( ‘wgDBname’ ),
includes/installer/MysqlInstaller.php,427行改为$this->getVar( ‘wgDBname’ ),

Discus X3.0修改5行代码兼容;

0、在install/index.php中296行注释show_msg(‘database_errno_1044′, mysql_error(), 0);
1、uc_client/model/base.php:加上UC_DBNAME一起改
2、在admin.php中30行加上 $_G['setting']['jspath'] = ‘static/js/’;
3、install/index.php 54行 改为:$bbserver = ‘http’.($isHTTPS ? ‘s’ : ”).’://’. $_SERVER['HTTP_HOST'];
4、forum.php 57行,加$_G['setting']['ucenterurl'] = ‘http’.($isHTTPS ? ‘s’ : ”).’://’. $_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], ‘/’)).’/uc_server’;

此条目发表在 BAE使用 分类目录,贴了 , 标签。将固定链接加入收藏夹。

发表评论