`

Google App Engine的架构

 
阅读更多

在以提供物理资源为目的的 IaaS Infrastructure as a Service )领域里, Amazon EC2是当之无愧的领先者。而在以提供平台为目标的 PaaS Platform as a Service)领域里, Google App Engine 的美誉度是非常高的,我也对其非常关注和爱好,经历我长达一年的学习和钻研,已经对 Google App Engine大致的架构有所了解。希望大家能通过我的介绍能够理解其工作原理,设计的一些 tradeoff和其设计的核心思想,更希望能让大家不要再把 Google App Engine看的过分神秘,它的实现只是一个工程问题,不是一个科学问题(比如, X86芯片的频率超过 4GHz),只要有足够资源作保证,我 敢说其实只需要几十个普通的程序员(中国的),就能基本实现其大多数功能。那么我首先给大家介绍一下 Google App Engine的总体架构。

总体架构

          简单而言,其架构可以用四部分:

1.       前端, 包括 Front End Static Files。主要提供下列功能:

a.       负载均衡;

b.      静态文件的传输;

c.       html的生成;

d.      转发请求给应用服务器。

2.       应用服务器( App Server)。它能同时运行多个应用的 runtime python/java)。

3.       服务群( Service Group)。服务群现在主要包括下列服务:

a.       Datastore

b.        Memcache

c.       Images

d.        User

e.      URLFetch

f.        Email

4.       应用管理节点( App Master)。它主要负责应用的启停和计费。

                                1   Google App Engine架构图 1 (来源: 2009 Google IO

设计理念

重用现有的 Google 技术

     大家都知道,重用是软件工程的核心理念之一,无论是过去的模块化思想还是现在的 SOA,它们核心都是与重用紧密相连的。在 Google App Engine开发的工程中,重用的思想也体现的非常好,比如在 Datastore是基于 Google bigtable技术, Images服务是基于 picasa的, user服务是利用 Google Accounts的,等等。可以这么说,在其这么多模块里面,真的很难找到一个是完全重新开发的。

利用 Protocol Buffers RPC 技术

     应用服务器和很多服务相连,有可能会出现很多问题,最明显的问题就是异构的问题,比如一些服务是用 Java写的,而另一些是用 C++写的。怎么办呢?使用 Web Service版,但 Web Service效率不高怎么办?而一些问题也同样困扰着 Google,而 Google的解决方法是 Protocol BuffersP rotocol buffers -一种可扩展的序列化结构化数据的方式,语言中立,平台中立并被用于通信协议,数据存储等许多方面,并且其速度有可能是 XML 10倍。

Shared Nothing 的架构

     Google App Engine有一个大家都非常称赞的优点,那个优点就是伸缩性很强。那么它是怎么做到的呢?其实它是利用一个说起很简单,但做起来很难的道理。那个道理就是 Shared Nothing。他们通过在 App Server那层做到了 Shared Nothing,而将所有和持久化相关的东西都和 datastore,这样使 App Server那层做到了 scalable,并且 datastore本身就是一个分布式的数据库。当所有的模块都是 scalable的时候,那么我们可以认为 Google App Engine scalable的。

分布式的数据库

     Datastore的实现就是利用 Google BigTable技术,同时也是最有争议的一块。

     BigTable是一个用来存储结构数据的分布式存储系统。与平时常用的数据库不同, BigTable并非一个支持 sql语言的关系数据库,而是 map方式的,列导向的数据库(一列数据连续存储)。 BigTable为读进行了优化,对数据库的读取访问远远大于写入是互联网服务的重要特点。并且 BigTable还利用 Google的分布式文件系统技术( GFS)。

Java版的 Google App Engine

        根据我的推断,其实 Java版和 Python版唯一的确保就是在 App Server端,其实模块应该区别不大,因为 App Server Java code对其他服务的调用都是通过上面提到 Protocol Buffers这个平台无关的协议进行远程调用的,所以 App Server上面的代码是不用关心 Datastore Memcache Images等服务是不是用 Java实现,只要它们起着,就能通过 Protocol Buffers调。

本地 Sandbox开发

      为了方便开发和调试,Google App Engine提供一个本地sandbox。

       通过下面这张图,我们大概能够明白Sandbox的环境和 Production的环境有什么不同了。唯一的不同就在于Implementation不一样。假设程序调用Datastore的服务,如果在 Production的环境下,它会去调真实的Datastore服务,而在Sandbox的环境下,它则会调local stub,也就是一个基于文件的数据库程序。

            

                                2   Google App Engine架构图 2 (来源: 2009 Google IO

未来的 Roadmap

1.       不断推出新的 API,比如 Task Queue XMPP

      Task Queue一般用于离线操作,而 XMPP有可能和 Google Wave有关。

2.       新的语言(估计不可能)

      因为 Google内部仅支持三种语言, C++ Java Javascript,而且推出一个新的语言版本的话,是非常劳师动众的,毕竟 Google App Engine的设计和 Windows Azure的设计是完全不同的。所以短期我认为不大可能支持新的语言。

 

总结

      Google App Engine Google大战略的一个不可分割的一部分,因为 Google希望能通过 Google App Engine来降低 Web应用开发的难度,只要难度降低了,那么 Web应用替代客户端应用的速度将会更快,如果出现这样的情况的话,那么将会对 Google今后的发展非常有利。通过也希望国内兄弟们能尽快推出山寨版的。

参考资料

·       From Spark Plug to Drive Train: Life of an App Engine Request http://code.google.com/events/io/sessions/FromSparkPlugToDriveTrain.html

·       Google AppEngine - A Second Look

http://highscalability.com/google-appengine-second-look

·         Google App Engine Blog

http://googleappengine.blogspot.com/

·         Bigtable: A Distributed Storage System for Structured Data

http://labs.google.com/papers/bigtable.html

·         The Google File System

http://labs.google.com/papers/gfs.html

·         Google发布新版本的 Protocol Buffers

http://www.infoq.com/cn/news/2009/05/google-protocol-buffers

分享到:
评论

相关推荐

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

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

    Google App Engine文档

    总的来说,掌握Google App Engine需要理解其服务架构、数据存储方式、自动缩放机制以及与其他Google Cloud Platform服务的集成。开发者还需要熟悉所选编程语言的App Engine SDK和最佳实践,以便高效地构建和维护云...

    Using Google App Engine

    ### 使用Google App Engine:深入解析与实践 #### 核心知识点概述 Google App Engine(GAE)是Google推出的一款用于构建和托管Web应用的平台服务,它为开发者提供了丰富的工具和资源,使得开发者能够轻松地在...

    Google App Engine的一些限制

    ### Google App Engine的一些限制 Google App Engine (GAE) 是Google Cloud Platform的重要组成部分之一,它为开发者提供了构建高效、可扩展的应用程序的平台。本文旨在详细介绍GAE在资源使用方面的一些关键限制,...

    Google App Engine for Java 中文指南

    Google App Engine for Java 是一个平台,允许开发者使用Java语言构建并托管网络应用程序,该平台运行在Google的强大可扩展基础设施上。这个平台的核心特性是它的Java运行时环境,它基于Java 6虚拟机(JVM),并且...

    Using Google App Engine.2009.pdf

    Google App Engine是一个由谷歌提供的云服务平台,它允许开发者在谷歌的基础架构上构建和部署应用程序。 #### 什么是Google App Engine? Google App Engine是一种完全托管的开发和部署平台,允许开发者构建可扩展...

    Programming Google App Engine, 2nd Edition

    1. **环境介绍**:首先,书籍会介绍Google App Engine的基础概念,包括其运行环境、服务架构以及与传统Web开发的区别。 2. **开发工具**:书中会讲解如何使用Google的开发工具,如App Engine SDK,进行项目设置、...

    云端代码:利用Google AppEngine编程

    ### 云端代码:利用Google AppEngine编程 #### 一、Google AppEngine简介 Google App Engine (GAE) 是由谷歌提供的一种云平台服务,它允许开发者构建和部署应用程序在谷歌的基础架构上运行。与传统的应用开发相比...

    Programming Google App Engine - Dan Sanderson

    Google App Engine是Google提供的一种云平台服务,允许开发者在Google的基础架构上构建和托管Web应用程序。 #### 描述解读 - **Programming Google App Engine**:描述与标题相同,强调了本书的主要内容是如何通过...

    云端代码Google App Engine编程指南

    Java应用的配置文件是`appengine-web.xml`,用于定义应用属性和服务。 **三、Google App Engine的关键特性** 1. **数据存储:Cloud Datastore** App Engine的NoSQL数据库,提供强一致性读取和最终一致性写入。...

Global site tag (gtag.js) - Google Analytics