SAE介绍

Sina App Engine(简称SAE)是新浪研发中心开发的国内首个公有云计算平台,是新浪云计算战略的核心组成部分,作为一个简单高效的分布式Web服务开发、运行平台越来越受开发者青睐。

SAE环境和普通环境有所不同,它是一个分布式服务器集群,能让你的程序同时运行在多台服务器中。并提供了很多高效的分布式服务。SAE为了提升性能和安全,禁止了本地IO写操作,使用MemcacheX、Storage等存储型服务代替传统IO操作,效率比传统IO读写操作高,有效解决因IO瓶颈导致程序性能低下的问题。

正是因为SAE和普通环境的不同,使得普通程序不能直接放在SAE上,需要经过移植才能放在SAE上运行。也使得很多能在SAE上运行的程序不能在普通环境下运行。

ThinkPHP3.2核心内置了对SAE平台的支持(采用了应用模式的方式),具有自己的独创特性,能够最大程度的使用ThinkPHP的标准特性,让开发人员感受不到SAE和普通环境的差别。甚至可以不学习任何SAE知识,只要会ThinkPHP开发,就能将你的程序运行在SAE上。

SAE版ThinkPHP具有以下特性:

  • 横跨性:能让同样的代码既能在SAE环境下运行,也能在普通环境下运行。解决了使用SAE不能在本地调试代码的问题。
  • 平滑性:我们还是按照以前一样使用ThinkPHP,但是您已经不知不觉的使用了SAE服务,不用特意学习SAE服务,降低学习成本。比如你不用特意的去学习KVDB服务,你在SAE环境下使用ThinkPHP的F函数就已经使用了KVDB的服务。
  • 完整性:SAE开发下面功能没有任何删减,支持ThinkPHP标准模式的所有功能。

大多SAE移植程序都是使用Wrappers实现,SAE版ThinkPHP没有使用Wrappers,使用SAE的原始服务接口,运行效率比用Wrappers更高。

3.2版本中你无需考虑SAE平台的部署,在本地采用标准模式开发完成后,直接部署到SAE平台后,系统会自动转换为SAE模式运行。

在本地开发完成后,上传到SAE平台需要做一些初始化工作,例如初始化Mysql,Memcache,KVDB服务。 SAE平台不支持IO写操作,所以你不能在SAE上首次运行入口文件生成项目目录。你可以在本地运行入口文件,本地生成好项目目录后再提交到SAE上。

注意:如果要部署到SAE平台的话,你的应用代码不要直接进行文件读写操作,而采用ThinkPHP封装的方法或者函数进行操作即可。

SAE配置

SAE引擎运行时拥有SAE自己的惯例配置和专有配置,因此配置文件加载顺序为:

惯例配置->项目配置->SAE惯例配置->SAE专有配置

SAE惯例配置和SAE专有配置中的配置项将会覆盖项目配置。

SAE惯例配置:位于系统目录的 /Mode/Sae/convention.php,其中定义了程序在SAE上运行时固定的数据库连接配置项。

SAE专有配置:位于应用的公共Conf目录下,文件名为config_sae.php,大家可以将针对SAE的配置写到其中。

注:SAE惯例配置和SAE专有配置是针对SAE环境的独有配置,在本地运行时将不会加载。

数据库

开发者不需要在应用配置文件(config.php)中定义和SAE相关的数据库配置项,只需要定义本地调试时连接的数据库即可。代码提交到SAE时无需修改任何配置项也能运行,因为SAE惯例配置会自动覆盖你的项目配置文件中的数据库配置。

代码在SAE上运行时会进行分布式数据库连接,并读写分离。

缓存

在SAE开发过程中,你仍然可以使用ThinkPHP内置的缓存方法进行处理。下面是SAE引擎使用不同的缓存方法在本地和SAE平台下的区别(注意这个区别SAE引擎会自动判断处理):

缓存方法 本地运行 SAE平台
S缓存 默认使用File方式实现 固定使用Memcache实现
F缓存 使用File实现 使用KVDB实现
静态缓存 生成静态Html文件 静态文件存入KVDB中
SQL队列 支持File、Xcache和APC方式 使用KVDB存储

日志

你无需单独为SAE平台写日志功能,一切都是框架的Log类自动处理的。ThinkPHP在SAE平台的日志写入是调用了sae_debug方法,具体工作由Think\Log\Driver\Sae类完成。

在本地运行会将日志记录到项目的项目的Runtime/Logs文件夹下,而在SAE上运行会将日志记录到SAE平台的日志中心: http://sae.sina.com.cn/?m=applog

请在搜索框选择中的下拉菜单处选择“debug”进行查看。

文件上传

文件上传仍然使用Think\Upload扩展类库上传文件,使用方法不变。同样的代码在本地运行时将会上传到指定的目录,在SAE上运行时就会自动使用Storage服务,将文件上传到指定的Storage中。

首先你需要在SAE平台上创建一个Storage的domain用于存放上传的文件: http://sae.sina.com.cn/?m=storage

这里可以建立多个domain。而我们的文件会上传到哪个domain,是由上传路径的第一个目录名称决定的。如:

  1. $upload->rootPath =  './Public/';
  2. $upload->savePath = 'Uploads/';

会上传到名为Public的domain

你也不用在这个domain下创建Uploads文件夹,SAE的Storage服务会为你自动创建。

图片地址的问题: 我们使用UploadFile类上传图片,在本地和在SAE下图片的浏览地址是不一样的。比如有张图片地址为 "/Public/upload/1.jpg" , /Public 是一个模板替换变量, 他会被替换为Public文件夹所在目录的地址, 我们可以通过浏览器的查看源代码功能查看被替换后是什么效果。 可以看见, 替换后为 "/Public/upload/1.jpg" 。 但是在SAE上图片并没有在Public/upload目录下,而是在storage中。我们需要将 /Public/替换为storage的域名,在SAE上才能正常显示。

我们在SAE专有配置Conf/config_sae.php文件中定义如下代码:

  1. <?php
  2.  return array(
  3.     'TMPL_PARSE_STRING'=>array(
  4.          '/Public/upload' => $st->getUrl('public','upload'),
  5.     )
  6.  );

这样,在SAE上会把 /Public/upload 替换为storage的地址, 在SAE上图片也能正常显示。

隐藏index.php

SAE不支持.htaccess文件,但我们可以使用SAE提供的AppConfig服务实现伪静态。

在你项目的根目录建立config.yaml文件,代码为:

  1. handle:
  2. - rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "index.php/$1"

这样就可以隐藏入口了。

比如这样的地址 http://serverName/index.php/Blog/read/id/1也能通过 http://serverName/Blog/read/id/1访问。

代码横跨性建议

ThinkPHP的SAE模式,是具有横跨性的,请不要破坏它的横跨性。比如,不要在项目配置文件中写和SAE数据库相关配置项。自己写代码时,也要尽量做到横跨性,这样就可以让同样的代码既能在SAE下运行,也能在普通环境下运行,使你在本地调试完后上传到SAE也不用修改任何代码就能运行。大理石平台价格

下面是一些保持代码横跨性的建议:

(1)尽量少使用原生的SAE服务

能使用ThinkPHP自带函数替代的,尽量使用ThinkPHP自带函数。比如要使用SAE的KVDB服务,在ThinkPHP中完全可以用F函数代替。如果要使用SAE的Memcache服务,都使用S函数实现。这样就不会导致你的代码从SAE转移到普通环境后性能很低。个别SAE服务无法使用ThinkPHP自带函数代替的,才考虑使用原生的SAE服务。

(2)利用SAE专有配置

当遇到SAE和普通环境配置需要不一样时,你可以把普通环境的配置写到项目配置文件Conf/config.php中,而将SAE需要用的配置写到SAE专有配置Conf/config_sae.php中。(大多数差异化的配置,SAE惯例配置文件已经内置处理了)

thinkphp SAE的更多相关文章

  1. thinkphp 3+ 观后详解 (2)

    接上一章的内容,我们继续来看Think.class.php文件的start方法 static public function start() { // 注册AUTOLOAD方法 spl_autoloa ...

  2. 在 SAE 上部署 ThinkPHP 5.0 RC4

    缘起 SAE 和其他的平台有些不同,不能在服务器上运行 Composer 来安装各种包,必须把源码都提交上去.一般的做法,可能是直接把源码的所有文件复制到目录中,添加到版本库.不过,这样就失去了与上游 ...

  3. sae中thinkphp使用smarty

    因为最近在学thinkphp跟着做一个小商城. 没有使用thinkphp自带的think引擎,使用的是smarty引擎. 在sea中使用的时候出现了问题.已经是前几天的事了,问题图片没保存下来. 在网 ...

  4. ThinkPHP - 2 - SAE(新浪云)部署

    ThinkPHP3.2核心内置了对SAE平台的支持(采用了应用模式的方式),具有自己的独创特性,能够最大程度的使用ThinkPHP的标准特性,让开发人员感受不到SAE和普通环境的差别.甚至可以不学习任 ...

  5. 新浪SAE使用Thinkphp框架,禁用memcache节省豆子的方法

    请在入口文件定义常量,SAE_RUNTIME为true请在本地打开命令行, cd 到项目所在文件夹,执行命令: php index.php 此时会在./App/Sae_Runtime目录下批量生成缓存 ...

  6. thinkphp的学习笔记

    # Thinkphp ## 什么是框架?(框架开发)> 框架就是通过提供一个开发Web程序的基本框架(比如提供了分页类.数据库操作类.文件操作类等),使用框架可以减少开发者代码的编写.> ...

  7. ThinkPHP升级指导

    升级指导 http://www.kancloud.cn/manual/thinkphp5/163239 从V5.0.1升级到V5.0.2 从V5.0.1升级到V5.0.2需要注意如下事项: 下列模型属 ...

  8. 把php上传sae问题要使用IO

    应用移植指南 一,为什么要移植应用 SAE禁止IO写操作,代码目录不能写入.这意味着普通程序的上传图片.生成缓存等操作都不能在SAE上正常运行,这时候你需要对这些代码进行修改后才能让你的程序运行在SA ...

  9. SAE云平台上传图片和发送邮件

    1.远程图片保存至Storage 其中public是Storage中的容器名,"目录1/目录2/"是容器下的路径 $file_content 是得到的文件数据 $s = new S ...

随机推荐

  1. 搭建ELK和EFK

    公司突然发下任务让我搭建elk和efk,于是做完之后写入了博客,生产环境下,亲测可用哦 搭建ELK 一共两台服务器,一个节点(logstash) 主服务器上 修改最大链接和最大打开的文件 1.临时修改 ...

  2. Java 基础 - 自动装箱,valueOf装箱,new -->使用 == 和 equals比较

    总结 关于equals 比较  记住:equals方法比较的是真正的值 两个包装类比较,比较的是包装的基本数据类型的值 基本数据类型和包装类型比较时,会先把基本数据类型包装后再比较 (但是因为equa ...

  3. SQL Server 2014 安装说明

    SQL Server 2014 安装说明 本节内容将说明如何通过安装向导在 Windows Server 2012 R2 上安装 SQL Server 2014. 先从 MSDN 网站上下载安装了 S ...

  4. python dir()详解

    Python dir() 函数 Python 内置函数 描述 dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表.如果参数包含方法__dir__ ...

  5. POJ 3159 Candies(spfa、差分约束)

    Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the he ...

  6. MySQL(关系型数据库管理系统)

    MySQL 关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的 RDBMS ...

  7. #pragma hdrstop

    #pragma hdrstop#pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译.BCB 可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘 ...

  8. 远程到Server系统安装和使用QTP

    转自http://www.51testing.com/html/40/307440-832446.html  感谢作者 多童鞋都问在2003上如何安装QTP,为何单机许可不能使用? 我在N太serve ...

  9. STM32例程之USB HID双向数据传输(源码下载)【转】

    程序功能 将STM32的USB枚举为HID设备. STM32使用3个端点,端点0用于枚举用,端点1和2用于数据的发送和接收. 端点长度为64,也就是单次最多可以传输64个字节数据. STM32获取上位 ...

  10. 2019牛客多校第五场B-generator 1(矩阵快速幂)

    generator 1 题目传送门 解题思路 矩阵快速幂.只是平时的矩阵快速幂是二进制的,这题要用十进制的快速幂. 代码如下 #include <bits/stdc++.h> #defin ...