from Programming.Google.App.Engine
第三章
3.1 The App Engine Architecture
一个传入请求,首先会交给App引擎前端(App Engine frontend)。这一过程由负载平衡器(load balancer)完成,它的作用是将众多请求最优化地分配到不同的前端服务器(frontend servers)上。某个请求由负载平衡器转发到众多的前端服务器之一后,前端就会根据请求路径的域名(可能是一个Google Apps domain and subdomain 或者是一个appspot.com subdomain)确定这个请求是请求的哪个应用程序,然后查询这个应用程序的配置以决定下一个步骤。
应用程序的配置告诉前端如何根据请求的URL地址来处理这些请求。一个URL路径可以映射到一个静态文件,他们会被直接送达给客户端,如图像或一段 JavaScript代码文件。或者,一个URL路径可以映射到一个请求处理程序,它是一些应用程序代码,用来生成响应。应用程序的配置是和用户开发的应 用程序一起上传的。
如果一个请求的URL路径不能在应用程序的配置中找到匹配,前端会返回一个HTTP 404 “Not Found” error响应到客户端。如果你想让客户端获得一个定制的回应,比如一个反映HTTP 404 “Not Found” error的友好的HTML代码,你可以在配置中定义一个URL映射,将所有的网址请求映射到一个可以返回定制回应的程序上。
如果一个URL路径映射到一个静态文件,前端服务器就会将这个请求转发到静态文件服务器(static file servers)上。这些服务器是专门为请求提供静态文件。因为静态文件不会经常变化,所以这些服务器在网络拓扑结构和缓存方面都进行了优化,以便静态资 源的快速传送。在应用程序的配置中,用户需要告诉App Engine哪些是应用程序需要的静态文件。当您上传应用程序时,这些静态文件就会被放到静态文件服务器上。
如果请求的URL路径匹配到一个请求处理程序,前端服务器就会将这个请求转发到应用服务器(app servers)上。应用服务器池
会启动一个相应的应用程序实例,如果已经有一个对应的实例,则重用已存在的实例。应用服务器也是根据配置中URL路径和请求处理程序的对应关系找到对应的请求处理程序的。
用户可以通过配置前端,使用谷歌帐户来验证用户。前端可以用几个级别的授权,限制一些URL路径的访问权限:所有用户,
已登录有用户,或者应用程序管理员。如果使用谷歌应用程序的域(Google Apps domain),您还可以设置你的应用程序只允许这个域的用户访应用程。前端检查用户是否登录,如果没有,会重定向到谷歌帐户登录界面。
应用程序服务器(app servers)使用几个策略来分发请求,并启动处理程序实例,这取决于应用程序的网络流量和资源使用状况。应用服务器的一个目标是最大化应用实例的吞吐 量,使尽可能多的需要的实例运行来处理请求,尽可能少的实例处于空闲。应用服务器的另一个设计目标是,一个请求处理程序不能干涉同台服务器上的另外的请求 处理程序的行为和性能。
当一个应用服务器(app servers)接收到请求时,服务器检查配置,以确定使用哪些请求处理程序来处理该请求,并调用它们。服务器管理本地资源,包括CPU,内存和执行时间,以确保应用程序不会干扰其他应用程序的资源使用。
用户的应用程序代码运行在运行时环境(runtime environment)中,他是服务器硬件和操作系统之上的一个抽象层。运行时环境是一个“沙箱(sandbox)”,它只允许应用程序使用服务器的资源,而不允许干扰其他应用程序的功能。例如,沙箱不允许向
服务器的文件系统中写操作,也不允许随意地打开网络连接到其他主机。
但是应用程序可以访问运行时环境以外的各种服务。例如,URL Fetch service 服务允许一个应用程序使用HTTP连接到远程机器,或者使用谷歌的基础设施来获取网页。这些服务和谷歌自己的应用程序如Gmail, Google Reader和Picasa使用的服务是相同的。这些服务提供了一个可扩展的替代方案,这样就不用用户自己开发和执行类似的任务。同时,所有应用服务器使 用相同的服务,这样一个处理程序保存到datastore中的数据可以被另一个处理程序直接使用。
请求处理程序准备好响应,然后返回,并终止。应用程序服务器不会发送任何数据到客户端,直到请求处理程序已终止,因此它不能保持数据流或保持连接很长一段时间。当处理程序终止时,应用服务器返回响应,至此请求完成。
前端可以定制客户端的响应。例如如果客户端支持压缩的响应,前端可以将响应数据使用“gzip压缩”格式压缩。这适用于应用程序和静态文件的响应,并自动完成。前端使用几个技术,以确定何时合适使用响应压缩,例如基于Web标准或者已知的浏览器行为。
前端,应用服务器和静态文件服务器都是由应用管理器(app master)管理。