译者序
过去二十年,硅谷的创业神话激励着 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 的详细信息是无价的,这些概念和模式适用于使用任何技术的任何无服务器解决方案。