类别归档:SAE

Sina Application Engine

RSS feed of SAE

使用Nginx为新浪云SAE搭建临时海外代理

通过SAE的海外代理绑定独立域名,有时会遇到服务不稳定的情况,导致应用无法访问。

此时,如果手边恰好有一台可用的位于海外的Linux服务器,可以通过Nginx服务器为SAE应用搭建一个临时的反向代理,以解燃眉之急。

Nginx服务器的安装与反向代理的配置:

以CentOS系统为例,首先使用yum安装nginx服务器:

[root@localhost ~]# yum install nginx

然后更改nginx配置文件:

vi /etc/nginx/conf.d/default.conf

将location / {...}代码段替换为如下内容(<<APP_NAME>>替换为应用名):

location / {
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $remote_addr;
    proxy_set_header  X-Forwarded-Host $remote_addr;
    proxy_pass http://<<APP_NAME>>.sinaapp.com/;
}

更改完毕后启动nginx服务:

[root@localhost ~]# service nginx start
Starting nginx:                                            [  OK ...

继续阅读

SAE Django配置共享型MySQL数据库路由

托管在SAE上的Django应用,如果使用共享型MySQL数据库服务,可以通过配置数据库路由,实现读写分离。利用SAE从库的价格优势,减少云豆开销。

SAE共享型MySQL数据库的计费策略:

新浪云SAE共享型数据库支持读写分离(Read/Write Splitting),即主数据库(Master)处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库(Slave)处理SELECT查询操作。

并且从SAE共享型MySQL的使用价格上来看:

共享型MySQL(主库)
请求次数10000次    400云豆/百万次    4元/百万次
磁盘容量20MB    5云豆/GB/天    0.05元/GB/天

共享型MySQL(从库)
请求次数10000次    150云豆/百万次    1.5元/百万次

从库的每百万次请求价格仅为主库的37.5%,因此充分利用从库的价格优势,可以减少应用在数据库服务上的云豆开销。

不过需要注意的是:MySQL从库有时候会因为网络抖动或者用户SQL语句不够优化,导致从库数据同步会有些微延时(3-10秒)。如果用户有对数据实时性要求比较高的查询,建议在主库上进行操作。

参考SAE共享型MySQL说明文档:http://www.sinacloud.com/doc/sae/php/mysql.html

Django数据库路由配置:

参考Django多数据库配置文档:https://docs.djangoproject.com/en/1.8/topics/db/multi-db/

假设settings.py位于mysite目录下,在settings.py中添加如下配置:

if 'SERVER_SOFTWARE' in os.environ:
    from sae.const import (
        MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASS, MYSQL_DB, MYSQL_HOST_S
    )
else:
    # Make ...

继续阅读

使用SAE实时日志API统计IP来访次数

托管至SAE的应用,有时会出现访问流量异常增长的情形。

此时,我们需要对流量异常日期对应的应用访问日志进行分析,从而排查流量异常增长的原因。

一个简单有效的方式就是对访客IP进行统计,因为流量异常很可能是由于少数几个IP在短时间内的大量访问造成的(当然也不排除DDoS攻击)。

要获取SAE的访问日志,可以从SAE的日志面板手工下载,也可以使用SAE的实时日志API,参阅博文:SAE实时日志API Python使用小记

由于我们只需要使用日志的IP字段,通过SAE实时日志API中fop参数的fields命令可以移除多余的日志字段,从而节省下载流量造成的云豆消耗。

通过下面的Python代码即可实现特定日期的访客IP统计。

在工作目录下创建sae_log_util.py,apibus_handler.py,ip_counter.py并拷贝相应代码,执行ip_counter.py即可。

sae_log_util.py:

#-*-coding: utf8 -*-

#sae_log_util.py
#sae log utility based on sae apibus_handler
#author blog: https://bookshadow.com
#src date: 2015-09-17

status_code_dict = {200 : 'OK', 206 : 'Partial Content', 400 : 'Bad ...

继续阅读

新浪云Git代码仓库使用入门

SAE近期的优化,目前已经支持Git,本文将介绍如何使用Git在SAE上部署代码。

使用Git进行代码管理,首先要在本地安装Git客户端,下载链接:http://www.git-scm.com/download/

Git客户端的安装与配置过程在此略去不讲,谷歌一下可以找到许多相关的内容,文章重点介绍如何使用Git在SAE上部署代码。

本文例子中使用的操作系统为Windows 8.1,应用语言为Python,应用名称为gitsrc。

0. 代码管理方式的选择

在首次对应用进行代码管理时,有且仅有一次选择代码库管理方式的机会,这里我们选择Git。

此后应用的代码管理方式将不可变更

创建完成后,可以在页面上看到应用的Git仓库地址:https://git.sinaapp.com/gitsrc/ 

1. 使用git clone克隆代码仓库

在命令提示符(cmd)下,cd到工作目录(本例为E:\sae),执行命令:

git clone -o sae https://git.sinaapp.com/gitsrc

其中gitsrc应替换为正确的应用名称

按照提示输入安全邮箱和密码,执行成功后,提示检出内容为空。

保存Git用户名和密码:

在%USERPROFILE%\_netrc文件中

添加如下内容,可以避免每次push时重复输入用户名和密码(未启用动态口令)

machine git.sinaapp.com
  login 安全邮箱
  password 密码

添加一个Git远程仓库sae,地址为:https://git.sinaapp.com/gitsrc

git remote add sae https://git.sinaapp.com/gitsrc

注:如果在git clone时添加了 -o sae ...

继续阅读

SAE实时日志API Python使用小记

SAE新近开放的实时日志API允许开发者通过HTTP GET方式从SAE服务器获取应用日志,从而实现在线的应用调试与分析。

API参数介绍:

SAE日志API的URL请求格式为:GET /log/(string: service)/(string: date)/(string: ident).log?(string: fop)

参数列表中:

date表示日志的日期,格式为yyyy-MM-dd

service为SAE提供的各项服务,包括http,taskqueue(任务队列),cron(定时任务),mail(邮件),rdc(关系型数据库集群),storage(存储),push(推送)以及fetchurl(URL抓取),相信熟悉SAE的开发者不会对此感到陌生。

ident表示相应服务下的日志类型,包括access(访问),error(错误),alert(警报),debug(调试),warning(警告)与 notice(通知)。

service与ident的对应关系见下表(摘自SAE日志API文档):

service    ident
http    access、error、alert、debug、warning、notice
taskqueue    error
cron    error
mail    access、error
rdc    error、warning
storage    access
push    access
fetchurl    access

fop(似乎是flow operation的简称),为流式操作参数,支持head,tail,grep等linux下常用的shell命令;并且支持管道,操作之间用竖线分隔 ...

继续阅读