- 浏览: 318616 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
完善自我:
支持一下!
揭秘IT人才特点:中美印日四国程序员比较 -
悲剧了:
好文,看玩thinking in java的提到的异常处理,看 ...
高效的Java异常处理框架(转) -
yin_bp:
开源框架bbossgroups页支持组件异步方法调用哦,详情请 ...
Spring 3中异步方法调用 -
flyjava:
sun的悲哀
Apache怒了,威胁说要离开JCP
在以提供物理资源为目的的 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 Buffers。P 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
原文:http://feiibm.blog.sohu.com/124693385.html
发表评论
-
Qi4j和NoSql运动
2010-11-16 23:00 162524日一篇Qi4j and the NoSQL ... -
Threaded vs Evented Servers
2010-11-16 22:48 956Threaded vs Evented Servers ... -
BASE: An Acid Alternative
2010-11-16 21:13 983In partitioned databases, tra ... -
eBay 的Scalability最佳实践
2010-11-16 20:52 931用什么来衡量一天没 ... -
Scalability Best Practices: Lessons from eBay
2010-11-16 20:45 874At eBay, one of the primary a ... -
SmugMug 的架构介绍
2010-11-16 20:36 899本文介绍的 SmugMug 是一家提供付费图片 ... -
来自淘宝的架构经验
2010-11-16 18:07 1248日前参加了一场淘宝网 架构师黄裳带来的技术分享,在最后他 ... -
可伸缩性最佳实战
2010-11-16 17:50 607异步 同步调用使得组件和组件之间紧密耦合起来,这样就使得 ... -
伸缩性和可用性反模式
2010-11-16 17:48 740这篇文章讲了伸缩性 和可用性方面的反模式,也按照自己的理 ... -
使用qi4j实现DCI架构
2010-11-16 17:24 2933我曾经DCI架构是什么? 在一文中提到Qi4j框架实现DCI ... -
DCI架构是什么?
2010-11-16 17:07 2050DCI是数据Data 场景Context 交互Interact ... -
纵向扩容 vs. 横向扩容
2010-11-02 09:58 5441该文原版著作权属于Malc ... -
云计算在电信应用中的思考
2010-11-01 17:59 971云计算是在网格(Grid)、效用(Utility)和 ... -
真正的线性可伸缩性需要新的模式和中间件架构吗?
2010-11-01 17:27 978在构建线性可收缩应用 ... -
性能与可伸缩性的概念及其关键影响因素
2010-11-01 17:22 1158性能与可伸缩性常常决定企业应用的成败,尤其在 ... -
构建的可伸缩性和达到的性能
2010-11-01 17:19 1009实现伸缩性和性能调优的经验所保有的价值容易被低估。两者都是“晚 ... -
可伸缩性的最差实践
2010-11-01 17:02 796引言 在扩展大量大型 ... -
可伸缩性,美妙的可伸缩性
2010-11-01 16:37 1439可伸缩性带来的好处 ... -
大型门户网站架构设计的可伸缩性
2010-11-01 16:34 911我们知道,对于一个大型门户网站来说,可伸缩性是非常重要的,怎么 ... -
可伸缩性设计
2010-11-01 16:27 1012好的设计是实现高度可 ...
相关推荐
Google App Engine的架构设计主要分为以下几个部分: 1. 应用程序代码:开发者可以直接在Google提供的环境中运行代码,代码可以是Python、Java等语言编写的。 2. 数据存储:Google App Engine提供了一个名为...
总的来说,掌握Google App Engine需要理解其服务架构、数据存储方式、自动缩放机制以及与其他Google Cloud Platform服务的集成。开发者还需要熟悉所选编程语言的App Engine SDK和最佳实践,以便高效地构建和维护云...
### 使用Google App Engine:深入解析与实践 #### 核心知识点概述 Google App Engine(GAE)是Google推出的一款用于构建和托管Web应用的平台服务,它为开发者提供了丰富的工具和资源,使得开发者能够轻松地在...
### Google App Engine的一些限制 Google App Engine (GAE) 是Google Cloud Platform的重要组成部分之一,它为开发者提供了构建高效、可扩展的应用程序的平台。本文旨在详细介绍GAE在资源使用方面的一些关键限制,...
Google App Engine for Java 是一个平台,允许开发者使用Java语言构建并托管网络应用程序,该平台运行在Google的强大可扩展基础设施上。这个平台的核心特性是它的Java运行时环境,它基于Java 6虚拟机(JVM),并且...
Google App Engine是一个由谷歌提供的云服务平台,它允许开发者在谷歌的基础架构上构建和部署应用程序。 #### 什么是Google App Engine? Google App Engine是一种完全托管的开发和部署平台,允许开发者构建可扩展...
1. **环境介绍**:首先,书籍会介绍Google App Engine的基础概念,包括其运行环境、服务架构以及与传统Web开发的区别。 2. **开发工具**:书中会讲解如何使用Google的开发工具,如App Engine SDK,进行项目设置、...
### 云端代码:利用Google AppEngine编程 #### 一、Google AppEngine简介 Google App Engine (GAE) 是由谷歌提供的一种云平台服务,它允许开发者构建和部署应用程序在谷歌的基础架构上运行。与传统的应用开发相比...
Google App Engine是Google提供的一种云平台服务,允许开发者在Google的基础架构上构建和托管Web应用程序。 #### 描述解读 - **Programming Google App Engine**:描述与标题相同,强调了本书的主要内容是如何通过...
Java应用的配置文件是`appengine-web.xml`,用于定义应用属性和服务。 **三、Google App Engine的关键特性** 1. **数据存储:Cloud Datastore** App Engine的NoSQL数据库,提供强一致性读取和最终一致性写入。...