Node2FaaS:自动 NodeJS 应用程序转换器功能即服务

303 阅读10分钟

这是我参与更文挑战的第2天,活动详情查看: 更文挑战

以降低成本和时间花费为目标新项目,云计算收获显着计算机科学的基础。

在此提案之前——成为现实,需要大量投资在实施数据中心以支持删除项目所需的处理和存储需要大量的计算资源。云计算的概念现在是一个很好的既定的现实。许多供应商提供一系列互联网上的服务,没有主要的基础设施真正的投资。因此,云环境的用户ment 能够在短时间内访问一个卷被限制的计算资源,直到最近,大型组织。云的重要经济差异计算在于付款发生,也就是说,客户只为有效的使用资源,无需保持投资像过去一样长期分配数据中心投资。现在如果一个组织想要进行需要集群的简短调查拥有数百台机器,只需租用云服务器即可副处理所需的时间,只需支付基础设施总投资的一小部分将会。除了经济效益,这项业务模型允许对突然的变化做出快速反应在应用程序的行为中。在特定时间一年中,例如母亲节和圣诞节,它对于大型零售商网站来说很常见使用过载,导致响应时间缓慢和失败嗯。但是,快速响应这些问题可以成为销售或丢失之间的区别客户到竞争站点。云计算辅助在预防和解决此类问题lem 通过弹性,即增加和减少根据一些预设的计算能力参数,例如 CPU 使用率。有几种服务交付模式基础设施(IaaS)和平台(PaaS)来完成软件 (SaaS)。然而,云提供商不断完善他们的服务恶习,包括促进他们之间的融合。随着服务交付的增长,设想的边界由 NIST 在 2011 年重新定义。许多供应商重命名了他们的服务,尤其是 SaaS,因为软件这个词的含义非常广泛。因此,数据库即服务 (DBaaS) 等模型中文学习即服务(MLaaS),监控即服务 (MaaS) 等已经出现。在这种情况下文本中,我们使用了术语 XaaS,它表示“一切即服务”,代表了几种模式els 由提供者实施。在这种情况下,使用单体架构的局限性阻碍了可扩展性收益。减轻这种困难的一种方法是使用 FaaS 等云服务处理系统段。FaaS是一种服务客户端加载一段代码的模型十种特定语言,提供者提供从服务调用中处理该代码,通常通过 REST API。这个模型隐藏基础设施中涉及的所有复杂性。然而,利用 FaaS 模型并不是微不足道,因为它需要用户知道表单每个提供商提供的消费量。此外,开发人员必须构建应用程序考虑使用此模型,或投资相当长的时间调整应用程序已经取消与 FaaS 合作。指某东西的用途提议的框架抽象了复杂性重新要求发布代码,例如在 Lambda 中并简化服务消费流程。这这样,开发人员可以将工作重点放在应用程序上的功能,而不是提供商的详细信息。• 多种开发范式的应用,如函数式和命令式;• 在容器轻量级服务上运行的应用程序,比如Docker;• 去中心化的持续交付;• 使用 DevOps 文化(开发集成与操作)。因此,对于软件的构建,通过微服务的原理,有必要分关注应用程序功能的开发折叠。图 1 显示了比较微服务方法与单体方法。

2 功能即服务编程模型随着时间的推移而发展,目标是优化软件及其维护资金、发展能力和与业务的一致性ness。最初,软件是去以整体方式发展,即整个应用程序包含在单个软件块中。这种模型造成了通信之间的高耦合应用程序的组件,降低了可维护性。如今,系统架构师很常见以模块化方式签署他们的应用程序,分离不同复杂度的块和分组集相关功能。微服务架构已获得证据提供良好的可扩展性和改进软件维护过程 。在这种情况下,云提供商已经建模一种适合这种方法的服务,使用FaaS。自 2014 年以来一直使用术语微服务在敏捷开发社区。渗透的标准和原则微服务的概念包括:• 使用RestFul API;• 面向业务和原生的基于云的开发——选择; 而在整体方法中,整个应用程序被放置在单个进程中,在 mi-croservice 方法,每个功能都放在不同的服务。因此,在单体方法中整个应用程序需要按比例放大,在这种情况下在微服务中,只有那些具有更高 de-将按比例缩放(提供更大的合理性资源消耗)。考虑到通常使用模块不统一,就是每个模块都有不同的工作负载,单体模型可能是浪费资源。虽然有些模块不是总是使用,它们需要被实例化以启用要放大的最重载的模块。上另一方面,不同的效果发生在面向croservice的模型,其中只有最使用的模块将被有效地放大。为了满足基础设施的需求对于基于微服务的应用,一些云供应商已经开始提供作为服务的功能副模特。在其中,客户签约执行预定义的函数,加载想要的代码执行,并接收该服务器的访问地址。使用此类云服务的应用程序一直被称为无服务器应用程序,因为应用程序没有特定的服务器及其操作操作基于对提供者 API 的请求.2.1 优缺点FaaS 服务提供其采用的主要好处重刑:• 抑制对服务器管理的需求;• 自动连续弹力;• 按需付款。其他好处包括提高项目灵活性并降低风险。在这些本适合,弹性突出,因为,在关键应用 -高可用性是一个基本特征。此外,使用 FaaS,管理侧重于应用程序而不是基础设施,释放资源,提升业务逻辑。另一方面,采用的缺点基于 FaaS 的模型包括可能需要由于无法在应用程序中进行调整能够自定义操作系统的功能。此外,响应延迟函数的第一次执行可能发生在一些未使用的时间。这是由于提供者的策略离开参与链接功能的实例仅在启动后几分钟才通电最后一次通话。另一个潜在问题是提供者为数量设定的限制CPU、内存和运行时。拉-需要通过网络引起的倾向执行处理是这个的另一个缺点模型。此外,开发人员在采用 FaaS 是实现。正确地取消了解服务的运作可能意味着成功领养和放弃的区别在一些小失败后采用这种方法。如何-曾经,要达到这个阈值,可能有足够的学习曲线,以阻止采用这样的模型。为此,本文提出了一个通过减少差距来减轻这种困难的方法在开发人员和最佳结果之间通过使用自动化 FaaS 服务,即自动并透明地转换单体应用程序作为服务的功能。2.2 FaaS的公共提供者目前,主要的公有云提供商都有 FaaS服务在他们的目录中。先驱,亚马逊,提供 AWS Lambda。这项服务可以处理 Java、NodeJS、C# 和 Python,并提供一个收费前免费每月处理包服务。供应商有几个合作伙伴关系部署、监控、代码管理和安全。Google 提供 Cloud Functions 服务(谷歌,2018 年)。该服务可以处理函数用 Python 和 NodeJS 编写,就像亚马逊的Lambda,提供初始申请配额和仅在超过该配额时才开始收费。微软通过其 Azure 云服务,支持提供 Azure Functions。这服务本身允许您在 C# 中加载函数,包括使用微软自己的工具,如 Vi-sual Studio。提供者指定通过其门户网站功能仅可用在 Windows 环境中,虽然这是透明的给用户。尽管如此,仍有预测使用 Linux 的环境的可用性。

3 节点随着计算的发展,软件架构需要适应正在使用的应用程序的需要片刻。曾几何时,巨大的机器需要照顾所有的处理,并且软件主要运行在大型主机上。随着普及个人计算机,计算能力可用能够在这些机器中得到更好的使用,然后软件处理逐渐在“胖客户”。客户端编程语言在这种情况下最突出的是 JavaScript。初始通常用于小型验证和简单的交互行动,今天这种语言已成为标准并且有几个框架已经利用它来在 Web 上增加应用程序的交互性。电气与电子工程师学会(IEEE) 发布了一个排名,列出了最常用的2018 年的编程语言,以及该排名JavaScript 占据第八位。由于 JavaScript 的成功,早在2009 年 Rayan Dahl 向世界展示了 NodeJS。不仅限于一个 JavaScript 框架,没有伪装作为一种新的编程语言,NodeJs 是定义为 JavaScript 代码执行环境。主要挑战是NodeJS 打算解决的是高可扩展性当今的 Web 应用程序需求。为此,它支持端口异步执行进程,预释放其他进程被阻塞等待用于响应呼叫。NodeJs 使用 JavaScript 来处理服务器端已经整合到客户端的语言边处理。有了这个,它增加了一系列网络去无需使用 velopers 即可满足潜在用户的需求克服新的学习曲线,因为它发生在学习新程序的正常过程语。此外,它还具有强大的支持munity,它提供了大量的图书馆通过它自己的包管理器 NPM(Node包管理器)。

4 框架 Node2FaaS鉴于 NodeJS 的普及,几个系统已经使用这种技术建造,这就是为什么它被选择用于拟议的设计框架。为了使用可用的 FaaS 服务,恶习,开发人员必须了解 API 的详细信息每个供应商的,以及能够细分应用程序的功能并将其转换为对服务结构的适当调用。这可能会变得很麻烦,并阻碍开发运营商采用基于 FaaS 的方法。许多专业人士可以放弃云的好处基于架构可以提供,例如高可用性,弹性和成本节约等。鉴于上述情况,本工作提出Node2FaaS 框架。一种自动转换工具使用 NodeJS 编写的单体应用程序,到面向 FaaS 的应用程序。该工具读取目标应用程序的原始代码和con-将其转换为功能为每个的应用程序在 FaaS 服务上形成。