描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787519806811
编辑推荐
本书介绍了如何使用Google App Engine在云中构建高度可扩展的Python应用程序。
内容简介
产品特色本书介绍了中高级Web和移动App的开发者如何使用Google App Engine在云中构建高度可扩展的Python应用程序。App Engine是Google云平台的旗舰产品,它可以在基础架构上托管你的应用程序,并随流量自动增长,*限度地降低前期成本,并吸引意料之外的访客。你将学习如何使用App Engine服务和开发工具执行常见的开发任务,包括部署和维护。App Engine的Python支持包括一个快速的Python 2.7解释器、标准库和基于WSGI的运行时环境。这些组件为许多流行的Web应用程序框架所用,包括Django和Flask。主要内容?通过一个示例应用程序来指引你亲自动手实践App Engine相关的工具和功能。?在开发机器上使用Google Cloud SDK中的工具模拟App Engine。?将应用程序结构化为可单独寻址的模块,每个模块都有自己的可扩展配置。?利用可扩展的Cloud Datastore的强大功能,进行查询、事务和使用ndb库进行数据建模。?在App Engine应用程序中,将 Cloud SQL用于标准关系数据库。学习如何在 Google 基础架构上部署、管理和监测应用程序。
目 录
前言.1第1章Google App Engine 简介11运行时环境12静态文件服务器.14前端缓存14云数据存储15实体与属性16查询和索引16事务.17服务18Google 帐户,OpenID 和OAuth20Google 云端点21任务队列和定时任务21命名空间22开发者工具23云控制台24开始开发应用程序.24第2章创建应用程序26设置Cloud SDK26安装Python.27安装Cloud SDK.28使用Cloud SDK 进行身份认证29安装App Engine SDK.29开发应用程序30用户偏好模式.31简单的应用程序32Webapp 框架概述34模板、用户和Google Accounts .36使用Python 的虚拟环境.41数据存储模型和Web 表单.45开发服务器控制台48用内存缓存进行缓存49Python 交互式控制台50注册应用程序51上传应用程序52测试应用程序52启用计费功能54第3章配置应用程序55App Engine 架构56配置Python 应用程序58运行时版本59应用程序ID 和版本59多线程.61请求处理程序61静态文件和源文件.63MIME 类型65缓存过期65域名67Google Apps .69配置安全连接71与自定义域的安全连接73对Google Accounts 认证75环境变量76入站服务77自定义错误响应.78Python 库.79内置的处理程序.81Includes 82第4章请求处理程序和实例.84运行时环境85沙盒.86配额和限制86Python 运行时环境92请求处理程序抽象.94实例概述96请求调度和等待延迟98预热请求99常驻实例.100实例类与利用率102实例小时和计费103实例控制台面板103流量拆分.104第5章使用模块.106布局示例.107配置模块.108手动扩展和基本扩展.109手动扩展和版本.110启动请求. 111关闭钩子. 111后台线程.113模块和开发服务器114部署模块.114使用URL 定位模块.116调用其他模块的模块117模块的URL 和安全连接118模块的URL 和自定义域118分发请求到模块119启动和停止模块120管理和删除模块和版本120模块API121一个完整的例子122第6章数据存储实体.125实体,键和属性126数据存储中的Python API 128属性值131字符串,文本类型和字节型132未设置值和空值.132多值属性133键和键对象.134实体的使用.136使用键来获得实体136检查实体对象137保存实体138删除实体139分配系统ID 139开发服务器和数据存储140第7章数据存储区查询142查询和类型.143查询结果和主键143查询API144Query 类145GQL147检索结果151主键查询153数据索引.154自生成索引与简单查询156全实体的类型157单等式过滤器157大于或者小于过滤器158单排序条件159实体键查询162无类型查询162自定义索引和复杂查询163多个排序条件163多属性过滤164多个相等过滤器.168不等式过滤器和IN 过滤器170未设置和无索引的属性171排序顺序和值类型172多值属性查询173代码中的多值属性173多值属性的等式过滤器175多值属性和不等式过滤器.176多值属性排序条件177深入研究索引179查询游标.180投影查询.183配置索引.186第8章数据存储事务.188实体和实体组190键,路径和祖先.192祖先查询193事务中的操作195事务读取操作195终一致性读取.196Python 中的事务196事务中的实体更新199事务中的实体读取201批量更新操作202索引在事务中的更新.203跨组事务.204第9章ndb 数据建模.206模型和属性.207属性声明.208属性值类型209属性校验210无索引属性212自选值.213重复属性214序列化属性215结构化属性216计算属性217模型和模式迁移.218建模关系.219模型继承.220查询和聚合模型221创建自己的属性类223验证属性值223编组值类型224接受参数226实现自选值228自动化批处理230自动化缓存.231设置类型的缓存策略232设置复杂的缓存策略233忽略重复缓存调用234第10 章数据存储管理235审查数据存储235管理索引.237在App 中访问元数据239查询统计239查询元数据241索引状态和查询.241实体组的版本列表242远程控制.243设置远程API 244使用远程shell 工具244在脚本中使用远程API 245第11 章App Engine 上使用Google Cloud SQL . 248选择Cloud SQL 实例249本地安装MySQL.250安装MySQLdb 库.251创建Cloud SQL 实例252从自己的计算机连接至实例254创建数据库.256从App Engine 连接到数据库258备份和恢复.262导出和导入数据262gcloudsql 命令264第12 章内存缓存266使用Python 调用内存高速缓存.267键和值268设置值268设置含有效期的值269添加和替换值269取值270删除值270锁定被删除的键.271原子性递增和递减271比较和设置.272对内存缓存的批量调用273内存缓存管理275高速缓存统计276刷新存储缓存277第13 章Fetch URL 和网络资源.278获取URL279传出HTTP 请求.281关于URL 281HTTP 方法和有效负载.281请求头部282SSL 上的HTTP(HTTPS).282请求和响应长度283请求期限.283处理重定向.284响应对象.284第14 章发送和接收Email285发送Email 消息.286从开发服务器发送Email 287发件人地址288收件人.289附件290发送Email.290接收Email 消息.294第15 章使用XMPP 发送和接收即时消息.297 邀请用户聊天298发送聊天信息299接收聊天信息301聊天处理命令303处理错误消息304管理状态.305管理订阅306管理在线状态更新308查看在线状态310第16 章任务队列以及调度任务312配置任务队列315任务入队.316任务参数.318负载318任务名.319倒计时和剩余时间320入队队列.320任务请求321处理速率和令牌桶322获取推送任务324出队队列.326任务入队到出队队列326租赁和删除任务.327重试拉取队列任务328事务任务入队328任务链330任务队列管理336延迟工作.336定时任务.338配置计划任务339指定计划340第17 章服务调用优化342异步调用服务343Python 中的异步调用345AppStats 的可视化调用.353安装AppStats355使用AppStats 控制台357第18 章Django Web 应用框架360使用内建Django 库362创建Django 项目362与App Engine 连接363创建Django App 365使用Django 模板367在Django 中使用ndb368将ndb 和WTForms 一起使用369使用更新版本的Django375在Django 中使用Google Cloud SQL 376第19 章管理请求日志380记录日志.381查看近期日志382下载日志.383日志保留.385在应用中查询日志记录385刷新日志缓存387第20 章部署和管理应用.389应用上传.390选择版本.390管理服务配置392设置App Engine 393开发者管理.394配额和结算.395获取帮助.396
前 言
前言在互联网中,传播是迅速而短暂的。一个热门的新闻网站提到你的网站,立即可以给你带来300000个潜在客户,他们都希望了解你是谁以及你能够提供什么。但是,如果你只是一家刚起步的小公司,你的软硬件不太可能有能力处理这种流量。你明智地建立你的网站,来处理在你的前六个月里真正期望的每小时3万次的访问。在高负载下,该系统甚至无法将公司的logo展示给其他270000个用户。而在访问流量减弱后,这些潜在的客户不太可能再回来访问网站了。解决这个问题的关键并不是在天就花费时间和金钱去建立能服务上百万的访问者的系统,因为该系统在随后的几个月里每天仅仅服务几千人。如果不及时开发一个大系统时,你会错过顾客的反馈来改善你的产品的机会。早期开发大系统的风险就是,开发了一些客户不想要的功能。从历史上看,小公司从来不会在天就访问大的服务器。它们的选择是建立小的系统,并且当它们成长的时候,系统的停用不会损害公司的名誉。幸运的公司能找到融资者,得到了新一轮的投资,并停止新功能开发来重建更大容量的产品。然而,有些公司并不是这么幸运。现在,公司又有了其他的选择。大型互联网公司(例如亚马逊,Google和微软)会通过采用按次付费的模式来租赁部分大容量系统。公司网站的服务来自于这些有足够的能力处理突发流量的大型系统,且运行非常成功。由于你只要为你所使用的资源付费,所以在流量低的时候就不会有前期投资的浪费。随着用户的增长,成本也会成比例增长。Google提供的系统统称为Google Cloud Platform,由一组高性能的服务和工具构成,包括各种规模的虚拟机,多种形式的可靠数据存储,可配置的网络,自动缩放架构,甚至是运行Google产品的大数据分析工具。但Google Cloud Platform(谷歌云平台)不仅仅提供Google架构的接入。它封装了应用架构的好的实际应用,Google的工程师已经在自己的产品中反复使用过这些应用架构。Google Cloud Platform的核心是Google App Engine,它是一个自动增长的应用托管服务。App Engine运行应用程序使每个访问的用户都可以得到和其他每个用户相同的体验,无论同时存在的用户是几十还是几千。应用程序代码只关注用户个人体验。App Engine负责大规模计算任务,例如负载平衡、数据复制和容错处理。在传统的系统个数据库服务器过度增长时,可扩展的模型发挥了重要的作用。使用此系统,添加负载平衡的Web服务器和高速缓存层可以让应用程序更健壮,但是当你的应用程序需要在不止一个地方写数据的时候,你就面临着难题。当应用开发到依赖数据库软件的功能的阶段,且数据库软件不打算在多台机器上分布数据时,问题更严重。如果事先根据云平台(Cloud Platform)模型考虑数据,你可免于重建整个系统了。经常被忽视的一个优点是,App Engine的执行模型有助于分布计算以及数据。App Engine擅长于将计算资源快速地分配成小任务。这种方式初设计是用于优先响应客户的情况下来处理用户的网络请求。将此执行模型与Cloud Platform的任务队列服务相结合,中等至大的计算任务就可以被分解成并行执行的块。如果任务执行失败,系统会不断地重新尝试执行这些任务,直到成功为止,这使得任务弹性面对服务失败。这种执行模型使得设计者积极优化平台的并行性和强壮性。在Google的框架上运行意味着不需要搭建服务器,更换有问题的硬盘,或解决网卡。你不必在半夜因为一个ISP的小问题发出的警报而被警报器叫醒。使用自动扩展,你也不必因为流量的增加而添加新的硬件。Google Cloud Platform和App Engine让你专注于应用程序的功能和用户体验。使用云平台,你可以更早地推出系统,得到大量的关注,留住用户,并在用户的帮助下开始改善产品。应用程序的规模与用户规模增长到与谷歌级别成一定比例时,不必重建一个新的系统架构。与此同时,你的竞争对手仍然在绞尽脑汁地补救程序和配置数据库中。在本书的帮助下,你将学会如何在Google Cloud Platform上开发Web应用程序,以及如何充分利用App Engine的可扩展的执行模型。本书的主要部分讨论谷歌的云数据存储(Google Cloud Datastore),它是一个强大的数据存储服务,与过去数十年在网络开发中占主导地位的关系型数据库有所区别。应用程序模型和数据存储的结合代表了对于Web应用程序的新的思维方式,尽管几乎和熟知的模型一样简单,但仍旧需要重新思考我们之前忽略的一些原理。App Engine的简史如果你读到这里,可能会好奇为什么本书被称为Google App Engine编程,而不是Google Cloud Platform编程。简要的回答是,整个云平台的功能对于一本书来说太广泛了。特别是,计算引擎平台原始虚拟机能力,可以完成各种各样的功能,而不仅是服务于Web应用程序。根据若干统计(至少是我的),App Engine开始是作为一个早期的云平台理念,后来发展到包括大型且可弹性的计算。当它于2008年次推出的时候,App Engine托管Python编写的Web应用程序,它具有可扩展的数据存储、任务队列服务和应用程序代码的API,这些API将在运行应用代码(如网络访问)的“容器”之外。Java“运行时环境”紧随其后,使用相同的可扩展的框架运行基于Java Servlet的Web应用程序。容器化的程序代码、无模式数据存储和面向服务的架构,证明它不仅是一种建立可扩展Web应用程序很好的方式,还是使App Engine产品可靠的一个关键部分(不会再报假警)。App Engine不断发展,在功能方面有几个主要的里程碑。个里程碑是数据存储的大升级,采用了一种新的基于Paxos的复制算法。新算法改变了API保证数据一致性的方式,因此它被作为一个选择迁移(包括自动迁移工具)发布。另一个重要的里程碑是由CPU使用计费的独立请求,转变为通过实例的运行时间计费的长期运行的应用程序实例。使用升级的执行模型,应用程序代码可以推动准备工作发生在用户的请求逻辑之外,并且利用本地存储高速缓存。Google将计算引擎作为一个单独的产品,是为了通用目的按需访问计算的方式。使用计算引擎虚拟机(Compute Engine VM),你就可以运行任何64位基于Linux的操作系统,并将任何语言编写的执行代码编译(或解释)到该操作系统。应用程序是否在App Engine上运行,都能调用计算引擎(Compute Engine)启动任何数量的虚拟机,完成任务,并且不再需要时关闭机器,或按传统的或自定义配置里让它们运行。App Engine和Compute Engine采取不同的方法来提供不同的功能。但这些技术已经开始融合。2014年年初,Google宣布托管虚拟机(Managed VMs),以一种类似于App Engine方法的新方式来运行基于VM的代码(当我写这本书的时候这个功能不是完全可用的,但可以检查Google Cloud Platform网站的更新)。总之,你可以尽可能多地采用你需要的平台来实现你的目标,在必要的时候弹性投资,并且让平台自动处理其他的事情。本书是在App Engine的历史转折点完成的。App Engine初构建的服务正在被推广到云平台,并给出了REST API,所以你也可以在平台外调用它们。App Engine开发工具正在增加,有一个新的Cloud SDK和Cloud Console。我们甚至看到用基于源代码的版本控制集成Git的新方法来开发和部署软件。正如任何一本关于不断发展的技术的书,下面是一个简介,重点放在主要概念和持久的主题。这本书的重点是使用App Engine创建Web应用程序和平台相关的部分,特别是云数据存储(Cloud Datastore)。我们将讨论当前App Engine专用的服务,如获取网址和发送Email。我们还将讨论如何使用任务队列和离线进程来组织和优化应用程序,以及充分利用Google App Engine。如何使用本书本书包括App Engine的Python编程语言的运行时环境。Python运行时环境为Python语言提供了一个快速的编译,并包含了所有App Engine功能的Python库。它与许多主要的开源Web应用框架兼容,如Django和Flask。App Engine支持三种其他的运行时环境:Java、PHP和Go。Java支持包括一个完整的Java Servlet环境,其中JVM能够运行Java和其他语言的编译器生成的字节码。PHP环境使用标准库运行一个原生PHP解释器且可以将其进行许多扩展,并能够运行许多现成的PHP应用程序,如WordPress和Drupal。使用Go运行时环境,App Engine在服务器上编译你的Go代码并以本地CPU速度执行它。本书中包含的信息原来是被包含在一本书中,即《Programming Google App Engine》,其中也包括Java。为了让读者更容易找到自己熟悉语言的相关信息,这本书分成特定语言的版本。你正在阅读的是Python版本。《Google App Engine编程(Java版)》包含相同的内容,并包括与Java相关的特定主题。我们将来可能写这本书的PHP版本和Go版本。目前,官方的App Engine文档是在平台上使用这些语言的资源。如果你对这本书的PHP或Go版本有兴趣的话,可以发送电子邮件到[email protected]。本书是结构化的,这样你可以跳转到自己关心的主题。导论部分提供了一个铺垫,并且为你使用一些功能提供完整的示例。后续章节介绍了App Engine的各种功能,重点是高效的数据存储和恢复、通信和分布式计算。同时也涉及项目生命周期的相关主题,如部署和维护。云数据存储(Cloud Datastore)是一个非常大的主题,因此有多个章节介绍相关内容。从第6章开始,介绍了数据存储的概念和与这些概念相关的Python API数据库概念。Python实例使用Cloud SDK提供的n d b数据建模。数据建模有单独的章节(第9章)。下面是本书各章节的主要内容:第1章,Google App Engine简介Google App Engine及其组件、工具和主要功能的高级概述,以及Google Cloud Platform整体介绍。第2章,创建应用程序Python的入门教程,包括建立开发环境、使用模板引擎建立网页、设置帐户和域名,以及部署应用程序到App Engine的说明。应用教程演示了几个App Engine功能——谷歌帐户(Google Accounts)、数据存储和高速缓存,实现了许多Web应用程序常用的模式:存储和检索用户的偏好。第3章,配置应用程序描述App Engine如何处理接收的请求,以及如何配置此行为。这里介绍了App Engine的体系结构、前端的各种功能、应用程序服务器和静态文件服务器。该章介绍了前端如何把请求发送到应用程序服务器和静态文件服务器,以及管理安全连接和谷歌帐户的身份验证(Google Accounts)和授权。本章还讨论了配额和限制,以及如何通过设置预算来提升它们。第4章,请求处理程序和实例对App Engine如何运行代码进行更深入地检测。App Engine将接收的网络请求发送至请求处理程序。请求处理程序在容器中长期运行被称为实例。App Engine创建并销毁实例以适应用户流量的需求。用户可以通过编写线程安全代码和启用多线程功能更好地使用你的实例。第5章,使用模块模块的方式使得用户可以将自己的应用程序构建为部件的集合,其中每个部件都有它自己的扩展属性和性能特点。本章全面地介绍模块相关内容,包括各种缩放选项、配置、用户维护应用程序模块的工具和API。第6章,数据存储实体本书使用几章介绍云数据存储(Cloud Datastore),这是章。它是可扩展对象的数据存储系统,支持本地事务和一致性保证的两种模式(强模式和终模式)。本章介绍了数据实体、键和属性,以及使用Python API从App Engine创建、更新和删除实体。第7章,数据存储查询本章介绍了云数据存储查询和索引,以及用于查询的Python API。本章详细介绍了查询引擎的功能,以及各功能如何使用索引。本章还讨论了如何定义和管理索引应用程序的查询。本章还涉及一些高级功能,如查询游标和投影查询。第8章,数据存储事务本章介绍如何使用事务保持数据的一致性。云数据存储在可扩展环境中使用本地事务。你的应用程序将采用事务性单元的形式布置其数据项称为实体组。本章试图提供一个关于数据库如何更新数据,以及如何设计你的数据和应用程序来更好地利用这些功能的完整解释。第9章,ndb数据建模如何在你的数据模式下使用Python ndb数据建模执行不变量。数据库本身是无模式的,这是它可扩展性的一个基本方面。你可以使用App Engine的数据建模接口来自动执行数据模式。第10章,数据存储管理管理和改进应用程序的数据存储数据。Cloud Console、SDK工具和管理API提供了无数种数据视图以及与有关数据(元数据和统计数据)的信息。你可以以编程方式访问这些信息,因此可以建立自己的管理面板。本章还讨论了如何使用远程应用程序接口(Remote API),即代理构建在本地计算机上运行的管理工具,但可以访问应用程序的线上服务。第11章,App Engine上使用Google Cloud SQLGoogle Cloud SQL对MySQL数据库实例进行全面管理。你可以将Cloud SQL作为App Engine应用的关系数据库使用。本章完整地介绍创建SQL实例、创建数据库、准备本地开发环境,并将App Engine连接到Cloud SQL。本章还讨论了Cloud SQL的突出特点,如备份、导出和导入数据。Cloud SQL补充了Cloud Datastore和Cloud Storage(云数据存储和云存储)作为持久性存储的新选择,特别是当你需要一个关系数据库时,Cloud SQL是一个高性能的选择。第12章,内存缓存App Engine的内存缓存服务(“memcache”)以及Python API。积极的缓存对于高性能Web应用来说是必不可少的。第13章,获取URL和网络资源如何通过使用URL获取服务经HTTP访问Internet上的其他资源。Python应用程序可以直接使用API以及通过Python的标准库来调用此服务。第14章,发送和接收Email消息如何使用App Engine服务发送Email。本章涉及通过使用请求处理程序接收由App Engine转发的Email。本章还讨论使用API中的工具创建并处理消息。第15章,使用XMPP发送和接收及时信息如何使用App Engine服务向XMPP兼容服务(例如,Google Talk)发送即时消息,以及如何通过请求处理程序接收XMPP消息。本章讨论了几个主要的XMPP活动,包括管理在线(Presence)。第16章,任务队列及任务调度如何使用任务队列执行用户请求之外的工作。任务队列通过在多个应用程序服务器上运行代码并行执行任务,也可以在不与用户交互的情况下以定期调度的方式执行任务。第17章,优化服务调用对优化技术的总结。此外,还包括异步服务调用相关的详细信息。如果使用异步服务调用,当服务在后台处理数据时,应用程序可以继续完成自己的工作。本章还描述了AppStats,它是一个可视化应用程序的服务调用行为并发现性能瓶颈的重要工具。第18章,Django Web应用框架如何在Python运行时环境下使用Django Web应用框架。本章讨论了在运行时环境中的Django库创建项目,以及使用Django功能(例如组件组合、URL映射、视图和模板)。它还探讨了如何使用一个比内置在运行时环境中的更新的Django版本。本章介绍了WTForms,它是一个网络表单框架,具有与App Engine的ndb数据建模库集成的特殊功能。第19章,管理请求日志所有你需要了解的日志信息、在Cloud Console上浏览和搜索日志数据,以及管理和下载日志数据相关全部信息。本章还介绍了Logs API,它是指应用程序本身以编程的方式来管理日志。第20章,部署和管理应用如何向App Engine上传并运行应用程序,如何使用应用程序版本更新和测试应用程序,以及如何管理和监测正在运行的应用程序。本章还介绍了Cloud Console的其他维护功能,包括计费。本章后给出了一个网址列表,遇到问题可以到其中寻找帮助信息或者进一步深入阅读。Safari? Books OnlineSafari Books Online(http://safaribooksonline.com)是应需而变的数字图书馆,它同时以图书和视频的形式出版世界技术和商务作家的专业作品。Safari Books Online是技术专家、软件开发人员、Web设计师、商务人士和创意人士开展调研、解决问题、学习和认证培训的手资料来源。Safari Books Online为企业(https://www.safaribooksonline.com/enterprise/)、政府部门(https://www.safaribooksonline.com/government/)、教育机构(https://www. safaribooksonline.com/academic-public-library/)和个人提供了多种套餐和价格(https://www.safaribooksonline.com/pricing/)。订阅者可以在一个完全可搜索的全文数据库中访问上千种图书、培训视频和正式出版之前的书稿。这些内容由以下出版社提供:O ’ R e i l l y M e d i a 、 Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、 Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、 Morgan Kauf-mann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、 Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology等(https://www.safaribooksonline.com/our-library/)。关于Safari Books On-line的更多信息,请访问我们的网站(http://www.safaribooksonline.com)。联系方式请把你对本书的意见和疑问发给出版社:美国:O’Reilly Media, Inc.1005 Gravenstein Highway North Sebastopol, CA 95472中国:北京市西城区西直门南大街2号成铭大厦C座807室(100035)奥莱利技术咨询(北京)有限公司我们已为本书提供主页,其中提供勘误表、示例及其他相关信息。读者可以通过http://bit.ly/google-app-python访问本书的主页。读者可以从作者的网站http://www.dansanderson.com/appengine下载大量的示例代码和其他信息。评论本书或者询问相关的技术问题,可以将Email发送至[email protected]。欲得到我们的书、课程、会议和新闻相关的信息,可参见我们的网站:http://www.oreilly.com http://www.oreilly.com.cn我们的Facebook地址:http://facebook.com/oreilly我们的Twitter地址:http://twitter.com/oreillymedia我们的YouTube地址:http://www.youtube.com/oreillymedia致谢我很感激App Engine团队,自2008成立以来他们对本书的不断支持。App Engine的贡献者越来越多,在这里我无法一一列出,但我很感谢他们的想象力、创造力和工作,以及感谢他们让我成为其中的一员。本书是源于《Programming Google App Engine》一书,这本书是在 Paul McDonald 和 Pete Koomen的指导下完成的。Ryan Barrett 花了很长时间讨论本书,并且提供了具体的技术细节。Max Ross和Rafe Kaplan提供了相关的材料,并且广泛审查了数据存储相关的章节。感谢Matthew Blain、Michael Davidson、Alex Gaysinsky、Peter McKenzie、Don Schwarz和Jeffrey Scudder,他们仔细地浏览了版,我还要感谢Sean Lynch、Brett Slatkin、Mike Repass和Guido van Rossum的支持。对于第二版,我想感谢 Peter Magnusson、Greg D’alesandre、Tom Van Waardhuizen、 Mike Aizatsky、Wesley Chun、Johan Euphrosine、Alfred Fuller、Andrew Gerrand、 Sebastian Kreft、MoisheLettvin、John Mulhausen、Robert Schuppenies、David Symonds和Eric Willigers。将原书分成两本书需要付出大量的精力。感谢Mike Fotinaki审查了Python版本,Amy Unruh和Mark Combellack审查了 Java 版本。我还要感谢Sahala Swenson、Steven Hines、David McLaughlin、Mike Winton、 Andres Ferrate、Dan Morrill、Mark Pilgrim、Steffi Wu、Karen Wickre、Jane Penner、 Jon Murchinson、Tom Stocky、Vic Gundotra、Bill Coughran和Alan Eustace。感谢O’Reilly公司的Michael Loukides、Meghan Blanchette和Brian Anderson给予我这次机会,并帮助我通读本书超过3遍。我把本书献给Google网站的可靠性工程师们,是他们让本书得以出版。我会一直对他们心存感激。
媒体评论
专家推荐“我们的团队在学习App Engine时,Dan编著的本书的*版多年来是我们重要的学习资源。这次新的版本有了很多改进,它是使用App Engine编程人员*全面的向导,既对刚入门的读者有用,对有经验的程序员也很有用。” ——Ben Kamens软件开发负责人,Khan Academy“毫无疑问,本书是一本与App Engine有关的、综合性强、行文流畅并且与时俱进的书。如果你能够从头至尾认真地学完本书的内容,那么你将成为App Engine方面的专家。”——Kevin Gibbs前技术负责人和管理人员,Google App Engine
在线试读
封面介绍本书封面的动物是一条四线蛇,主要在意大利和巴尔干半岛。它的名字源于四个暗色的条纹,从眼睛延伸到它的嘴角。随着它不断成熟,这些线条会变得更加突出。成年蛇的腹部为浅棕与白色相间,并且可以长到8.5英尺。这使得它成为欧洲游蛇科(又称黄颔蛇科)中的无毒物种,而游蛇科这一物种则占据了所有现存蛇类数量的三分之二。四线蛇的可以适应的栖息地范围很广,主要是岩石地区的林地和灌木丛。它主要以啮齿动物、蜥蜴和小鸟为食。许多在O’Reilly封面上的动物都属于濒危物种,这些物种对于保持生态的多样性极为重要。更多有关如何帮助的信息,请访问animals.oreilly.com。
评论
还没有评论。