根据google 公开的资料,猜测Google App Engine架构设计,下面简要学习记录App Engine 接受请求原理及流程。高手路过!若你有更详细的资料或其他的想法请分享。
App Engine 基本架构比较简洁。如下图所示:
进一步简化一下,可以抽象为
即包括:web、Datastore和服务群
1、web
web部分主要用于处理请求主要有如下模块:
(1)、前端,即可以认为负载均衡(load balancer),也可以认为它是代理(proxy),主要负责负载均衡和将具体的web请求转发给应用服务器。对于一些静态文件(比如:图片、CSS和JS脚本等)的请求,前端会将这种请求转给对应的类似于CDN(Content Delivery Network,内容分发网络)的静态文件服务器。
(2)、应用服务器。用于装载应用的代码,处理接收到的web请求,并根据请求的内容调用后面的Datastore和服务群。
(3)、 管理节点。在应用服务器间应用,并将调度之后的情况通知前端。
2、DataStore
它是基于BigTable技术分布式数据库,虽然它也可以被理解成一个服务,但是由于它是整个App Engine对数据进行持久化的地方,所以它是App Engine中一个非常核心的模块。
3、服务群
整个服务群包括很多服务供App Server上运行的应用调用,比如Memcache、图形、用户、URL抓取和任务队列。
web请求处理流程
(1)用户发送一个HTTP请求。
(2)前端接受这个请求,并将这个请求转发给一个空闲的应用服务器。
(3)应用服务器会处理这个请求。
(4)检查用于处理这个请求的类是不是已经被初始化了。如果没有的话,需要初始化这个类。
(5)调用服务群中的用户认证服务来对用户进行认证,如果失败的话,需要终止整个请求的处理工作,并返回无法认证用户的信息。
(6)查看这个请求所需的数据是否已经缓存在Memcache中,如果没有,将对Datastore发出查询请求来得到数据。
(7)通过整合第(6)步得到的数据来生成相关HTML,并返回给用户。
(8)由于HTML里包含对一些静态文件的引用,比如图片和CSS等,所以当用户收到HTML之后,还会通过前端读取静态文件服务器里面储存的静态文件。
流程图如下: