书籍作者:Peter Sbarski | ISBN:9787121342684 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:6479 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
无服务器是软件架构世界中的热门新话题,它充分利用大量的云平台服务,让开发者只需关注核心业务逻辑的实现。同时,它按需分配和使用资源的运行方式,在降低基础设施成本的同时还能获得强大的弹性。本书的作者 Peter Sbarski 是完全拥抱无服务器架构的早期开发者之一,他将自己在应用无服务器架构中获得的宝贵经验总结成本书,呈现给广大的读者。更难能可贵的是,全书贯穿了 AWS Lambda 实例和大量相关的练习。读者一边阅读,一边动手完成练习,就可以循序渐进地掌握无服务器架构的核心技术。无论你是软件开发新手,还是架构师老兵,本书都是不可多得的了解无服务器架构的**读物。
Peter Sbarski 是 A Cloud Guru 的工程副总裁,也是 Serverlessconf 的组织者,Serverlessconf 是全球 个专门针对无服务器架构和技术的会议。他喜欢举办面对面的工作坊,时常撰写一些关于无服务器架构的博客。Peter 拥有丰富的 IT工作经验,领导过专注于 Web 和 AWS 云技术的?型企业解决?案团队。他的专?包括后端架构、微服务和系统编排。
Peter 拥有澳大利亚莫纳什?学计算机科学博?学位,读者可以在Twitter(@sbarski)和 GitHub(https://github.com/sbarski)上关注他。
覃宇,ThoughtWorks高级咨询师,10余年移动应用开发经验,Android技术专家,曾为AOSP贡献过测试用例;目前专注于移动应用的架构设计、自动化测试以及持续交付。译有《Kotlin实战》一书。
李源,在华为技术有限公司工作8年,从事研发、系统架构设计、项目管理等工作,华为优秀讲师,美国质量协会注册质量工程师(CQE),2012年加入途牛,先后负责途牛CRM系统、供应商管理系统、零售平台、分销平台等公司级项目,现任供应链研发中心副总经理,全面主持途牛供应链相关系统的设计、开发工作,覆盖采购、资源、库存、组装、确认、N-BOOKING等多个核心系统。译有《Java性能调优指南》《函数响应式领域建模 》等书。
罗丽,高级软件工程师,移动技术开发顾问,拥有丰富的软件开发经验,熟悉ReactNative,Android,iOS等多种开发技术。目前任职于ThoughtWorks海外事业部,曾在多个大型移动应用项目中担任技术顾问。译有《Kotlin实战》一书。
向无服务器云架构的转变是大势所趋。随着无服务器计算机技术(如 AWS Lambda)的发布,开发者正在构建大规模的完全无服务器的平台。在这些新架构中,传统的后端服务器被云函数所取代,这些函数充当着单一用途的分散的服务。通过将这些无服务器的云函数以一种松散的编排方式组合在一起,并采用有效的第三方服务,开发人员可以创建功能强大且易于理解的应用程序。
《Serverless架构:无服务器应用与AWS Lambda》将教你如何构建、保护和管理无服务器架构,为要求苛刻的 Web 和移动应用提供支持。本书中现成的真实案例、代码片段、图表和架构描述都可以被轻松地应,来帮助你快速完成任务。最后,你将能够在 AWS 上设计和构建自己的无服务器应用程序。
本书内容包括:
√ 无服务器计算的初始步骤
√ 重要的设计模式和架构
√ 编写 AWS Lambda 函数并使用 API Gateway
√ 使用像 Auth0 和 Firebase 这样的关键服务来组合无服务器应用程序
√ 保护、部署和管理无服务器架构
译者序
过去二十年,硅谷的创业神话激励着 IT 从业者们前赴后继地投入创业大潮。而在这汹涌的大潮中,快速发展的技术和不断涌现的平台和服务也让创业的技术门槛越来越低。三五个好友一起想出一个点子,再有一个程序员,租一些云服务器,就可以大干一场了。然而,事情就真的是这么简单吗?有的团队开发的爆款应用几天之内流量即可以迅速飙升,日活用户可以达到数百万 ;却由于最初架构设计时对扩展性的忽视,服务器不堪重负,页面加载开始变慢,甚至无法访问。开发团队加班加点想尽各种办法纠正架构的设计问题并扩展资源才让应用恢复正常,却为时已晚。用户早已失去了耐心,也让应用错失了最佳的扩张机会。有的团队却正好相反,它们会先花上好几个月时间精心地分析、设计、实现、测试可扩展的应用架构,甚至还会开发全套的自动化部署运维工具。然而,等到精心打磨的产品推出的那一天,市场上早已被同类竞品完全瓜分。
这样的案例在现实中屡见不鲜。市场的机会转瞬即逝,爆款的压力突如其来,而创业团队却被架构的扩展性和基础设施的规划运维束缚了手脚,疲于应付。除了提升团队自身的架构和运维能力之外,还要想办法降低基础设施运维的门槛。无服务器技术也许就是这些创业团队的希望。采用了无服务器技术架构之后,开发者使用现成的第三方服务并专注于应用的业务功能代码开发,不用再关心以服务器为代表的基础设置的规划、配置和维护。而应用运行时使用的服务完全是按需分配的,一旦出现吞吐量的激增,这些服务会自动快速扩展到达可用性的要求。而应用使用的服务都是按照实际的使用量来计费的,这将大大降低基础设施投入的成本。在基础设施即服务、容器即服务和平台即服务的基础上,无服务器架构对云计算进行了更高层次的抽象,大大降低了运维的门槛和成本。
然而,无服务器架构并不是软件架构的银弹。在拥抱大量第三方服务的同时,也让系统架构和提供服务的特定供应商锁定在了一起,日后如果迁移不会那么轻松。第三方服务天然的分布式特质要求架构设计事先就要考虑网络故障和延迟,以及一致性问题。无服务器架构运行资源的限制,也会要求运算要简单,并能在短时间内完成。事件驱动和推送要求计算被拆成许多小巧的无状态函数,其集成和管理势必变得更加复杂。那么,无服务器架构有哪些典型的使用场景?它又可以运用哪些常见的设计模式?使用无服务器架构时有哪些需要特别留意的问题?它使用的工具和实践和传统的开发方式有什么区别呢?
本书的作者 Peter Sbarski 是最早实践无服务器架构的开发者之一,他担任工程副总裁的 A Cloud Guru 这个在线视频教育服务就是完全基于无服务器架构创建的。贯穿本书的视频分享网站实例和练习几乎就是 A Cloud Guru 的迷你版,作者将他实施无服务器架构的经验毫无保留地呈现在我们面前。作者在本书的前两章总结了无服务器架构常见的使用场景和架构模式。从第 3 章开始直到第 9 章,分别介绍了无服务器技术中的身份认证和授权、函数计算、网关、对象存储以及数据库等重要内容,所有内容的学习都是围绕着视频分享网站的练习展开的,十分生动。作者在第
10 章对全书进行了总结,并介绍了一些值得关注的工具、实践和趋势。本书末尾的附录则介绍了许多服务和工具的使用。
无服务器架构的话题始终无法回避 AWS 这个现象级产品。AWS 于 2014 年和2015 年先后推出的 Lambda 和 API Gateway 两款产品将 AWS 的各种服务集成在了一起,让无服务器架构变成了触手可及的现实。本书的练习就需要使用 AWS 的重要服务 S3、Lambda 和 API Gateway。而一些更专业的领域也涌现了一批明星服务和产品,例如本书中介绍的身分认证和授权服务 Auth0 和实时数据产品 Firebase( 已经被 Google 收购 )。无服务器技术发展日新月异,本书英文版出版已经快两年,尽管译者在翻译时已经就其中一些过时内容进行了标注。但其中涉及到 AWS 和其他第三方服务的讲解难免落后,读者可以结合这些产品的官方文档来进行阅读。AWS的中文官方文档质量颇高,值得阅读。
本书的翻译初稿于 2018 年春节后结束,在此要感谢所有译者期间的辛勤付出以及家人的理解和支持。同时也要感谢编辑们的耐心和严谨,谢谢你们 !
序一
Patrick Debois DevOps Jedi、DevOpsDays 创始人 Small Town Heroes 首席技术官
编写专注于一个目标的程序,并尽可能把它做好,编写能够互相协同工作的程序——这是 Unix 哲学的核心思想,由 Unix 的设计者 Ken Thompson 首先提出。最近几年以 Google、Netflix、Uber 和 Airbnb 为代表的公司已经证明,在现代的分布式系统中,可以简单地将这些核心思想中的程序这个词替换成服务。这种思想的最新变化 :无服务器计算,宣示了托管服务和自管理基础设施的智能组合是如何显著改善开发时间和运营成本的。
本书很好地通过一系列实用的落地案例研究搭配了新兴的无服务器设计模式的内容,初学者和实干家都是本书理想的目标读者。无服务器是一门崭新的学科,作者成功地兼顾了广泛的主题,同时还不失深度和重点。本书饱含着作者真挚的热情、细致的洞察力,以及值得分享的知识宝藏。
无服务器计算需要你改变构建软件架构的方式,随着许多范式的改变,有一些习惯你必须忘记。在热情洋溢地拥抱新技术的同时,作者也用了不小的篇幅来罗列这些新架构类型的优势和局限。作为惊喜,它还总结了自己运营真实无服务器架构旅程中的洞见。这种“实践出真知”的态度展示了无服务器所带来的丰厚回报,这将帮助你的企业专注并取得成功。
序二
Donald F. Ferguson 博士 Seeka TV 联合创始人、首席技术官 哥伦比亚大学计算机科学系客座教授
很多技术都在颠覆应用程序的开发、测试和交付。云计算和各种形式的“某某即服务”(as-a-service)就是这些重新定义应用程序开发和交付的例子。许多团队和项目在尝试引入新技术的时候都特别挣扎,有时甚至还会失败。而失败的罪魁祸首就是把这些截然不同的技术强加在现有的应用程序架构和编程模型上。精心设计、实现和交付的跨云应用程序和传统应用程序有着天壤之别。本书在介绍新的应用程序架构方面做得十分出色,还提供了如何成功应用无服务器技术的详尽而实用的指导。
基础设施即服务(Infrastructure as a Service,IaaS)、软件即服务(Software as a Service,SaaS)以及平台即服务(Platform as a Service,PaaS)是内部部署应用程序和基础设施架构的云平台版本。这些模型可以提供价值但却无法彻底释放云平台的潜力。SaaS 提供了关于业务问题的不完全标准的解决方案,但无法快速地开发和交付更多有针对性的应用程序。IaaS 和 PaaS 提供了资源使用效率,却无法消除配置和管理软件服务器基础设施的成本。这些模型都无法借用 Web 可调用 API 的大爆发,基于它们的 API 经济已经渐成气候。无服务器架构是唯一一种架构,这种架构可以消除软件服务器成本、提供快速开发和交付灵活性,并管理有针对性的专注的云平台应用程序。
本书的第一部分——踏上征途为创建无服务器架构打下基础。这部分说明了这种新架构的基本特性和优势,包括该技术优缺点的清晰解释和选择指导。同样重要的是,这部分还介绍了架构设计模式。成功采纳转型中的计算技术的唯一重要因素就是通过应用这些设计模式实现来了解其最佳实践。这部分是在一个真实解决方案的上下文中解释了这些模式,这个解决方案就是作者使用无服务器架构实现的 :“一言不合就秀代码”。作者的实践经验和成功经历也是我推荐本书的主要原因。
人们往往错误地将无服务器等同于某一项具体的技术。比如,AWS Lambda 函数。但无服务器架构范围更广,包括 UI 设计、发布 / 订阅基础设施、工作流 / 编排、活动数据库、API 网关和管理,以及数据服务。总的来说,这些技术势不可挡。本书介绍了做出贡献的技术所扮演的角色以及发挥的作用,详细地介绍了如何使用Amazon Web Services 中的这些技术集体实现来构建一个可以工作的应用程序。入门手册和教程是能够重复并可靠地使用该技术的核心。
数据层和安全性是任何应用程序都不可回避的最困难的两个架构领域。本书对两个话题都有详尽的阐述。这部分内容解释了概念(例如身份认证和授权),将概念落实到了应用程序场景(例如 Web 应用程序)中,并提供了如何设计实现安全性和数据层的具体而详尽的例子。这些细节还包括使用 Auth0 和 Google Firebase 这些非 AWS 技术的示例。
我的公司也正在使用 AWS 和无服务器架构来构建解决方案,我发现这本书和作者的其他材料对我们的进步至关重要。我在哥伦比亚大学教授计算机科学的高级课程,该课程主要关注互联网应用程序和跨云应用程序。本书的内容是我所教授的大部分内容的基础。我的经验表明,本书是一本释放云计算潜力不可取代的关键书籍。真实应用程序上下文中关于 AWS 的详细信息是无价的,这些概念和模式适用于使用任何技术的任何无服务器解决方案。
序一XIII
序二XV
前言XVII
致谢XIX
关于本书XXI
关于作者XXIII
关于封面XXIV
第 1 部分踏上征途 1
1 无服务器初探3
1.1 来龙去脉 4
1.1.1 面向服务的架构与微服务 5
1.1.2 软件设计 6
1.2 无服务器架构原则 9
1.2.1 根据需要使用计算服务执行代码 9
1.2.2 编写单一用途的无状态函数 10
1.2.3 设计基于推送的、事件驱动的管道 10
1.2.4 创建更厚、更强大的前端 11
1.2.5 拥抱第三方服务 12
1.3 从服务器过渡到服务 12
1.4 无服务器的利与弊 13
1.4.1 决策驱动因素 13
1.4.2 什么时候使用无服务器 14
1.5 本章小结 15
2 .架构与模式 17
2.1 使用场景 17
2.1.1 应用程序后端 18
2.1.2 数据处理与操作 18
2.1.3 实时分析 19
2.1.4 遗留 API 代理 19
2.1.5 计划服务 19
2.1.6 机器人(Bot)和技能(Skill) .20
2.2 架构 20
2.2.1 计算即后端 20
2.2.2 遗留 API 代理 25
2.2.3 混合 26
2.2.4 GraphQL .28
2.2.5 计算即胶水 29
2.2.6 实时处理 31
2.3 模式 32
2.3.1 命令模式 32
2.3.2 消息传输模式 33
2.3.3 优先级队列模式 35
2.3.4 扇出模式 36
2.3.5 管道和过滤器模式 37
2.4 本章小结 38
3 建立无服务器应用程序 39
3.1 24 小时视频 40
3.1.1 总体需求 41
3.1.2 Amazon Web Services(AWS) 42
3.1.3 创建第一个 Lambda 函数 44
3.1.4 命名你的 Lambda 46
3.1.5 本地测试 47
3.1.6 部署到 AWS 48
3.1.7 连接 S3 和 Lambda 50
3.1.8 在 AWS 中测试51
3.1.9 观察日志 53
3.2 配置 Simple Notification Service 54
3.2.1 连接 SNS 和 S355
3.2.2 从 SNS 接收电子邮件 58
3.2.3 测试 SNS 58
3.3 设置视频权限 58
3.3.1 创建第二个函数 58
3.3.2 配置与安全 59
3.3.3 测试第二个函数 60
3.4 生成元数据 61
创建第三个函数和 FFprobe 61
3.5 收尾 64
3.6 练习 66
3.7 本章小结 67
4 设置你的云服务 69
4.1 安全模型和身份管理 70
4.1.1 创建和管理 IAM 用户
第 2 部分深入核心 99
5 身份认证和授权 101
5.1 无服务器环境中的身份认证 101
5.1.1 无服务器方法 102
5.1.2 Amazon Cognito 104
5.1.3 Auth0 105
5.2 为 24 小时视频增加身份认证 106
5.2.1 计划 106
5.2.2 直接调用 Lambda 107
5.2.3 24 小时视频网站 108
5.2.4 Auth0 配置 110
5.2.5 在网站中加入 Auth0 113
5.2.6 测试 Auth0 的集成 118
5.3 与 AWS 集成 119
5.3.1 用户信息 Lambda 120
5.3.2 API Gateway 124
5.3.3 映射 126
5.3.4 通过 API Gateway 调用 Lambda 130
5.3.5 自定义授权方 130
5.4 委托令牌 135
5.4.1 真实案例 136
5.4.2 开通委托令牌 136
5.5 练习 137
5.6 本章小结 137
6 编排者 Lambda 139
6.1 Lambda 内幕 139
6.1.1 事件模型和源 140
6.1.2 推送和拉取事件模型 141
6.1.3 并发执行 142
6.1.4 容器重用 143
6.1.5 冷 Lambda 和暖 Lambda 143
6.2 编程模型 145
6.2.1 函数处理程序 145
6.2.2 事件对象 145
6.2.3 上下文对象 147
6.2.4 回调函数 147
6.2.5 日志 148
6.3 版本管理、别名和环境变量 148
6.3.1 版本管理 148
6.3.2 别名 150
6.3.3 环境变量 152
6.4 使用命令行界面(CLI) 154
6.4.1 调用命令 155
6.4.2 创建和部署函数 155
6.5 Lambda 模式 157
6.5.1 异步瀑布 158
6.5.2 序列与并行 163
6.5.3 使用库 164
6.5.4 把逻辑移到另一个文件中 167
6.6 测试 Lambda 函数 .167
6.6.1 在本地测试 167
6.6.2 编写测试 168
6.6.3 在 AWS 中测试171
6.7 练习 173
6.8 本章小结 173
7 API.Gateway . 175
7.1 作为接口的 API Gateway 176
7.1.1 和 AWS 服务集成177
7.1.2 缓存、限制与日志 177
7.1.3 阶段和版本管理 178
7.1.4 脚本 178
7.2 使用 API Gateway 178
7.2.1 计划 180
7.2.2 创建资源和方法 181
7.2.3 配置方法执行 185
7.2.4 Lambda 函数 187
7.2.5 更新网站 191
7.3 优化网关 194
7.3.1 限制 194
7.3.2 日志 197
7.3.3 缓存 199
7.4 阶段和版本管理 202
7.4.1 创建阶段变量 202
7.4.2 使用阶段变量 203
7.4.3 版本管理 205
7.5 练习 205
7.6 本章小结 206
第 3 部分拓展架构 207
8 存储 . 209
8.1 更智能的存储 209
8.1.1 版本控制 210
8.1.2 托管静态网站 212
8.1.3 存储类别 214
8.1.4 对象生命周期管理 216
8.1.5 转移加速 217
8.1.6 事件通知 219
8.2 安全上传 220
8.2.1 架构 221
8.2.2 上传策略 Lambda 222
8.2.3 S3 CORS 配置 228
8.2.4 在网站中上传 228
8.3 限制对文件的访问 233
8.3.1 禁止公开访问 233
8.3.2 生成预签名 URL 233
8.4 练习 234
8.5 本章小结 235
9 数据库 237
9.1 Firebase 简介 238
9.1.1 数据结构 238
9.1.2 安全规则 240
9.2 为 24 小时视频添加 Firebase 241
9.2.1 架构 242
9.2.2 设置 Firebase 243
9.2.3 修改转码视频 Lambda 245
9.2.4 Transcode Video Firebase Update 函数 250
9.2.5 连接 Lambda 251
9.2.6 网站 253
9.2.7 端到端测试 258
9.3 安全访问文件 259
9.3.1 签名 URL Lambda 260
9.3.2 API Gateway 设置 261
9.3.3 再次更新网站 262
9.3.4 提升性能 262
9.3.5 提升 Firebase 安全性 265
9.4 练习 270
9.5 本章小结 270
10 最后一英里 . 271
10.1 部署与框架 271
10.2 迈向更好的微服务 272
10.3 Step Functions 277
10.4 AWS Marketplace 283
10.5 未来之路 285
A 为无服务器架构而生的服务 287
B 安装和设置 293
C 身份认证和授权的更多信息 305
D 再探 Lambda 内幕 311
E 模型和映射 317
F S3 事件消息结构 335
G Serverless.Framework 和 SAM 337