关于我们
![]() ![]() |
Serverless架构:无服务器单页应用开发 定 价:¥65 中 教 价:¥52.00 (8.00折) 库 存 数: 0
《Serverless架构:无服务器单页应用开发》讲授如何利用AWSLambda创建Serverless单页应用。这里,Serverless的意思是应用开发者无须管理服务器,将应用构建在服务之上,而不是运行在需要人工配置和维护的服务器之上。这种新的开发方式带来很多好处,比如节省成本,可扩展性与可靠性高,以及开发者可以专注于实现应用的业务逻辑等。全书共8章,BenRady带领读者采用这种新方法从零开始开发一个JavaScript解题应用,并且对其进行测试,最终完成部署。
对于创业者以及中小企业的开发者来说,《Serverless架构:无服务器单页应用开发》讲述的Serverless设计是一个值得了解和学习的新方法,可以从中获得启示,抓住先机。
Serverless的意思就是开发应用时可以专注于实现应用的业务逻辑,不需要考虑管理服务器的事情。
采用无服务器架构的方式开发应用,扩展性好、可靠性强、成本低。 尝试新创意、探索可能的新市场或者创建小可行产品的应用开发方式。 创业者、中小型公司的福音。数小时内就能搭建一个初始版本应用并在几秒内部署,迅速接受市场检验。
我做了几年单页Web应用,一直希望能摆脱应用服务器施加的限制,现在愿望终于实现了。Amazon(还会有更多的其他公司)开发出的技术让无服务器架构(serverless,在本书中简称为“无服”)成为可能,消除了很多构建和扩展Web应用的风险和成本。这个创意是如此令人叹服,如此具有变革意义,以至于我必须为它写一本书。
这本书是为那些希望在Web上构建一些东西的人而写的。有的人想搭建一个应用——一个他们认为将会是下一个惊世之作的东西。有的人只是刚着手Web开发,从未构建过任何类型的应用——不管是影响世界的还是其他什么样的。有的人则是已经用Java、RubyonRails或者Node.js构建过许多基于Model-View-Controller应用的资深Web开发者。随着这个无服技术的兴起,我希望能分享所学的一切,真心希望有人能够用它做出一些了不起的东西。 在前言中,你将了解本书的主题以及能用这些技术来实现些什么。 指导原则 写这本书时我脑子里有几条指导原则。这些原则的目的是让本书内容具有针对性、易理解,不说废话。这里把它们列出来,帮助你了解我是如何写这本书的以及更好地理解本书的相关背景。 有些原则可能是有争议的,其中一些甚至与构建Web应用的主流思想相左。但是,这些原则将帮助你深入理解这个主题。与其波澜不惊,存在争议会更好。 使用Web标准和熟悉的工具 在这本书中,你将使用一小部分精选的工具来构建一个单页Web应用。在本书的某些节点上,你将会实现其他工具已有的功能,这些工具是我有意不在应用中引入的。你可能会好奇,既然它们提供了所需的功能,为什么我们不用呢? 阅读本书实际上是一个学习的过程。当学习知识时,使用熟悉的工具是有帮助的。不然,花在学习工具上的时间比花在学习技术上的还要多。我不希望对一个框架或者库的选择让我们偏离本书主题。这本书是关于无服Web应用,而不是关于框架或者类库的。为了保持未知性,我们将会使用那些Web开发者熟悉的工具(例如jQuery)、Web标准和Web服务,来实现一个无服设计。 有可能读完这本书,你将会接触到一种客户端Web框架,比如React或者Angular,来构建你自己的Web应用。这些工具近些年在Web开发者社区获得了很多关注,我希望能看到很多使用它们的成功项目。在本书中学到的所有知识与你希望使用这些框架做的事情都是兼容的。它们是互为补充而不是相互冲突的关系。 使用函数式JavaScript 本书中你将不会创建JavaScript的任何类。创建类结构来解决问题对于一些具有富类型和面向对象类型系统的语言是合理的,但JavaScript不是这样的语言。相反,我们将使用更易于理解的函数式风格。 这意味着你将不会遭遇this关键字的范围问题。你将会避免原型和继承的共同使用。 你不会使用new关键字和专门设计的函数来创建对象;相反,你将会使用一个字面意义的对象来创建它们:{}。 你可以自己决定这是否就是你希望采纳的风格。因为这种方式拥有一些实际、立竿见影的好处,最后许多软件设计决策实际上都会偏向这种风格。代码终究应该首先是给人写的,然后才是计算机。只要它可执行,对于计算机而言代码看起来如何无所谓。 避免无用功 做项目时,我的目标一直都是:持续交付有改进的结果,只要这个改进是朝着环境需要的方向在进行。实现这个目标意味着要避免任何能造成交付率被消磨的事情,比如剃牦牛(yakshaving)。 如果你对“剃牦牛”这个词不熟悉的话,想象一下你想要给朋友买一件毛衣。你走进一家商店却发现没有毛衣卖。幸运的是,那里的另一位客户知道街角有一个很好的裁缝,他可能可以为你做一件。所以你到了裁缝那儿,他有一个非常好看的毛衣图案和一台能编织这个图案的机器,但毛线供应商今天还没送货。所以你跑到供应商那儿…… 然后这个过程一直继续,直到你发现自己在西藏的一片牧场上剃耗牛毛来编毛线。“我怎么来这里了?”你可能会问自己,“我所需要的只是一件毛衣。”当一系列看起来相关和必要的任务让你从真实目标上偏离时,你就是在剃耗牛。幸运的是,剃耗牛的解决办法很简单,就是意识到你自己一直在剃耗牛,然后转而买一顶帽子。 我希望你在阅读本书时不要剃耗牛。这就是为什么我用了一个预备好的工作空间以及尽可能少的工具的原因。你应该把时间花在学习上,而不是安装软件、配置和排错上。 通过测试来加快进度 你有没有曾经害怕过修改甚至只是修改一点点代码?也许你当时不确定应该做什么或者为什么应该做这个。“首先,不作恶”对程序员和医生而言均适用。这种情况会让你感觉进退两难。 设想你做这些改动时,有一位可信的同事——这类系统的专家——就坐在你身边。如果你引入任何缺陷到系统中,他就会拦住你,清楚而明确地告诉你为什么这个改动是个坏主意。如果你有这样可信的同事,是否还会进退两难? 不确定性拖慢了我们的脚本,并且限制了解决方案的范围。为了快速搭建一个软件,你必须有自信。为了获得这份自信,你可以为自己创造一个自动化专家——它了解系统的所有细节,知道系统如何运转以及为什么这样运转。这位专家和系统相辅相成,随着它的改变而改变,互相影响。这个专家就是你编写一套测试,它们快到能持续运行,每秒能运行成百上千的测试,而且每次在你对代码进行修改之后都是如此。 一旦你有了测试套件,就拥有了新选择。而当你不再害怕修改代码时,就可以按照自己的设想来设计应用,而不是试图让它在一开始就要“正确”。这意味着你可以随着形势的变化快速适应这个世界,而不是试图预测你可能需要和不需要什么。你可以基于当下的信息而不是靠猜来做决策,应用就会自然而然地变成它应该的那个样子。 在本书中,你将使用测试驱动开发(TDD)技术来编写应用和它的测试。了解如何用测试来构建软件是一项技能,要获得它的益处,就必须真正地使用它。我在本书中引入TDD的目的不仅是向你展示如何测试Web应用的特定功能,还想证明用它来测试典型Web应用有多简单,如果你知道如何实现的话。 在实践TDD的过程中,有一个三步循环,经常描述为红—绿—重构。首先写一个测试,检查应用尚不具备的功能。如果测试如你预期的那样失败了,就可以相信它是在测试你希望加到应用上的功能。现在这些测试是红色的。一旦有一个失败的测试,添加几条最简单的代码来让这个测试通过,通常几行代码即可。现在这些测试是绿色的。 通过测试为应用添加一些功能后,就该后退一步,让自己看得更全面一些。是否在实现中引入了一些重复代码?所有的变量和函数是否都有描述性的准确名字?是否还有更简单的方式?考虑这些事情,然后开始重构。重构是在不改变功能的情况下修改代码。你之前编写的测试会告诉你是否改变了功能,所以只能在这些测试都通过时重构,这一点很重要。有了它们作为你的安全防护网,可以在开始下一步测试之前清理完所有代码的问题。 TDD用得越多,你的进展就会越快,从中获得的价值就越多。通过一遍又一遍地重复“红—绿—重构”过程,你将学会如何渐进式地构建一个设计合理、测试充分的应用。这样你不仅对自己的应用有信心,而且对它进行持续的修改也更容易。 边做边学 本书是一本教程,所以你可以跟着书中的引导边做边学。通过这本书,你将构建一个无服单页Web应用。本书的目的是用具体的方式解释无服架构的原理。本书的成果是一个可运行的应用,所以你大可以放心,书中的技术就像广告中说的那样有用。 采用这种方式意味着篇幅有限,我对有些知识点不可能讲得很深入。因此,我在每章中安排了一节“下一步”来提供一些主题,如果你希望了解更多,可以查找相关的资料。 从预备好的工作空间开始 为了让你能快速上手,我提供了一个预备好的工作空间(preparedworkspace),里面包括了起步需要的所有东西,并且不需要太多时间来设置。这就好比你在画一幅艺术品,我已经为你准备好颜料、画架和画布。你要做的就是创作。 为了能使用这个预备好的工作空间,你需要一台兼容Bashshell的计算机来使用工作空间里面的脚本和工具。可以是OSX、任何*nix版本或者FreeBSD。如果你安装了Cygwin,用Windows可能也行。你还需要一个带开发者控制台的Web浏览器。本书的大部分例子中使用的是GoogleChrome,但大多数情况下Firefox也能提供了类似的功能。 如何阅读本书 阅读一本书可以有很多种方式,不仅是从头到尾的那种。至于如何阅读本书,取决于你想要获得什么。下面列出的是读本书的一些常见理由,以及我对于如何使用这本书来实现这些目标的建议。 目标1:理解无服和传统单页应用的优劣 需要做什么 1.阅读第1章的前3节理解两种方式的优劣。 2.略读第1章剩下的部分和第2~3章。 3.通读第4~8章,尽可能跟着教程实现应用。 如果你是一个有经验的Web开发者,搭建过单页Web应用,希望了解更多有关无服Web应用的知识,你可能不需要看前3章的所有内容。这些章节展示了搭建单页Web应用的vanilla.js方式。其意图是阐述一个单页Web应用的基础模块。我尽量定义哪些部分是必需的,并提供一些可供参考的基础实现。如果你没有给Web应用编写过很多测试,可以在第2章中实现一些测试例子来学习一些新技能。 读完第1章的前3节,你会希望集中精力细读第4~8章。我建议你搭建一个简单Web应用,或者至少一个原型,这样你可以在后面的章节中自己尝试这些技术。通过实验可以学到很多。 目标2:搭建你的第一个单页应用 需要做什么 1.在开始前,先读一读书中列出的必要的辅助阅读材料。 2.从头到尾读完本书所有的章节,如果有必要,附录也要看。 如果你是第一次搭建Web应用,你会希望阅读整本书,从头到尾读一遍。另外,你可能也想跟上基础Web技术的脚步,包含HTML、CSS和JavaScript,可以查阅下面的免费资源。等理解了这些主题,再来深入读本书。 目标3:使用你喜欢的Web框架搭建一个无服应用 需要做什么 1.通读第1章。 2.用你喜欢的Web框架实现第2章和第3章的测试与功能。 3.通读第4~8章。 正如前面说的那样,我不希望把这本书的重点放在Web框架上,但还是可以使用它们来搭建无服单页应用。如果你对单页应用的基本元素很熟悉,并且靠客户端Web框架来提供这些功能,可以用喜欢的框架轻松重建我们在第2章和第3章实现的功能。一旦有了这个作为基础,应该可以遵照本书余下的部分,用这个框架实现整个应用。 目标4:创建一个最小可行产品(MinimumViableProduct,MVP) 需要做什么 1.阅读第1章的前3节,理解无服开发与传统开发方式的优劣。 2.阅读第8章来了解用这种方式构建一个MVP的成本。 3.如果这个方式看起来行得通,阅读剩余的所有章节(如果有需要的话,包括附录)。 3.使用预备好的工作空间作为搭建MVP的起点。 当启动一个新产品或者一项新业务时,首要的挑战是搞清楚市场想要什么以及它愿意为什么付钱。许多人称之为产品/市场匹配(product/marketfit),这是构建一个成功产品或者服务的关键。 找到产品/市场匹配的一个有效方式是先做出一个产品并试着销售。验证市场的需求和你通过销售或市场渠道连接这些客户的能力,这是你应该尽快跨过的关键门坎。当然,你可能又没那么多时间和资金来搭建一个完整的应用,所以一个替代方案是搭建一个MVP来验证产品的核心价值。 无服单页应用是尝试新主意、探索可能的新市场或者创建MVP的好方式。搭建这类应用来替代传统Web应用或者原生应用,意味着你可以更快接触到客户。你可以在若干小时内搭建一个初始版本并在几秒内部署。这些应用可以立即更新,轻松地被拆分测试,可以提供详细的使用指标,帮助你理解客户想要的是什么。 除了运行起来不贵、快速构建以及几乎所有用户都能访问之外,无服单页应用可以“无限”(正如Amazon宣传的那样)扩展,这样如果你的产品在市场上有旺盛的需求,你就可以满足这样的需求以及留住用户。 在线资源 你可以在ProgmaticBookshelf官网找到这本书中的应用以及代码。你还能在上面看到社区论坛和提交勘误的表单,报告问题或者为未来的版本提供建议。 你可以在我的Github.com账号(benrady)5下找到预备好的工作空间。如果你还没有Github账号,那就新建一个,并且fork我的代码库。想知道更多操作细节,可以阅读第1章的内容。 BenRady benrady@gmail.com
第1 章 从简单开始 1
无服Web 应用 2 -- 无服设计的好处 4 -- 无服设计的限制 6 使用自己的工作空间 8 -- 本地执行 12 -- 创建着陆页 13 部署到Amazon S3 15 -- 搭建AWS 命令行接口 16 -- 创建一个带访问密钥的AWS 用户 17 首次部署 20 -- 下一步 21 第2 章 基于hash 事件的视图路由 23 设计可测试的路由器 24 -- 运行Jasmine 测试 25 -- 编写第一个测试用例 26 路由函数 29 -- 创建命名空间 29 -- 添加路由函数 30 -- 创建视图容器 32 添加路由 34 添加视图参数 37 -- 用spy 测试调用 37 -- 处理视图函数中的参数 39 -- 加载应用 41 -- 响应事件 42 -- 响应hash 事件 44 再次部署 46 -- 下一步 46 第3 章 单页应用的必要组件 49 创建视图 50 定义数据模型 53 -- 数据绑定 55 -- 优化数据模型 58 处理用户输入 60 -- 有效地使用视觉反馈 64 -- 控制导航 66 创建一个应用外壳 68 -- 提取着陆页 68 -- 添加工具条 69 使用自定义事件 72 再次部署 75 -- 下一步 75 第4 章 基于Amazon Cognito 的认证服务 77 接入外部身份认证服务商 78 创建身份池 82 -- 身份池配置 83 -- IAM 角色和策略 84 获取Google 身份. 87 请求AWS 证书 90 -- 刷新令牌 91 -- 基于Deferred 对象和Promise 的认证请求 93 -- 创建一个身份Deferred 对象 95 创建个人主页视图 96 再次部署 98 -- 下一步 99 第5 章 使用DynamoDB 存储数据 101 使用DynamoDB 102 -- 理解DynamoDB 的键和哈希 102 -- DynamoDB 用作文档数据库 103 -- 强一致性和最终一致性 105 创建表 106 -- 属性和键值 108 -- 预设吞吐量 109 -- 二级索引与查询 vs 扫描 110 授权访问DynamoDB 111 保存文档 113 -- 一个fail-safe 的数据访问函数 114 -- 创建和保存一个item 115 读取文档 117 数据访问和验证 119 重新部署 122 -- 下一步 122 第6 章 使用Lambda 构建微服务 125 理解Amazon Lambda 126 -- Lambda 环境 126 -- Lambda 的局限 128 -- 内存、时间和费用 129 先部署 130 -- 配置一个Lambda 函数 131 -- 创建代码包 133 -- 通过AWS 控制台测试函数 134 -- 创建一个新的Lambda 配置 135 -- 往Lambda 执行角色上添加策略 136 编写Lambda 函数 138 -- 规避微服务架构问题 138 -- 添加服务依赖 140 -- 构建可测试的服务 141 -- 查询、分组和分页 143 调用Lambda 函数 145 使用Amazon API 网关 146 重新部署 148 -- 下一步 148 第7 章 无服应用的安全 151 保护你的AWS 账号 152 -- 禁用所有root 访问密钥 152 -- 管理用户配置 152 -- 保护AWS 证书 153 -- 设置多重身份认证 154 查询注入攻击 154 跨站脚本攻击 156 -- XSS 注入方法 156 -- 使用web worker 沙盒化JavaScript 157 跨站请求伪造 159 -- 不用Javascript 实现XSRF 160 -- 跨站请求和同源策略 161 线路攻击和传输层安全 162 -- Sidejacking 攻击 162 -- 高效使用HTTPS 163 拒绝服务攻击 165 -- 用CloudFront 保护S3 165 -- 可扩展服务和用户身份 166 重新部署 167 -- 下一步 167 第8 章 扩容 169 监控Web 服务 169 -- 监控容量限制 170 -- 创建付款警告 173 分析S3 的流量 174 -- 记录S3 请求 174 -- 分析S3 日志 177 -- 响应代码频率 179 -- 热门资源 180 -- 每日用量 181 优化应用,实现增长 182 -- 通过缓存降低成本和加载时间 183 -- 通过带版本号的文件名清除缓存 186 云的成本 187 -- 加载成本 188 -- 数据成本 188 -- 微服务成本 189 -- 加起来 190 再次部署 192 -- 下一步 192 附录A 安装Node.js 195 安装Node.js 运行时 195 -- Linux 195 -- OS X 196 -- Windows 196 管理多个Node.js 版本 197 附录B 分配一个域名 199 参考书目 201
你还可能感兴趣
我要评论
|