thinktt
作者thinktt·2015-11-04 15:17
系统工程师·罗云科技

我的《云计算核心技术剖析》读书笔记之Google App Engine 的架构

字数 2283阅读 1049评论 0赞 0

在介绍了 App Engine的基本情况和使用方法之后,估计大家已经对App Engine的架构产 生了浓厚的兴趣,而本节将会对其进行介绍。同时,我们也应该知道一个产品的架构离不开它 的设计理念,所以本节在深入介绍App Engine架构之前,会先介绍它的一些设计理念。

一、设计理念

在设计理念方面;App Engine主要继承了上面提到的Google的一些设计思想,并根据App Engine实际需求进行调整,主要包括下面这5个方面。

1. 重用现有的Google技术

大家都知道,重用是软件工程的核心理念之一,因为通过重用不仅能降低开发成本,而且 能简化架构。在App Engine幵发的过程中,重用的思想也得到了非常好的体现,比如Datastore 基于Google的BigTable技术,Images服务某于Picasa,用户认证服务利用Google Account, 而Email服务基于Gmail等。

2. 无状态

为了更好地支持扩展,Google没有在应用服务器层存储任何重要的状态,而是主要在 Datastore这层来保持数据的状态,这样当流量突然爆发时,可以通过简单地为应用添加新的应 用服务器来实现扩展。

3. 硬性限制

App Engine对运行在其之上的应用代码设置f很多硬性限制,比如无法创建Socket和线程 等有限的系统资源,这样能保证不让一些恶性的应用影响到临近应用的正常运行,间时也能保 证在应用之间做到一定的隔离。

4. 利用 Protocol Buffer技术

由于应用服务器和很多服务相连,所以有可能会出现异构性的问题,比如应用服务器是用 Java写的,而部分服务是用〇+写的等。Google在这方面的解决方法是提供基于语言中立、平 台中立、町扩展的Protocol Buffer,并且在App Engine平台上所有API的调用都需要在进行RPC 之前被编译成Protocol Buffer的二进制格式。

5. 采用分布式数据库

因为App Engine支撑海量的网络应用,所以采用独立的关系型数据库肯定是不^]■取的,而 且很有可能将面对起伏不定的流*,所以需要一个分布式数据库来支撑海最数据和奄询。

二、架构

图3-8为App Engine的架构图。从这个图中,我们可以看出整个App Engine架构还是比较 简洁的,共分为3个部分:Web、Datastore和服务群。接下来将依次介绍它们。

2123.png

1. Web

Web部分主要用于处理Web相关的请求,主要包括3个模块。

Q前端。既可以认为它是负载均衡器(Load Balancer),也可以认为它是代理(Proxy), 主要负责负载均衡和将具体的Web请求转发给应用服务器。对于一些静态文件(比如图 片、CSS和JS脚本等)的请求,前端会将这种请求转发给对应的类似于CDN (Content Delivery Network,内容分发网络)的静态文件服务器(它将会负责静态文件的存储和 传送)。

□应用服务器。用于装载应用的代码,处理接收到的Web请求,并根据请求的内容来调用 后面的Datastore和服务群。

□管理节点。在应用服务器间调度应用,并将调度之后的情况通知前端。

2. Datastore

它是基于BigTablc技术的分布式数据库,虽然它也可以被理解成一个服务,但是由于它是 整个App Engine对数据进行持久化的地方,所以它是App Engine中一个非常核心的模块。具 体细节将在本章的后半部分和大家讨论。

3. 服务群

整个服务群包括很多服务供AppServer上运行的应用调用,比如Memcache、图形、用户、 URL抓取和任务队列等。

三、流程

这里举一个苦通的HTTP请求的处理流程来帮助大家理解App Engine的架构,具体如下所示。

(1) 用户发送一个HTTP请求。

(2) 前端接受这个请求,并将这个请求转发给一个空闲的应用服务器。

(3) 应用服务器会处理这个请求。

(4) 检査用于处理这个请求的类是不是已经被初始化了。如果没有的话,需要初始化这个类。

(5) 调用服务群中的用户认证服务来对用户进行认证,如果失败的话,需要终止整个清求的 处理工作,并返回无法认证用户的信息。 

(6) 査看这个请求所需的数据是否已经缓存在Memcache中,如果没有的话,将对Datastore 发出査询请求来得到数据。

(7) 通过整合第(6)步得到的数据来生成相关的HTML,并返回给用户。

(8) 由于HTML里面会包含对一些静态文件的引用,比如图片和CSS等,所以当用户收到 HTML之后,还会通过前端读取静态文件服务器里面存储的静态文件。

四、Python版和Java版的区别

在本节最后,稍微解释一下Python版和Java版的App Engine在实现方面的区別。由于大 多数服务都可以被这两个版本共享,包括Datastore,所以两者之间的区别主要集中在应用服务 器端:Python版应用服务器应该是经过Google修改的Python Runtime,版本号应该是2.5.2左 右I而Java版应用服务器是基于Jetty 6的,因为它的体积比最常用的Tomcat更娇小,这样能 使得一台服务器支持更多应用,而且其本身也应该经过Google工程师一定的修改。

可惜的是,由于官方并没有发布关于App Engine架构非常详细的文档,所以本节只能简要 介绍整个架构。但是在本地测试服务器和Datastore这两个模块方面,还是有一定的资料值得挖掘和分析的,所以下面将分别介绍这两个模块的设计。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广