章节知识路线
- 12.1 简介
- 12.2 云计算
- 12.3 沙盒和App Engine SDK
- 12.4 选择一个App Engine框架
- 12.5 Python 2.7支持
章节主张:Google App Engine 章的核心不是某个平台功能清单,而是让你理解托管平台如何重新塑造部署、扩展和架构约束。
中文释读:云平台为你省掉部分运维,但也带来沙盒、平台特性和锁定边界。本章非常适合用来训练技术决策里的 ROI 与依赖判断。
把 12.1 简介 放回本章上下文,它更像是 结构化数据交换与系统边界 的一个具体落点。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 12.1 简介 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
第 12 章 云计算:Google App Engine 471 使用 XMPP 发送即时消息; 处理图片; 任务队列(非定期任务); 使用 Appstats 进行分析; URLfetch 服务; 问与答(无 Python 实现) ; 厂商锁定; 资源。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 12.2 云计算 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
第 12 章 云计算:Google App Engine 471 使用 XMPP 发送即时消息; 处理图片; 任务队列(非定期任务); 使用 Appstats 进行分析; URLfetch 服务; 问与答(无 Python 实现) ; 厂商锁定; 资源。 12.1 简介 接下来要介绍的开发系统是 Google App Engine。 App Engine 不提供类似 Django 的全栈 框架(尽管可以在 App Engine 中运行 Django,后面会介绍),这是一个开发平台,最初专注 于 Web 应用(其有自己的微型框架,即 webapp,或其替代品,即新的 webapp2),但 App Engine 仍然可以构建通用的应用和服务。
476 第 2 部分 Web 开发 图 12-3 Google App Engine 应用的系统状态页面(图片由 Google 提供) 12.3 沙盒和 App Engine SDK 开发者都不会希望别人的应用能访问他的应用的源代码或数据,其他应用也同样如此。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 12.3 沙盒和App Engine SDK 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
476 第 2 部分 Web 开发 图 12-3 Google App Engine 应用的系统状态页面(图片由 Google 提供) 12.3 沙盒和 App Engine SDK 开发者都不会希望别人的应用能访问他的应用的源代码或数据,其他应用也同样如此。 在沙盒中有一些无法绕过的限制(如果某些行为现在认为是安全的,Google 会取消这些限 制)。 禁止的行为包括但不限于下面这些。
第 12 章 云计算:Google App Engine 479 12.4 选择一个 App Engine 框架 如果编写不是面向用户的应用,也就是说,仅仅编写一个让其他应用调用的应用,那么 选择框架就不那么重要。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 12.4 选择一个App Engine框架 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
第 12 章 云计算:Google App Engine 479 12.4 选择一个 App Engine 框架 如果编写不是面向用户的应用,也就是说,仅仅编写一个让其他应用调用的应用,那么 选择框架就不那么重要。 目前,有多个框架可供选择,如表 12-2 所示。 表 12-2 用于 Google App Engine 的框架 框 架 描 述 webapp、webapp2 App Engine SDK 自带的轻量级 Web 框架 bottle Python 中的一个轻量级 WSGI 微型 Web 框架;附带 App Engine 适配器(gae) Django Django 是一款流行的 Python 全栈 Web 框架(在 GAE 中并非所有功能都可用) Django-nonrel 用于在非关系数据存储(如 GAE)上运行 Django 应用程序 Flask 另一个微型框架(像上面的“bottle”),基 于 Werkzeug & Jinja2(像下面的 Kay),易于定制,没有 本地数据抽象层,直接使用 App Engine 的 Datastore GAE Framework 基于 Django,但是简化过。
第 12 章 云计算:Google App Engine 485 示例 12-3 应用主程序的一些清理工作(main.py) 清理内容及原因 1. 不希望在每次运行应用的时候实例化 WSGIApplication。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 12.5 Python 2.7支持 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
第 12 章 云计算:Google App Engine 485 示例 12-3 应用主程序的一些清理工作(main.py) 清理内容及原因 1. 不希望在每次运行应用的时候实例化 WSGIApplication。 将其从 main()函数中移入全局 代码块中,只实例化该类一次,而不是每次请求都实例化。 这样能带来一些性能提升, 虽然不大,但无论是否是 App Engine 或其他框架,在每个 Python 应用中都能做这样类 似的简单优化。
第 12 章 云计算:Google App Engine 487 注意, app.yaml 文件指向了 main.py 中的应用程序对象 main.application。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 12.6 与Django比较 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
第 12 章 云计算:Google App Engine 487 注意, app.yaml 文件指向了 main.py 中的应用程序对象 main.application。 关于 Python 2.5 和 Python 2.7 版本之间 main.py 的更多差异可以参考:http://code.google.com/appengine/docs/ python/tools/ webapp/overview.html。 关于使用 Python 2.7 版运行时以及刚刚介绍的相关差异的更多信息,可以查看这篇文档, 链接为 http://code.google.com/appengine/docs/python/python27/using27.htm。
为什么很多平台方案一开始感觉特别顺手,后来却变得难换?