在本文中,我们将详尽论述无服务器技术的发展历程、优缺点、用途与主要技术参与者。
您的无服务器开发工作是否身陷困境?
无服务器这个表述本身其实并不确切,或者说是一种误读。作为一项炙手可热的新兴技术,无服务器其实直到最近几年才被大家所熟知。要说无服务器架构中到底有没有服务器,答案当然是肯定的。但真正重要的问题在于,我们需不需要分心管理这些服务器?
用不着。
以往,一切底层硬件都以裸机形式存在,部署在本地并由组织自行管理。经过一段时间的发展,虚拟机出现了,这是一种模仿基于硬件型服务器的强大软件。之后是在分布式计算平台启发下诞生的云计算。有了云计算的初步普及,强调在操作系统层级进行虚拟化的容器技术快速出现并流行起来。最终,云兴起让IaaS(基础设施即服务)走进千家万户,而更进一步的PaaS(平台即服务)也让服务器配置获得了自动化助力。
无论大家支不支持,技术总是在不断发展,并持续影响我们周遭的一切。过去十年以来,我们已经见证了连接性、计算能力、存储等领域的巨大提升。而如今无服务器架构的一路高歌猛进,则延续了PaaS趋势带来的重大范式转变。随着亚马逊云科技在2014年re: Invent大会上正式推出Lambda,无服务器真正成为一股代表历史必然的力量,并一步步成为如今整个软件架构世界的一大核心议题。
深入剖析无服务器
无服务器计算是一种无需管理任何服务器即可构建并运行应用程序与服务的云计算模式。因此,无服务器这一名称本身也体现出了操作人员完全无需触及服务器配置、扩展与管理的客观现实。无服务器中包含两个存在交集但又有所差异的领域——BaaS后端即服务以及FaaS函数即服务。
虽然有些人认为它是纯粹的新生事物,但无服务器概念本身已经有点年头了。Zimki早在2006年就推出了第一套“按用量计费”的代码执行平台,但在短短一年之后就关停了相关服务。Salesforce公司的Heroku则从2007年到现在一直默默运行自己的Web应用程序部署模型。Google App Engine于2008年4月亮相,但仅支持部分谷歌功能。但随着时间的推移,App Engine已经由最初的自定义Python执行框架发展成当前最受欢迎的Web应用程序开发与托管云平台之一。
美丽新浪潮
随着事件驱动机制席卷整个IT行业,强调即用性与无状态的计算容器开始发挥巨大作用。与传统架构的区别在于,这类计算引擎在第三方调用一次后即被终止。于是,人们将其称为函数即服务,简称FaaS。开发商们迅速利用这项特性通过特定事件触发自己预先准备好的业务逻辑。
FaaS对基础设施层进行完全抽象,开发者只需要按服务使用时长付费。引用Amazon Lambda的表述:
无需仇视于服务器本身,您可以直接运行代码并仅为消耗的计算时长付费。
FaaS市场的核心驱动力,主要在于近期由DevOps转向无服务器计算的整体趋势。根据预测,全球无服务器市场将以32.7%的速度迅猛增长,行业专家们对于无服务器技术的前景也抱有无限的期许。
无服务器的优势
无服务器的出现,消除了服务器集群管理及“始终在线”等要求给操作人员带来的传统负担。底层服务器集群能够自主灵活扩展,提供适当的基础设施支持,甚至随时满足流量激增等极端状况。服务供应商定期监控并管理这些设施,包括为其安装安全补丁并修复其他bug。这不仅直接消除了不少预算种类,更显著降低了运营成本与人力投入。
在无服务器领域,您只需要按实际使用量付费,调用的计费单位更可细化到几分之一秒。可以想见,由这样的生产就绪基础设施带来的输出速度无疑极快极强。相较于在本地设施中构建不同的软件堆栈并费力提供运营支持,任何第一次接触到无服务器技术的开发者都会感受到简略的明显提升。亚马逊云科技及其他几乎所有无服务器解决方案供应商都提供免费的套餐选项与语言中立型端点方案(除Google Cloud外,其他云厂商均提供多种运行时/开发环境选项),希望让客户的首次体验更轻松、更愉悦。
无服务器的短板
但任何事物都不可能完美无瑕,无服务器也是一样——它会带来不少隐性成本。除了常规的CPU与内存使用之外,无服务器架构还涉及API请求、存储与网络等资源需求。有时候,您需要根据特定业务需求同时使用多项函数实现,其难度要远远高于使用单一容器。另外,由于无服务器的总体逻辑具有鲜明的分布式特性,因此不少用户会感到代码维护难度上升到了新的水平——而且对于某些更为复杂的用例,使用Kubernetes的出现算是一大福音,能够以成熟的方式帮助我们提高生产效率。
现有无服务器供应商的另一大短板,在于未能给本地主机提供可靠的集成测试设施。虽然这种没有简单模拟方法的困境可以通过Serverless Framework或者Amazon-sam-local在一定程度上得到克服,但我们仍然无法对设备进行手动调整以充分匹配应用程序的需求——因为服务器层是“无”的,还记得吗?
另外,由无服务器方案带来的供应商锁定问题可能同样令人头痛,目前不同无服务器平台总是有着种种独特性与局限性,因此难以互连互通。最后,无服务器应用程序在冷启动时往往会遭遇较高延迟。
无服务器市场的竞争形势
不同供应商还在自己无服务器平台上推出了一系列完全托管产品。这些后端服务不需要任何配置、维护或管理。
大部分Amazon服务都具有对应于特定可用区的端点,用以抵消跨国应用面对的延迟难题。开发人员可以自由使用这些区域端点或默认的北弗吉尼亚端点。感兴趣的朋友可根据下方链接了解不同Amazon服务在特定区域内的支持情况。同理,其他无服务器供应商也都提供多个不同的可用区选项。
链接
https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/
Amazon Lambda及其他服务还具有支持多种编程语言的无服务器开发SDK。亚马逊云科技之前(2018年1月)正式宣布支持Go语言。关于不同无服务器供应商间的差异与共性比较,请参阅此文。
此文
https://headmelted.com/serverless-showdown-4a771ca561d2
无服务器特性剖析
无服务器应用程序可保证您无需配置或管理服务器,即可轻松运行代码内容。无服务器技术的兴起也让无数潜在应用有了实现的可能,其中包括:
1. 实时数据处理
实时处理在无服务器领域有着广泛的应用空间。当用户在台式机、智能手机或者平板电脑等设备上调整所查看网站图像的大小时,具体缩放操作即可由Amazon Lambda完成。
2. 实时流处理
Localytics使用Lambda处理数十亿条历史与诸社交媒体趋势数据,以供企业用户随时查询。
3. 提取、转换与加载(ETL)
作为全球最大的房地产品牌之一,Zillow公司利用Amazon无服务器技术栈为客户带来近实时的房屋估价体验。
4. 移动后端
Bustle.com是一家专为女性用户提供新闻与时尚资讯的网站。他们将Lambda与API Gateway结合起来,用于支持其iOS与网站后端。随着向全新无服务器架构的迁移,开发人员无需分神于基础设施管理与配置,能够专注于推动创新。
5. 无服务器Web应用程序
TimerCheck.io是一项“看似简单、但背后却蕴藏巨大力量的Web服务”。他们的服务完全建立在Amazon API Gateway与Amazon Lambda之上,为用户们提供无限期运行、不设数量上限的计时器。
除了以上知名案例之外,亚马逊云科技还拥有丰富的用例素材可供参考。
亚马逊云科技
https://aws.amazon.com/solutions/case-studies/enterprise/
为无服务器开发赋能
软件架构的无服务器化倾向已经逐渐展现。当然,无服务器的全面普及仍有难度,其中也存在着不少需要填补的技术空白。好在工具本身也没有止步不前,而是不断挑战新的极限。之前提供的Serverless Framework就提供一款CLI工具,允许用户与多家云服务商相集成。
已经被Amazon收购的前独立云IDE Cloud9则强调将开发能力引入无服务器堆栈。但目前,Cloud9的开发环境设置仍然需要使用新的Amazon EC2实例或者您的自有Linux服务器。不少用户报告称,整个流程的上手难度要高于原初Cloud9(c9.io)。对于这个问题,建议大家参考这篇指导文章,其中提到充分发挥Amazon Lambda的功能以回避自行上传本地构建的第三方依赖项包。
指导文章
https://dzone.com/articles/writing-a-self-sufficient-aws-lambda-function
???? 想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注在上海、北京、深圳三地举办的2021亚马逊云科技中国峰会!点击图片报名吧~
考量无服务器的未来
作为市场上的新生力量,SLAppForge公司最近刚刚发布Sigma的测试版本,这是一款用于开发及部署无服务器应用程序的定制化编辑器。它采用的混合模型能够利用拖放风格实现初始代码的全部功能。Sigma还通过自身的无服务器架构将平台的底层复杂性隐藏了起来,保证开发人员不必深入研究长篇累牍的说明文档与使用教程。
这款强大的IDE还配备有直观的代码建议、上下文感知式代码补全、代码片段自动生成等功能,但目前只支持Node.js。它还能够完成无服务器应用程序的持续集成与持续交付流程。只要您拥有网络浏览器(相信大家肯定有)、一个GitHub账户再加上一个亚马逊云科技账户,就算是做好了一切准备。无需额外安装步骤,您就能将以往耗费几小时甚至几天的无服务器应用程序部署流程缩短到几分钟之内。
总结
面向无服务器的范式性转变已经成为定局,其整体趋势堪比当初由本地部署向云端的转变。也许就在不久的未来,我们将见证应用程序的全面无服务器化。现在是时候投身于这波浪潮,借无服务器之力提供您的生产力与工作效率了。抛开基础设施带来的管理负担,完全专注于业务逻辑开发,让我们朝着新的方向共同进发!
听说,点完下面4个按钮
就不会碰到bug了!