`

探索Google App Engine背后的奥秘(4)- Google App Engine的架构

阅读更多
按:此为客座博文系列。投稿人吴朱华曾在IBM中国研究院从事与云计算相关的研究,现在正致力于研究云计算技术。

本篇将首先介绍App Engine的一些设计理念,接着将对App Engine的组成部分等进行介绍。

设计理念

App Engine在设计理念方面,主要可以总结为下面这五条:

  • 重用现有的Google技术:大家都知道,重用是软件工程的核心理念之一,因为通过重用不仅能减低开发成本,而且能简化架构。在App Engine开发的过程中,重用的思想也得到了非常好的体现,比如Datastore是基于Google的bigtable技术,Images服务是基于Picasa的,用户认证服务是利用Google Account的,Email服务是基于Gmail的等。
  • 无状态:为了让更好地支持扩展,Google没有在应用服务器层存储任何重要的状态,而主要在datastore这层对数据进行持久化,这样当应用流量突然爆发时,可以通过为应用添加新的服务器来实现扩展。
  • 硬限制:App Engine对运行在其之上的应用代码设置了很多硬性限制,比如无法创建Socket和Thread等有限的系统资源,这样能保证不让一些恶性的应用影响到与其临近应用的正常运行,同时也能保证在应用之间能做到一定的隔离。
  • 利用Protocol Buffers技术来解决服务方面的异构性:应用服务器和很多服务相连,有可能会出现异构性的问题,比如应用服务器是用Java写的,而部分服务是用C++写的等。Google在这方面的解决方法是基于语言中立,平台中立和可扩展的Protocol Buffer,并且在App Engine平台上所有API的调用都需要在进行RPC(Remote Procedure Call,远程方面调用)之前被编译成Protocol Buffer的二进制格式。
  • 分布式数据库:因为App Engine将支撑海量的网络应用,所以独立数据库的设计肯定是不可取的,而且很有可能将面对起伏不定的流量,所以需要一个分布式的数据库来支撑海量的数据和海量的查询。

组成部分

GAE ARCH.jpg

图1. GAE的架构图(图源自参[6])

简单而言,其架构可以分为三个部分:前端,Datastore和服务群:

前端

共包括四个模块:

  • Front End:既可以认为它是Load Balancer,也可以认为它是Proxy,它主要负责负载均衡和将请求转发给App Server(应用服务器)或者Static Files等工作。
  • Static Files:在概念上,比较类似于CDN(Content Delivery Network,内容分发网络),用于存储和传送那些应用附带的静态文件,比如图片,CSS和JS脚本等。
  • App Server:用于处理用户发来的请求,并根据请求的内容来调用后面的Datastore和服务群。
  • App Master:是在应用服务器间调度应用,并将调度之后的情况通知Front End。

Datastore

它是基于BigTable技术的分布式数据库,虽然其也可以被理解成为一个服务,但是由于其是整个App Engine唯一存储持久化数据的地方,所以其是App Engine中一个非常核心的模块。其具体细节将在下篇和大家讨论。

服务群

整个服务群包括很多服务供App Server调用,比如Memcache,图形,用户,URL抓取和任务队列等。

Python版和Java版App Engine在实现方面的区别

因为大多数服务都可以被这两个版本共享,所以两者之间的区别主要集中在App Server端,Python版App Server应该是经过Google修改的Python Runtime,版本号应该是2.5.2,而Java版App Server是基于Jetty 6的,因为它的体积和最常用的Tomcat相比更娇小,这样能使得一台服务器支持更多的应用,而且其应该经过Google的一定的修改。

流程

在这里举一个普通的HTTP请求的处理流程为例:

  • 用户发送一个HTTP请求。
  • Front End接受这个请求,并将这个请求转发给一个空闲的App Server。
  • App Server会处理这个请求。
  • 检查用于处理这个请求的Handler是不是已经被初始化了,如果没有的话,需要对这个Handler进行初始化。
  • 调用服务群的用户认证服务来对用户进行认证,如果失败的话,需要终止整个请求的处理工作,并返回用户无法被认证的信息。
  • 查看这个请求所需的数据是否已经缓存在Memcahe中,如果没有的话,将对Datastore发出查询请求来得到数据。
  • 通过整合上步得到数据来生成相关的HTML,并返回给用户。
  • 由于HTML里面会包含对一些静态文件的引用,比如图片和CSS等,所以当用户收到HTML之后,还会通过Front End对Static Files里面存储的静态文件进行读取。

本篇结束,下篇将关注App Engine最核心的Datastore的设计。

--EOF--

分享到:
评论

相关推荐

    appengine-java-sdk-1.3.1 GoogleApp开发的SDK(Java版)

    标题中的"appengine-java-sdk-1.3.1"指的是Google App Engine的Java版本SDK,这是一个用于在Google云平台上开发和部署Java应用程序的工具包。这个SDK包含了运行和测试Google App Engine应用所需的所有组件,包括开发...

    修改appengine-tools-api.jar文件,解决jsp乱码

    appengine-tools-api.jar中文乱码, 修改appengine-tools-api.jar 以实现以UTF-8文件,编译. 使用方法: ...用你下载的包中Application.class替换om.google.appengine.tools.admin包里的Application.class文件

    appengine-java-sdk-1.8.7.zip

    Java版本的App Engine,即我们讨论的"appengine-java-sdk-1.8.7.zip",是Google专门为Java开发者提供的工具包,用于在GAE上开发应用。 **主要组件和功能** 1. **SDK(Software Development Kit)**: SDK包含了开发...

    appengine-java-sdk

    **谷歌AppEngine与Java SDK详解** 谷歌AppEngine(Google App Engine)是一款强大的云计算平台,它允许开发者使用Java、Python、Go或PHP等语言构建并运行Web应用。AppEngine提供了全面的后端服务,包括数据库存储、...

    appengine-java-sdk-1.9.3.part1.rar

    google-appengine-java-sdk-1.9.3 固实压缩, 带恢复记录 总共三个分卷, 此为, part1

    appengine-java-sdk-1.9.3.part3.rar

    google-appengine-java-sdk-1.9.3 固实压缩, 带恢复记录 总共三个分卷, 此为part3

    appengine-java-sdk-1.5.0.1.zip_JDK1.5.0.1_appengine-java-s_appen

    标题中的"appengine-java-sdk-1.5.0.1.zip"表明这是一个关于Google App Engine Java SDK的压缩包,版本号为1.5.0.1。App Engine是由Google提供的一个平台,允许开发者使用Java或Python等语言创建并运行web应用程序。...

    appengine-tools-sdk-1.9.17.zip

    标题中的"appengine-tools-sdk-1.9.17.zip"指的是Google App Engine SDK的一个特定版本,1.9.17。Google App Engine是一个由Google提供的云服务平台,它允许开发者构建、部署和运行Web应用程序。SDK(Software ...

    google-appengine-docs-20110211

    标题“google-appengine-docs-20110211”指的是Google App Engine的文档集合,这是一个特定日期(2011年2月11日)的版本。Google App Engine是Google提供的一个云服务平台,它允许开发者在Google的基础设施上构建、...

    appengine-java-sdk-1.3.0 sdk java 第二部分

    利用免费的GAE(Google App Engine)建立强大的Blog(micolog)网站

    云端代码Google App Engine编程指南 高清带书签

    Google App Engine的架构设计主要分为以下几个部分: 1. 应用程序代码:开发者可以直接在Google提供的环境中运行代码,代码可以是Python、Java等语言编写的。 2. 数据存储:Google App Engine提供了一个名为...

    Google appengine docs文档2010-12-02更新网页版

    《Google App Engine应用开发详解——基于2010年12月02日更新的官方文档》 Google App Engine(GAE)是Google提供的一项云计算服务,它允许开发者在Google的基础设施上运行自己的Web应用程序。2010年12月02日更新的...

    gradle-appengine-plugin-1.9.4.zip

    【标题】"gradle-appengine-plugin-1.9.4.zip" 涉及的是Gradle App Engine插件的版本1.9.4,这是一个用于部署Google App Engine应用程序的工具。Gradle是一款强大的构建自动化系统,它允许开发者通过声明式的方式...

    google app Engine for java中文api

    - Google App Engine最初是专为Python开发者设计的平台,但随着时间的发展,为了满足更广泛开发者群体的需求,Google于2009年4月推出了面向Java开发者的版本——Google App Engine for Java。 - 这一举措极大地...

    appengine-java-sdk-1.9.38.pat1

    appengine for java sdk,需要jdk1.7或jdk1.8,javac compiler 设置为jdk1.7,一共包含3个部分。

    Google App Engine Documentation

    在“google-appengine-docs-20081003”这个压缩包中,可能包含了早期版本(2008年10月3日)的Google App Engine开发指南、API参考、最佳实践和示例代码等内容。这些文档帮助开发者了解如何利用Google App Engine构建...

    GWT 项目开发 1.6.4 本地开发 appengine-tools-api 突破限制

    标题 "GWT 项目开发 1.6.4 本地开发 appengine-tools-api 突破限制" 提及的是Google Web Toolkit (GWT) 的一个特定版本(1.6.4)在本地开发环境中利用appengine-tools-api进行开发时遇到的限制及如何突破这些限制。...

    Google App Engine 最新版 (google_appengine_1.9.91.zip)

    在搭建WebRTC(AppRTC)时,我们会遇到需要部署Google App Engine的难题,并且最近墙的厉害,所以我特地把我珍藏的Google App Engine 最新版(2020-7-5)分享出来,希望可以方便想搭建WebRTC(AppRTC)的同学们

Global site tag (gtag.js) - Google Analytics