2009年,业界提出DevOps理念。维基百科上给出的定义为“DevOps是软件开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程、方法和体系的一个集合。”
2011年,Forrester发布报告“扩大DevOps至NoOps”,预测在不久的将来,一些企业将越来越多的依赖于云,开发者将能更加自动地进行程序构建(building)、测试与部署等运维操作,最终达到NoOps。
虽然该术语表示这些公司将不再需要运维人员,但是报告本意谈论的却是开发者将使用更加自动化的工具,而这些工具需要更少的人工干预。随后PaaS被视为是实现NoOps的最佳方式。
2014年,云厂商AWS推出了“无服务器”的范式服务。
最初,“无服务器”意在帮助开发者摆脱运行后端应用程序所需服务器设备的设置和管理工作。这项技术的目标并不是为了实现真正意义上的“无服务器”,而是指由第三方供应商负责后端基础结构的维护,以服务的方式为开发者提供所需功能,例如数据库、消息以及身份验证等。这种服务基础结构通常可以叫做后端即服务(Backend-as-a-Service,BaaS),或移动后端即服务(MobileBackend-as-a-service,MBaaS)。
但Amazon在2014年发布的AWS Lambda让“无服务器”这一范式提高到一个全新的层面,为云中运行的应用程序提供了一种全新的系统体系结构。至此再也不需要在服务器上持续运行进程以等待HTTP请求或API调用,而是可以通过某种事件机制触发代码的执行,通常这只需要在AWS的某台服务器上运行一个简单的功能。一些人将这种模式叫做功能即服务(Function-as-a-Service,FaaS)。
无服务器架构(又称FaaS)是指企业或个人无需购买、租赁或配置用于支持后端代码运行的物理或者虚拟服务器。无服务器解决方案通常由Web服务器、FaaS层、安全令牌服务(STS)、用户验证以及数据库等要素组成。
无服务器代码可以与传统服务器风格的代码(例如微服务)结合使用。例如,我们可以将一款Web应用中的部分代码编写成微服务形式,而另一部分则可以编写成无服务器代码形式。或者,在编写中完全不需要任何服务器配置要素的应用程序也可以实现无服务器化。
FaaS提供了一个平台,允许开发人员能够响应事件执行代码,而无需构建和维护复杂的基础架构,只需要经由第三方应用程序或服务来管理服务器端的逻辑和状态。
无服务器计算的4大弊端
1. 第三方API系统导致的问题
供应商控制、多租户问题、供应商锁定以及安全缺陷等,都有可能是由第三方API所导致的问题。在实施API时放弃系统控制可能会导致系统宕机、强迫性API升级、功能缺失、意外限制以及成本变更等后果。此外,多租户问题也存在于其他云计算框架之中。
Salesforce(PaaS)就因其多租户云结构而施加了部分监管限制,开发人员在使用Salesforce时必须要尽可能避免相关问题。具体而言,多租户解决方案往往会在安全性、稳定性以及性能层面存在问题。
2. 操作工具缺失
开发人员依赖供应商为其提供调试与监控工具。一般来说,调试分布式系统的任务非常困难,通常需要访问大量的相关指标才能确定产生问题的根本原因。
3. 架构的复杂性
开发人员通常需要花费大量时间来评估、实施和测试具体功能,才能最终决定这些功能应该如何进行细分。一次应用程序调用操作中所涉及的功能数量应该保持平衡。管理太多功能无疑将使问题变得更加复杂化,而忽略粒度将最终导致微服务架构变为“迷你整体”架构。
目前,Lambda(亚马逊网络服务AWS提供的一种计算服务,其能够以一种大规模并行方式执行代码,以响应事件)已经对用户能够在所有lambda表达式上运行的并发执行总数作出了限制。其中的问题在于,这个限制是适用于整体AWS帐户的。一些组织会使用相同的AWS帐户进行生产及测试。这就意味着,如果组织中的某位工作人员着手进行一项新的负载测试,并尝试执行1000个并发Lambda函数,那么生产应用程序将立即遭遇拒绝服务(DoS)状况。
4. 实施的困难性
集成测试无服务器应用程序的难度非常高。与其他体系机构相比,无服务器FaaS(即每项功能)的集成单元要小得多,因此我们需要将大量单元加以集成,方能正常完成测试。此外,也存在一些与部署、版本控制和打包相关的问题。大家可能需要为整体逻辑应用程序中的每项功能单独部署一项对应的FaaS组件。这也就意味着,您不能以原子性方式对一组功能进行统一部署,而由于不存在版本化应用程序的概念,所以原子回滚(atomic rollback)也无法实现。这样的话,您可能需要关闭任何触发相应功能的事件源、部署整体功能组,然后再重新启动事件源。
总结
无服务器架构是架构领域出现的一种激动人心的新变化,随着开发人员积极采用 AWS Lambda 等计算服务,这种架构会更为迅速地发展起来。如今,一些无服务器应用程序支持成千上万个用户,并执行复杂的操作,包括处理繁重任务,比如视频编辑和数据处理。在许多情况下,无服务器架构可获得比传统模式更好的效果,而且实施起来成本更低、速度更快。但是对于上文所述的有关这种架构的弊端也必须予以高度重视,并努力寻找解决方案应对上述弊端,以推动无服务器架构更加安全、稳定的发展。