设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 3932|回复: 8
打印 上一主题 下一主题

[信息技术] Sina App Engine架构简介

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
发表于 2012-10-15 10:12:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 shengnan007 于 2012-10-15 10:24 编辑 " ~9 y" a  B. Z) i

0 Z; c* \0 Q) q3 C" Q6 n* I    开篇首先说明一下,这篇文章并非纯原创,而是摘抄自SAE的官方文档和丛磊(新浪)的演讲发言,略加修饰而成。目的在于,方便开发者对于SAE的整体架构有一个初步的认识,同时,也是在做技术架构的调研时,要做的一个基本工作。) ~! ~; o3 n0 X& R

" Z' Q; P( o+ {, ]) S4 N/ P( R* e
SAE简介

! A+ g5 E9 i7 c6 `! ?
    SAE就是简单高效的分布式Web服务开发、运行平台。
    支持的语言:PHP,Java,Python。
# J$ R  k& s6 [8 x  L0 N
   
    SAE的功能   
    开发:
   ·代码检查,帮助检查不良函数并帮助移植
   ·代码部署
   ·分布式数据库
   ·分布式文件存储
   ·分布式缓存
   ·各种附属分布式服务,包括图像、定时、任务队列、邮件、计数器等
   ·对接多个开放平台,如新浪微博开发平台
   ·代码调优,通过XHProf提供
   ·数据库优化,通过RDC提供
   ·团队协作,可以邀请好友以不同的权限加入项目
   ·代码版本管理(计划支持)
    运营:
   ·应用打包,通过我们的应用向导进行推广
   ·日志,包括访问日志、错误日志等
   ·资源报表,消耗SAE各项资源的统计
   ·服务监控,监控各项服务状态
   ·数据迁移,包括数据库导入、数据库导出等
6 `: K5 e4 z6 B& F' c
5 f; b2 u. d9 \1 ]) a& }6 q8 W
    SAE提供的服务
  
服务名称
  
类型
说明
持久化存储
提供分布式文件存储
非持久化存储
提供分布式缓存服务
持久化存储
分布式数据库集群,提供MySQL服务
异步计算
异步离线轻量级任务队列,HTTP方式调用
异步计算
异步离线重量级任务队列,系统方式调用
持久化存储
计数器服务
RankDB
持久化存储
分布式排行榜服务
持久化存储
分布式key/value存储服务
异步计算
分布式定时服务
同步计算
分布式抓取服务
非持久化存储
提供临时文件存储,文件生命周期在一个会话内,Http请求结束文件自动消失

% x! q( U  ?2 e. [  [
提供应用配置功能,取代Apache htaccess
异步计算
邮件发送服务
同步计算
图像处理服务
同步计算
Facebook提供的强大的PHP调优工具
SVN
持久存储
用户代码部署的入口点:https://svn.sinaapp.com/yourapp
Online CodeEditor
持久存储
在线代码编辑器,编辑的代码保存后入自动入SVN并部署到Web服务器

# e9 _' A. r9 W% [1 k
整体架构
    SAE从架构上采用分层设计,从上往下分别为反向代理层、路由逻辑层、Web计算服务池。而从Web计算服务层延伸出SAE附属的分布式计算型服务和分布式存储型服务,具体又分成同步计算型服务、异步计算型服务、持久化存储服务、非持久化存储服务,后边会详细讲述。各种服务统一向日志和统计中心汇报,参考下图:
/ @. e% U' I1 p- v, e9 q1 v; t
6 k; {! i6 r& i+ [' t4 j3 ?7 O
5 q+ I) _, B/ Q& L/ @: D
SAE整体架构图
2 L- C3 S( N, A* R4 k+ g

6 B, J  ?: i$ w
    7层反向代理层(Reverse Proxy):HTTP反向代理,在最外层,负责响应用户的HTTP请求,分析请求,并转发到后端的Web服务池上,并提供负载均衡、健康检查等功能。
    服务路由层(Service Router):逻辑层,负责根据请求的唯一标识,快速的映射(O(1)时间复杂度)到相应的Web服务池,并映射到相应的硬件路径。如果发现映射关系不存在或者错误,则给出相应的错误提示。该层对用户隐藏了很多具体地址信息,使开发者无需关心服务的内部实际分配情况。
    Web服务池(WebService Pools):由一些不同特性的Web服务池组成。每个Web服务池实际是由一组Apache Server组成的,这些池按照不同的服务策略提供不同级别的服务。这些Web服务池的服务进程处理用户的HTTP请求,进程运行在HTTP服务沙盒内,同时还内嵌同样运行在SAE沙盒内的解析引擎。用户的代码最终通过接口调用各种服务。
    日志和统计中心:统计中心负责对用户所使用的所有服务的配额进行统计和资源计费,这里的配额有两种,一种是分钟配额,用来保证整个平台的稳定;一种是天配额,用户可以给自己设定每天资源消耗的最高上限。日志中心负责将用户所有服务的日志汇总并备份,并提供检索查询服务。
    各种分布式服务:SAE提供覆盖Web应用开发主要方面的多种服务,用户可以通过StdLib(可以理解为SAE PHP版的STL)很方便的调用它们。同时因为Web服务的多样性,SAE的标准服务不可能满足所有场景的需求,所以SAE可以对接第三方服务(如分词、全文检索等),SAE的使用者们可以直接使用对接到SAE中的第三方服务。
    下图是程辉在讲解SAE的时候所用到的架构图,图中把Reverse Proxy层和Service Router层合并为App Router层,不过这和SAE的官方架构图并不冲突。同时,图中提到了DynamicDNS,SAE的Dynamic DNS,提供了多线路支持和智能解析,使用户访问速度更快。
% l8 l" l  y8 A( Q+ A
- @- s& L4 d: |& X9 F; a5 F) `  ~
. G2 F1 v: _! s) b) I9 K+ R0 c
8 M- g7 x) s: O* ~8 L( {  Z
SAE架构-

# Z: v0 X1 M6 r" Q
/ u8 U. f3 K) X
    SAE在解释自己的架构的扩展性的时候,在文档中的说法如下。
    静态扩展,用户和资源有强绑定关系。最典型的例子为亚马逊的EC2和Ruby云计算平台Heroku,用户申请的资源和用户有严格的一对一关系,换句话说,A用户申请的虚拟机在A退还资源前,B用户不能使用,哪怕A用户的虚拟机处于闲置状态。
    动态扩展,用户和资源没有强绑定关系。最典型的例子为Google App Engine,用户申请的资源和用户没有严格的一对一关系,换句话说,处理A用户请求的进程在处理完之后,可以马上处理B用户的请求。
    在SAE平台上,采用了以动态扩展为主,静态扩展为辅的兼而有之的设计。在Web计算池层,是典型的动态扩展,没有一个用户独占Web服务进程,而是所有用户以共享的方式使用Web服务进程,通过Cache,热的用户自然在缓存层占据更多的位置。而在SAE的某些服务中,扩展性又是以静态扩展的方式展现,如RDC(Relational DB Cluster)分布式数据库集群,当用户申请了MySQL服务,SAE就会在RDC后端创建DB给用户,在用户显式的删除该DB前,该DB都不会被别人使用。当然,通过RDC,任何一个用户也无需知道后端DB的实际地址,只需访问RDC统一的host和port即可。
SAE的安全性

8 ]. {, A( y. |2 B& i- D! s- B* [% X5 K0 K, l  {4 W4 g* p" a
防火墙和Runtime SandBox

: r8 V9 @+ a) `$ R
: L, ^6 A3 {! Y4 |$ i! u; }
. m7 C" d' S  t4 h
0 h) C. b& a: F- p3 L1 T: Y+ q
SAE沙盒结构图
9 p1 M0 N  _: v- z: C

" O, ~% i: `" N# B+ [       SAE设计多层沙盒来保证用户应用之间的隔离性。
5 Z% ?' r7 q3 z* C4 Z0 c) y; S% Y- r
    最内层的就是用户代码,大部分PHP代码不需要做任何修改就可以跑在SAE平台上。小部分代码需要做一些修改以适应SAE的平台特性。比如,SAE因为安全性禁用了本地IO,所以fwrite等函数需要修改为使用TmpFD读写本地临时文件或者直接通过Storage服务读写分布式文件存储。
      PHP Zend为标准的PHP官方解释器,目前采用的版本为5.3。
      SAE Zend Sandbox为用户的代码运行提供良好的隔离性。这里有两个层面,1,是通过标准的php.ini,SAE设定了一些特殊配置和禁用函数;2,为了达到一些php.ini无法实现的沙盒功能,对Zend解释器核做了一些改进,以便通过用户标识将资源进行隔离。另外还把一些SAE的特定服务也在Zend层做了融合。
     Apache为标准的Apache Web Server,目前版本为2.2。不过SAE禁用了htaccess,并提供了自己实现的替换方案AppConfig。
     HTTP Server沙盒为Apache的安全可靠运行提供了多种保护功能,比如防止某个用户恶意占用连接数从而导致整个Web服务不正常。
     最外层的是标准POSIX环境。
参考资料:
( d+ Q# O+ e7 y' T; K' f& B( h
" W1 E3 x5 V, m

SAE安全架构.png (102.82 KB, 下载次数: 97)

SAE安全架构.png

SAE架构-流程图.png (94.55 KB, 下载次数: 101)

SAE架构-流程图.png

SAE沙盒结构图.png (48.53 KB, 下载次数: 102)

SAE沙盒结构图.png

评分

参与人数 1爱元 +4 收起 理由
老兵帅客 + 4 给力

查看全部评分

该用户从未签到

沙发
发表于 2012-10-15 11:43:50 | 只看该作者
SAE性能怎么样,不知道你们测试过没有?
  • TA的每日心情
    奋斗
    2018-1-6 00:24
  • 签到天数: 1 天

    [LV.1]炼气

    板凳
    发表于 2012-10-15 11:47:49 | 只看该作者
    思路没错,进入时机也挺早,但是人才和技术储备跟不上,上面的资金支持也跟不上。

    该用户从未签到

    地板
     楼主| 发表于 2012-10-15 12:47:25 | 只看该作者
    PenPen 发表于 2012-10-15 11:43 ; V0 Y# m. H6 Q0 C* o; l7 W
    SAE性能怎么样,不知道你们测试过没有?
    : K3 _# i$ Q2 v$ S& R; P
    没有测试过,我自己打算接下来试试

    该用户从未签到

    5#
    发表于 2012-10-15 20:54:54 | 只看该作者
    数据私密性怎么保证?我把网站建在你新浪的 infrastructure 上了,怎么保证新浪你看不到我的数据?

    该用户从未签到

    6#
    发表于 2012-10-16 09:35:27 | 只看该作者
    有没有python的文档可以看看啊。。。
    . w5 V  T& e1 N* H- A

    该用户从未签到

    7#
     楼主| 发表于 2012-10-16 09:40:20 | 只看该作者
    意广才疏 发表于 2012-10-15 20:54
    ! N! R2 O6 n9 v" z8 m, D; J数据私密性怎么保证?我把网站建在你新浪的 infrastructure 上了,怎么保证新浪你看不到我的数据? ...

    7 W. N' k- P7 r4 C1 s; l! ?我认为这还真是做不到,想看一定看得到

    该用户从未签到

    8#
     楼主| 发表于 2012-10-16 09:42:01 | 只看该作者
    假如十八 发表于 2012-10-16 09:35
    ! x, Y' G1 V2 ^  @4 b3 M有没有python的文档可以看看啊。。。

    . B+ l) Q2 J+ c+ Ghttp://appstack.sinaapp.com/static/doc/release/testing/index.html

    该用户从未签到

    9#
    发表于 2012-10-16 09:43:18 | 只看该作者
    shengnan007 发表于 2012-10-16 09:42
    7 m! }+ h% S* Q+ P7 Uhttp://appstack.sinaapp.com/static/doc/release/testing/index.html

    4 v; L4 o9 G; X不错不错。。。可以先看这个了再回去搞twitter+ y1 h+ j, \  p$ T
    ' z. [$ m; |2 w2 x/ X* p
    话说twitter 的那个鬼tweepy真是搞死我了
    . H3 a2 K- W8 F. N  m

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2024-11-26 09:31 , Processed in 0.051378 second(s), 28 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表