描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121317361
Serverless的意思就是开发应用时可以专注于实现应用的业务逻辑,不需要考虑管理服务器的事情。
采用无服务器架构的方式开发应用,扩展性好、可靠性强、成本低。
尝试新创意、探索可能的新市场或者创建*小可行产品的极佳应用开发方式。
创业者、中小型公司的福音。数小时内就能搭建一个初始版本应用并在几秒内部署,迅速接受市场检验。
无服Web 应用
无服设计的好处
无服设计的限制
使用自己的工作空间
本地执行
创建着陆页
部署到Amazon S3
搭建AWS 命令行接口
创建一个带访问密钥的AWS 用户
首次部署
下一步
第2 章 基于hash 事件的视图路由 …………………………………………………………………………………………………………………………. 23
设计可测试的路由器
运行Jasmine 测试
编写个测试用例
路由函数
创建命名空间
添加路由函数
创建视图容器
添加路由
添加视图参数
用spy 测试调用
处理视图函数中的参数
加载应用
响应事件
响应hash 事件
再次部署
下一步
第3 章 单页应用的必要组件…………………………………………………………………………………………………………………………………… 49
创建视图
定义数据模型
数据绑定
优化数据模型
处理用户输入
有效地使用视觉反馈
控制导航
创建一个应用外壳
提取着陆页
添加工具条
使用自定义事件
再次部署
下一步
第4 章 基于Amazon Cognito 的认证服务 …………………………………………………………………………………………………………….. 77
接入外部身份认证服务商
创建身份池
身份池配置
IAM 角色和策略
获取Google 身份
请求AWS 证书
基于Deferred 对象和Promise 的认证请求
创建一个身份Deferred 对象
创建个人主页视图
再次部署
下一步
第5 章 使用DynamoDB 存储数据 ………………………………………………………………………………………………………………………. 101
使用DynamoDB
理解DynamoDB 的键和哈希
DynamoDB 用作文档数据库
强一致性和终一致性
创建表
属性和键值
预设吞吐量
二级索引与查询 vs 扫描
授权访问DynamoDB
保存文档
一个fail-safe 的数据访问函数
创建和保存一个item
读取文档
数据访问和验证
重新部署
下一步
第6 章 使用Lambda 构建微服务 ………………………………………………………………………………………………………………………… 125
理解Amazon Lambda
Lambda 环境
Lambda 的局限
内存、时间和费用
先部署
配置一个Lambda 函数
创建代码包
通过AWS 控制台测试函数
创建一个新的Lambda 配置
往Lambda 执行角色上添加策略
编写Lambda 函数
规避微服务架构问题
添加服务依赖
构建可测试的服务
查询、分组和分页
调用Lambda 函数
使用Amazon API 网关
重新部署
下一步
第7 章 无服应用的安全 ………………………………………………………………………………………………………………………………………. 151
保护你的AWS 账号
禁用所有root 访问密钥
管理用户配置
保护AWS 证书
设置多重身份认证
查询注入攻击
跨站脚本攻击
XSS 注入方法
使用web worker 沙盒化JavaScript
跨站请求伪造
不用JavaScript 实现XSRF
跨站请求和同源策略
线路攻击和传输层安全
Sidejacking 攻击
高效使用HTTPS
拒绝服务攻击
用CloudFront 保护S3
可扩展服务和用户身份
重新部署
下一步
第8 章 扩容 ………………………………………………………………………………………………………………………………………………………… 169
监控Web 服务
监控容量限制
创建付款警告
分析S3 的流量
记录S3 请求
分析S3 日志
响应代码频率
热门资源
每日用量
优化应用,实现增长
通过缓存降低成本和加载时间
通过带版本号的文件名清除缓存
云的成本
加载成本
数据成本
微服务成本
加起来
再次部署
下一步
附录A 安装Node.js …………………………………………………………………………………………………………………………………………….. 195
安装Node.js 运行时
Linux
OS X
Windows
管理多个Node.js 版本
附录B 分配一个域名 …………………………………………………………………………………………………………………………………………….199
参考书目 …………………………………………………………………………………………………………………………………………………………….. 201
我做了几年单页Web 应用,一直希望能摆脱应用服务器施加的限制,现在愿望终于实现了。Amazon(还会有更多的其他公司)开发出的技术让无服务器架构(serverless,在本书中简称为“无服”)成为可能,消除了很多构建和扩展Web 应用的风险和成本。这个创意是如此令人叹服,如此具有变革意义,以至于我必须为它写一本书。
这本书是为那些希望在Web 上构建一些东西的人而写的。有的人想搭建一个应用——一个他们认为将会是下一个惊世之作的东西。有的人只是刚着手Web 开发,从未构建过任何类型的应用——不管是影响世界的还是其他什么样的。有的人则是已经用Java、Ruby onRails 或者Node.js 构建过许多基于Model-View-Controller 应用的资深Web 开发者。随着这个无服技术的兴起,我希望能分享所学的一切,真心希望有人能够用它做出一些了不起的东西。
在前言中,你将了解本书的主题以及能用这些技术来实现些什么。
指导原则
写这本书时我脑子里有几条指导原则。这些原则的目的是让本书内容具有针对性、易理解,不说废话。这里把它们列出来,帮助你了解我是如何写这本书的以及更好地理解本书的相关背景。
有些原则可能是有争议的,其中一些甚至与构建Web 应用的主流思想相左。但是,这些原则将帮助你深入理解这个主题。与其波澜不惊,存在争议会更好。
使用Web 标准和熟悉的工具
在这本书中,你将使用一小部分精选的工具来构建一个单页Web 应用。在本书的某些节点上,你将会实现其他工具已有的功能,这些工具是我有意不在应用中引入的。你可能会好奇,既然它们提供了所需的功能,为什么我们不用呢?
阅读本书实际上是一个学习的过程。当学习知识时,使用熟悉的工具是有帮助的。不然,花在学习工具上的时间比花在学习技术上的还要多。我不希望对一个框架或者库的选择让我们偏离本书主题。这本书是关于无服Web 应用,而不是关于框架或者类库的。为了保持未知性,我们将会使用那些Web 开发者熟悉的工具(例如jQuery)、Web 标准和Web服务,来实现一个无服设计。
这本书是关于Web 服务,而不是Web 框架的。
有可能读完这本书,你将会接触到一种客户端Web 框架,比如React 或者Angular,来构建你自己的Web 应用。这些工具近些年在Web 开发者社区获得了很多关注,我希望能看到很多使用它们的成功项目。在本书中学到的所有知识与你希望使用这些框架做的事情都是兼容的。它们是互为补充而不是相互冲突的关系。
使用函数式JavaScript
本书中你将不会创建JavaScript 的任何类。创建类结构来解决问题对于一些具有富类型和面向对象类型系统的语言是合理的,但JavaScript 不是这样的语言。相反,我们将使用更易于理解的函数式风格。
这意味着你将不会遭遇this 关键字的范围问题。你将会避免原型和继承的共同使用。你不会使用new 关键字和专门设计的函数来创建对象;相反,你将会使用一个字面意义的对象来创建它们:{}。
你可以自己决定这是否就是你希望采纳的风格。因为这种方式拥有一些实际、立竿见影的好处,后许多软件设计决策实际上都会偏向这种风格。代码终究应该首先是给人写的,然后才是计算机。只要它可执行,对于计算机而言代码看起来如何无所谓。
避免无用功
做项目时,我的目标一直都是:持续交付有改进的结果,只要这个改进是朝着环境需要的方向在进行。实现这个目标意味着要避免任何能造成交付率被消磨的事情,比如剃牦牛(yak shaving)。
如果你对“剃牦牛”这个词不熟悉的话,想象一下你想要给朋友买一件毛衣。你走进一家商店却发现没有毛衣卖。幸运的是,那里的另一位客户知道街角有一个很好的裁缝,他可能可以为你做一件。所以你到了裁缝那儿,他有一个非常好看的毛衣图案和一台能编织这个图案的机器,但毛线供应商今天还没送货。所以你跑到供应商那儿……
然后这个过程一直继续,直到你发现自己在西藏的一片牧场上剃耗牛毛来编毛线。“我怎么来这里了?”你可能会问自己,“我所需要的只是一件毛衣。”当一系列看起来相关和必要的任务让你从真实目标上偏离时,你就是在剃耗牛。幸运的是,剃耗牛的解决办法很简单,就是意识到你自己一直在剃耗牛,然后转而买一顶帽子。
我希望你在阅读本书时不要剃耗牛。这就是为什么我用了一个预备好的工作空间以及尽可能少的工具的原因。你应该把时间花在学习上,而不是安装软件、配置和排错上。
通过测试来加快进度
你有没有曾经害怕过修改甚至只是修改一点点代码?也许你当时不确定应该做什么或者为什么应该做这个。“首先,不作恶”对程序员和医生而言均适用。这种情况会让你感觉进退两难。
设想你做这些改动时,有一位可信的同事——这类系统的专家——就坐在你身边。如果你引入任何缺陷到系统中,他就会拦住你,清楚而明确地告诉你为什么这个改动是个坏主意。如果你有这样可信的同事,是否还会进退两难?
不确定性拖慢了我们的脚本,并且限制了解决方案的范围。为了快速搭建一个软件,你必须有自信。为了获得这份自信,你可以为自己创造一个自动化专家——它了解系统的所有细节,知道系统如何运转以及为什么这样运转。这位专家和系统相辅相成,随着它的改变而改变,互相影响。这个专家就是你编写一套测试,它们快到能持续运行,每秒能运行成百上千的测试,而且每次在你对代码进行修改之后都是如此。
一旦你有了测试套件,就拥有了新选择。而当你不再害怕修改代码时,就可以按照自己的设想来设计应用,而不是试图让它在一开始就要“正确”。这意味着你可以随着形势的变化快速适应这个世界,而不是试图预测你可能需要和不需要什么。你可以基于当下的信息而不是靠猜来做决策,应用就会自然而然地变成它应该的那个样子。
在本书中,你将使用测试驱动开发(TDD)技术来编写应用和它的测试。了解如何用测试来构建软件是一项技能,要获得它的益处,就必须真正地使用它。我在本书中引入TDD的目的不仅是向你展示如何测试Web 应用的特定功能,还想证明用它来测试典型Web 应用有多简单,如果你知道如何实现的话。
在实践TDD 的过程中,有一个三步循环,经常描述为红—绿—重构。首先写一个测试,检查应用尚不具备的功能。如果测试如你预期的那样失败了,就可以相信它是在测试你希望加到应用上的功能。现在这些测试是红色的。一旦有一个失败的测试,添加几条简单的代码来让这个测试通过,通常几行代码即可。现在这些测试是绿色的。
通过测试为应用添加一些功能后,就该后退一步,让自己看得更全面一些。是否在实现中引入了一些重复代码?所有的变量和函数是否都有描述性的准确名字?是否还有更简单的方式?考虑这些事情,然后开始重构。重构是在不改变功能的情况下修改代码。你之前编写的测试会告诉你是否改变了功能,所以只能在这些测试都通过时重构,这一点很重要。有了它们作为你的安全防护网,可以在开始下一步测试之前清理完所有代码的问题。
TDD 用得越多,你的进展就会越快,从中获得的价值就越多。通过一遍又一遍地重复“红—绿—重构”过程,你将学会如何渐进式地构建一个设计合理、测试充分的应用。这样你不仅对自己的应用有信心,而且对它进行持续的修改也更容易。
边做边学
本书是一本教程,所以你可以跟着书中的引导边做边学。通过这本书,你将构建一个无服单页Web 应用。本书的目的是用具体的方式解释无服架构的原理。本书的成果是一个可运行的应用,所以你大可以放心,书中的技术就像广告中说的那样有用。
采用这种方式意味着篇幅有限,我对有些知识点不可能讲得很深入。因此,我在每章中安排了一节“下一步”来提供一些主题,如果你希望了解更多,可以查找相关的资料。
从预备好的工作空间开始
为了让你能快速上手,我提供了一个预备好的工作空间(prepared workspace),里面包括了起步需要的所有东西,并且不需要太多时间来设置。这就好比你在画一幅艺术品,我已经为你准备好颜料、画架和画布。你要做的就是创作。
为了能使用这个预备好的工作空间,你需要一台兼容Bash shell 的计算机来使用工作空间里面的脚本和工具。可以是OS X、任何*nix 版本或者FreeBSD。如果你安装了Cygwin,用Windows 可能也行。你还需要一个带开发者控制台的Web 浏览器。本书的大部分例子中使用的是Google Chrome,但大多数情况下Firefox 也能提供了类似的功能。
如何阅读本书
阅读一本书可以有很多种方式,不仅是从头到尾的那种。至于如何阅读本书,取决于你想要获得什么。下面列出的是读本书的一些常见理由,以及我对于如何使用这本书来实现这些目标的建议。
目标1:理解无服和传统单页应用的优劣
需要做什么
1.阅读第1 章的前3 节理解两种方式的优劣。
2.略读第1 章剩下的部分和第2 ~ 3
章。
3.通读第4 ~ 8 章,尽可能跟着教程实现应用。
如果你是一个有经验的Web 开发者,搭建过单页Web 应用,希望了解更多有关无服Web 应用的知识,你可能不需要看前3 章的所有内容。这些章节展示了搭建单页Web 应用的vanilla.js 方式。其意图是阐述一个单页Web 应用的基础模块。我尽量定义哪些部分是必需的,
软件行业里聚集着昀多的精英——上百万的开发者,他们带动技术朝着代码更容易测试、解决方案更简单、结果更可靠,以及维护起来更轻松的方向发展。有人看到了 Serverless设计的未来,然后回过头来教授我们这些后知后觉者如何开发下一代应用, Ben就是这样的开拓者。他的书就像是一位循循善诱的老师,教你理解 Serverless设计模式,引导你自然地遵守部署和测试的昀佳实践。
Tim Wagner
@timallenwagner
本书对于所有背景的开发者来说都是一份翔实而通俗易懂的指南。不管你是否使用 AWS,都能学到不少知识——从应用的安全到访问数据时不可或缺的身份认证。
Will Gaul
Ben在本书中讲了很多内容:用
JavaScript构建客户端逻辑、用 Cognito进行认证和授权、用 Lambda实现不能放心地交给浏览器处理的敏感功能。 JavaScript开发者会从中发现一些实现典型服务端功能的新方法,而且读完本书,你就会得到一个成本近乎为零的能运行的 Serverless应用。
Ryan Scott Brown
serverlesscode.com的作者
Serverless Framework贡献者
未来你的应用不再运行在应用服务器上——而是运行在你公司某个机柜的机器里,运行在云上,由一组可靠的服务保护和管理。跟着本书开启全新的开发之旅吧!
Daniel Hinojosa
Testing in Scala作者
本书对 Serverless Web应用开发这种前沿技术做了精彩的介绍。它将带着你从零开始,直到部署 Serverless应用。
Jake McCrary
Outpace Systems公司软件开发主管
我读过很多技术图书,这一本是我今年读过的昀好的书,也是我这些年读过的昀好的书之一。Ben Rady的讲述既轻松又实在,没有吹嘘自己的知识,也没有用不必要的内容凑篇幅。书中不仅告诉你要做什么,而且解释了为什么这么做,两者并重,十分清楚明了。 Ben的观点和技术选型有理有据,非常靠谱。建议你阅读本书。
David Rupp
RuppWorks LLC
致谢
感谢我的编辑 Jackie Carter,以及 Dave、Andy和 Pragmatic Bookshelf的所有员工,感谢他们付出的时间,给予的支持和能量。没有你们,我不可能写这本书。
感谢我的技术审稿人,包括 Alex Disney、Cliton Begin、Daniel Hinojosa、David Rupp、 Jake MacCrary、James Ross、Jeff Sacks、 Graham、Lucas Ward、Rene Duquesnoy、 Rob Churchwell、Ryan Brown和 Sebastian Krueger。
感谢 Amazon所有帮助我验证本书中想法的人,包括 Tim Wagner、Bob Kinney、Tim Hunt和 Will Gaul。
另外,感谢所有在本书 beta版本期间提供反馈的人,不管是私下还是通过勘误页面,是在论坛上还是在 Github.com上提出意见的人,包括 Bill Caputo、Christopher Brackert、 Christopher Mowller、Dennis Bruke、Ezequiel Rangel、Fred Daoud、Hal Wine、Jerry Tang、 Ron Campbell和 Timm Knape。
感谢所有帮助我写这本书的人!你们的反馈对我来说非常宝贵,真心感谢你们付出的时间和精力。
评论
还没有评论。