最简单的服务器,就是没有服务器。
——Werner Vogel,亚马逊CTO
1996年我开始接触客户端-服务器架构,体验过分布式系统的先进和复杂。21世纪初,我与电信和媒体的客户合作过几个大型项目,那时我切身体会到计算、存储和网络的限制会成为阻碍公司创新的瓶颈。
接着在关键性的2006年,以“按需”(utility)模式使用计算资源——就像使用能源、汽油和水那样——开始成为现实。那年AWS发布了它的首个存储服务(Amazon S3)和计算服务(Amazon EC2)。我对它们都产生了强烈的兴趣和好奇。
自2012年起,我专注于帮助客户在云端实现应用,或者把应用迁移到云端。为了更熟悉手头的新服务、新平台,我决定用Amazon S3作为后端存储,写一个共享式文件系统。我用Python编写实现方案,放到GitHub上开源,很快就遇上了一批志同道合的用户和贡献者。
2014年AWS Lambda横空出世时,我意识到自己已经站在变革大潮的前端。数月后一个阴雨绵绵的周末,我想我可以不借助任何实体服务器,编写一个完整的应用。仅需要浏览器上的HTML、CSS和JavaScript文件这类静态内容,配合Lambda函数在后端执行我的逻辑,再加上用事件来支配商业流程,应用就完成了。我写了一个“简单的”认证服务(详见本书第8~10章),再次放到GitHub上共享。反响之热烈出乎我的意料,显然,我抓住了开发者的痛点。
经验分享之谈最后就成了本书。我希望本书能帮助你接受无服务器计算的新趋势,开发出无与伦比的新应用,检验新技术、新数据。我随时洗耳恭听你的故事,帮助同道中人实现理想将是我无上的荣光。
本书分为四部分。第一部分(第1~3章)介绍了基础技术,比如AWS Lambda和Web API。第二部分(第4~12章)是本书的核心,讲解了事件驱动应用的构建方法,让你可以用事件串联多个函数,构建新的应用。第三部分(第13~15章)主要关注从开发到生产,帮助你优化DevOps流程。第四部分(第16章和第17章)介绍了如何把Lambda函数与AWS平台以外的服务整合起来,用AWS Lambda改进沟通方式,自动完成代码管理。
本书自始至终的逻辑是递进的,建议按照顺序阅读。
如果你已经涉猎过AWS Lambda的基础内容,可以跳过第一部分,直接从第二部分开始,学习构建更为复杂的事件驱动应用。
第三部分和第四部分可以作为参考内容,帮助你实现新的想法,或者对照我所建议的做法,巩固对知识的掌握。
云计算的发展日新月异,因此我只能关注一些基本的概念,如分布式系统和事件驱动设计。在我看来,在这个分布式的世界里,这些内容对所有IT系统开发者都是至关重要的。
本书的目标读者是那些没有云技术经验,同时希望了解无服务器计算和事件驱动应用前沿技术的开发人员。如果你已经对Amazon EC2和Amazon VPC这类AWS服务有所了解,本书将为你开辟一个新的认知视角,帮助你用服务而非服务器的角度构建应用程序。
本书的每个专题都附带了丰富的样例。大段代码或夹在文本中的代码都会用等宽字体显示,以区别于正文。类、方法名、对象属性,以及其他代码相关的术语和内容,也都会使用等宽字体。
本书中的一些源代码可以从以下网站获得:http://www.manning.com/aws-lambda-in-action和https://github.com/danilop/AWS_Lambda_in_Action。
我要感谢许多人。这些年来,他们与我并肩工作、交换想法、分享有趣的点子,让我从中获益匪浅。我不喜欢列名单,所以这里没有他们的名单。我相信那些帮助过我的人能从中读出我的谢意。这里需要特别感谢几位仁兄:Toni Arritola,他总能厘清我偶尔混乱的思路,用简明易懂的语言说出我的想法,让本书内容条理清晰;Brent Stains,他给了我许多极有价值的提示和技术视角;Mike Stephens,是他最先提出了让我写这本书的想法。
此外还要感谢不吝宝贵时间,为本书的改进建言献策的评论者们:Alan Moffet、Ben Leibert、Cam Crews、Christopher Haupt、Dan Kacenjar、Henning Kristensen、Joan Fuster、Justin Calleja、Michael Frey、Steve Rogers、Tom Jensen、Luis Carlos Sanchez Gonzalez(技术审校)。
谨以此书献给我的妻子Paola,她陪伴我度过了撰写这本书的每一个周末,目睹了背后所有的努力。献给我的父母,他们在我年幼时就开始支持我学习计算机。献给我的兄弟,他们给予了我支持。