基于Serverless的前端开发模式研究
2019-12-16李莎莎
李莎莎
摘要:最近关于Serverless的研究逐步升温,Serverless将对前端开发模式产生变革性的影响。该文主要从前端开发模式的演进、ServerZess的优点和缺点以及Serverless设计思路等方面,探讨Serverless中的前端开发模式。
关键词:Serverless;前端开发;设计思路
中图分类号:TP3 文献标识码:A
文章编号:1009-3044(2019)29-0240-02
1概述
回顾前端开发模式的演进,主要有四个阶段:(1)基于模板渲染的动态页面;(2)基于AJAX的前后端分离;(3)基于Node.js的前端工程化;(4)基于Node.is的全栈开发。每一次前端开发模式的变化,都因某个变革性的技术而起。先是AJAX,而后是Node.js。那么下一个变革性的技术是什么?不言而喻,就是Serverless。最近半年Serverless这个词汇以及其引发的热烈的讨论,Serverless可能会是接下来引起前端领域革命性变化的技术之一。Serverless是一种“无服务器架构”,允许用户专注于业务逻辑,而无需担心程序的运行环境,资源和数量。对业务前端开发人员而言,Serverless会改变前后端接口定义规范;将改变前端联合模式,让前端参与服务器逻辑开发;显着降低Nodejs服务器维护阈值,只要您编写Js代码来维护Node服务而无须学习Devops。对于免费的开发人员,未来的服务器部署更灵活,更具成本效益;部署更快,更不容易出错。
前端框架总是带来后端思维,而Serverless则为前端操作和维护带来了前端思维。前端开发人员不需要拥有自己的服务,甚至不需要自己的浏览器,他们可以在每个用户的计算机上均匀地运行JS代码并进行负载均衡。从技术角度来说,Serverless就是FaaS和BaaS的结合。Serverless=FaaS+BaaS。FAAS(作为服务)+BAAS(后台即服务)可以称为无服务器的完整实现,如图1所示。除此之外,还有PASS(平台即服务)的概念。通常,平台环境由容器技术实现,最终实现NoOps(无管理),或至少Devops(开发操作和维护)。
2Serverless的优点及缺点
2.1Serverless主要优点
Serverless架构的优点如下:
(1)降低运营成本。Serverless是非常简单的外包解决方案。它允许您委托服务提供商来管理服务器,数据库,应用程序甚至逻辑,或者您必须自己维护它。由于该服务的用户数量将非常大,因此将具有规模经济。降低成本有两个方面,即基础设施成本和人员成本(运营/开发)。
(2)降低开发成本。成功的无服务器服務提供商应该能够提供一系列补充服务。这意味着您只需要在配置文件中记下数据库的名称,然后我们的数据将存储在相应的数据库中。即使一个服务提供者提供了一系列功能计算模板,那么我们只需要编写我们的配置。这一系列事情可以自动有效地完成。
(3)扩展能力。Serverless架构一个显而易见的优点即“水平扩展是完全自动的,弹性的,并由服务提供商管理”。受益于基础架构的最大好处是,您只需支付所需的计算能力。
(4)更简单的管理。Servefless架构明显比其他架构更简单。更少的组件意味着更少的管理开销。
(5)实现快速上线。对于Web项目,启动项目需要一系列”hello,world”。无服务器部署的优势使其易于上线。
(6)“绿色”的计算。据“福布斯”杂志报道,商业和企业数据中心的典型服务器仅提供平均最大处理能力输出的5%至15%。这无疑是一种资源的巨大浪费。随着无服务器架构的出现,服务提供商能够提供我们的计算能力,以最大限度地满足实时需求;这将使我们能够更有效地利用计算资源。
2.2Serverless主要缺点
作为在运行时启动的应用程序,Serverless也有一个我们需要的问题。
(1)不适合长时间运行应用。Serverless在请求到来时才运行。这意味着当应用程序未运行时,它将进入“休眠状态”,并且下次请求到来时,应用程序将需要一个启动时间,即冷启动。这个时候,可以结合CRON的方式或者CloudWatch来定期唤醒应用。如果您的应用程序需要长时间不间断运行并处理大量请求,那么您可能无法采用无服务器架构。
(2)完全依赖于第三方服务。当您决定使用云服务时,您只能在无服务器上放置不重要的API。当您拥有大量基础架构时,无服务器并不是一件好事。使用无服务器架构时,它与特殊服务提供商捆绑在一起。服务迁移变得困难。
(3)冷启动时间。无服务器应用程序的冷启动时间存在问题,尽管这种冷启动时间在大多数情况下可以在50ms内。对于带有Node.js应用程序虚拟机的Java和C#,这可能不是那么幸运。
(4))缺乏调试和开发工具。当使用Serverless Framework的时候,遇到了这样的问题:缺乏调试和开发工具。每次调试都需要反复上传代码。每次上传似乎都在部署服务器。
(5)构建复杂:Serverless便宜并不意味着简单。无服务器框架的配置比普通的Lambda配置稍微复杂一些。但是真正的应用场景远比这复杂。
(6)语言版本落后。在Node.js 6出来的时候,AWS Lambda只支持Node.js 4-3.2;在Node.js 9.0出来的时候,AWS Lambda支持到6.10.3。对于Java和Pvthon来说,他们的版本上可能基本都是够用的,我不知道C#怎么样。但是Node.js的版本显然是有点老旧的,但是都Node js 9.2.0了。
2.3Serverless给后台带来的好处
未来后端开发的经验可能类似于前端:您无须关心运行代码的服务器,您不需要关心服务器环境,不必担心负载平衡,并且可以随时调用中间件服务。尽管前后端共享代码不止有Serverless才能做到。但是,无服务器基于功能粒度的功能更符合前后多路复用代码的概念。虽然这不是一项新发明,但它足以被称为一项伟大的变革。对于前端开发人员,您会发现后台服务很简单。对于后端开发人员来说,发现服务更厚,面临更多挑战。
无服务器为后端带来的好处远远超过了挑战:
(1)推进前后端一体化。进一步降低Node编写服务器代码的门槛,消除了应用程序操作的学习成本。
(2)提高资源利用效率。消除独占资源的应用,切换到按需加载将不可避免地减少不必要的资源消耗,并将服务分散到集群中的每台机器以平衡集群的CPU水位。
(3)降低云平台使用门槛。无操作和维护,灵活扩展,基于价值的服务和高可用性。
3Serverless设计思路
3.1利用Serverless尝试服务开放
现在的挑战之一是后端功能是开放的,因为当您具有提取功能的自定义要求时,您可能需要自定义后端数据处理的逻辑。你现在可以做的是使用maven3和jdk7来构建本地开发环境测试。如果后端构建独特的无服务器BAAS服务,您可以执行在线编码,调试甚至灰度發布,以便像前端组件一样进行预测试。现在前端云开发有很多成熟的探索。
3.2Serverless应用架构设计
根据市面上流行的无服务器应用程序架构图并总结了一个通用的无服务器架构,如图2所示。
底层是实现复杂服务的后端微服务(Backend)。然后,FaaS层通过一系列功能实现业务逻辑,并为前端提供直接服务。对于前端开发人员,前端可以通过编写函数来实现服务器的逻辑。对于后端开发者来说,后端变得更靠后了。如果业务相对简单,可以实现FaaS层,甚至不需要微服务层。同时,无论是后端还是前端,我们都可以调用云计算平台提供的BaaS服务,大大降低了开发难度,降低了开发成本。小程序云开发是直接在前端调用BaaS服务的一个示例。
4总结
现在的前端开发不再是过去的前端开发,前端不仅可以做网页,还可以做小程序,做APP,做桌面程序,甚至做服务器。前端不断扩大其边界并不断探索更多领域的原因是希望它能够产生更大的价值。最好用熟悉的工具和熟悉的方法创造价值。无服务器架构的诞生将帮助前端工程师实现理想的最大化。使用Serverless,您无需过多关注服务器的操作和维护。我们需要关注的事情越来越少,但我们可以做得更多。在未来,Serverless平台还可以在如下方向进行发展:添加更多语言,改进基于Web的IDE的功能,配置更多技能,并整合自动化测试系统。无服务器也将对前端开发模型做出巨大改变,前端工程师的功能将回归应用工程师的功能。