无服务器机架


无服务器与服务器的物理缺失无关。 这不是容器的“杀手””,也不是过去的趋势。 这是在云中构建系统的新方法。 在今天的文章中,我们将探讨无服务器应用程序的体系结构,看看无服务器服务提供商和开源项目将扮演什么角色。 最后,我们将讨论无服务器。

我想编写应用程序的服务器端(甚至是在线商店)。 它可以是聊天,发布内容的服务或负载平衡器。 无论如何,都会有很多麻烦:您将必须准备基础结构,确定应用程序的依赖关系,并考虑主机操作系统。 然后,您需要更新不会影响其余整体组件工作的小型组件。 好吧,我们不要忘记在负载下进行缩放。

但是,如果我们使用临时容器,其中已经预先安装了所需的依赖项,并且容器本身彼此隔离并且与主机OS隔离,该怎么办? 我们将整体分为微服务,每个微服务都可以独立于其他进行更新和扩展。 将代码放在这样的容器中后,我可以在任何基础架构上运行它。 已经更好了。

如果您不想配置容器? 我不想考虑扩展应用程序。 当服务的负载最小时,我不想为空闲的正在运行的容器付费。 我想写代码。 以轻快的速度专注于业务逻辑和市场产品。

这些想法使我转向了无服务器计算。 在这种情况下,无服务器并不意味着物理上没有服务器,而是意味着无需为管理基础架构而头痛。

这个想法是,应用程序逻辑分解为独立的功能。 它们具有事件结构。 每个功能执行一个“微任务”。 开发人员所需要做的就是将功能加载到云提供商提供的控制台中,并将它们与事件源相关联。 该代码将根据请求在自动准备的容器中执行,我将只为执行时间付费。

让我们看一下应用程序开发过程的外观。

来自开发商


之前,我们开始讨论在线商店的应用程序。 在传统方法中,系统的主要逻辑由整体应用程序执行。 即使没有负载,带有应用程序的服务器也会不断运行。

要切换到无服务器,我们将应用程序分解为微型任务。 在它们每个之下,我们编写了自己的函数。 功能彼此独立,并且不存储状态信息。 它们甚至可以用不同的语言编写。 如果其中之一崩溃,则整个应用程序将不会停止。 应用程序架构将如下所示:


在Serverless中划分功能类似于使用微服务。 但是微服务可以执行多个任务,理想情况下,一个功能应该执行一个任务。 想象一下,任务是要收集统计信息并根据用户的要求进行显示。 在微服务方法中,任务由具有两个入口点的一项服务执行:写入和读取。 在无服务器计算中,这些将是两个不相互关联的不同功能。 例如,如果统计信息的更新频率比下载的更新频率高,则开发人员可以节省计算资源。

无服务器功能必须在短时间内执行(超时),这由服务提供商确定。 例如,对于AWS,超时为15分钟。 这意味着必须更改长期功能(长期)才能满足要求-此无服务器版与当今流行的其他技术(容器和平台即服务)不同。

我们为每个功能分配一个事件。 事件是动作的触发器:
大事记函数执行的动作
产品图片已上传到商店压缩图像并上传到目录
物理商店地址已在数据库中更新将新位置上传到地图
客户付款开始付款处理
事件可以是HTTP请求,流数据,消息队列等。 事件的来源是数据的更改或外观。 另外,可以通过计时器运行功能。

该架构有效,该应用程序几乎变得无服务器。 接下来,我们去服务提供商。

来自提供商


无服务器计算通常由云服务提供商提供。 他们使用不同的名称:Azure Functions,AWS Lambda,Google Cloud Functions,IBM Cloud Functions。

我们将通过提供者的控制台或个人帐户使用该服务。 可以通过以下方式之一下载功能代码:

  • 通过网络控制台在内置编辑器中编写代码,
  • 下载包含代码的存档,
  • 与公共或私人git仓库一起工作。

在这里,我们配置调用该函数的事件。 不同的提供者可能具有不同的事件集。



提供商在其基础架构上已经构建并自动化了功能即服务(FaaS)系统:

  1. 功能代码到达提供方的存储库。
  2. 发生事件时,具有准备好的环境的容器将自动部署到服务器。 每个函数实例都有其自己的隔离容器。
  3. 从存储中,函数被发送到容器,进行计算,返回结果。
  4. 并行事件的数量正在增长-容器的数量正在增长。 系统自动缩放。 如果用户不访问该功能,它将处于无效状态。
  5. 提供者设置容器的空闲时间-如果在这段时间内功能未出现在容器中,则会将其销毁。

因此,我们可以立即使用无服务器。 我们将根据即付即用模型,仅针对已使用的那些功能以及使用时的时间来为服务付费。

为了向开发人员介绍该服务,提供商可以提供长达12个月的免费测试,但它们会限制总的计算时间,每月的请求数量,资金或功耗。

与提供者合作的主要优点是无需担心基础架构(服务器,虚拟机,容器)的能力。 就其本身而言,提供商可以在自己的开发中或使用开源工具来实施FaaS。 我们将进一步讨论它们。

来自开源


在过去的几年中,开源社区一直在积极开发无服务器工具。 特别是最大的市场参与者为无服务器平台的发展做出了贡献:

  • Google为开发人员提供了开源工具Knative 。 它的开发涉及IBM,RedHat,Pivotal和SAP。
  • IBM在OpenWhisk Serverless平台上工作,该平台随后成为Apache Foundation项目。
  • Microsoft部分打开了Azure Functions平台代码。

还朝着无服务器框架的方向进行了开发。 KubelessFission部署在预先准备的Kubernetes集群中, OpenFaaS可与Kubernetes和Docker Swarm一起使用。 该框架充当一种控制器-根据请求,它准备在集群内部运行时,然后在集群中运行功能。

框架为工具配置留出了满足您需求的空间。 因此,在Kubeless中,开发人员可以设置函数执行的超时时间(默认值为180秒)。 为了解决冷启动问题而进行的裂变提供了使部分容器始终保持运行的方式(尽管这会带来停机成本)。 OpenFaaS为每种口味和颜色提供了一组触发器:HTTP,Kafka,Redis,MQTT,Cron,AWS SQS,NAT等。

入门说明可以在框架的官方文档中找到。 与他们一起工作比与提供者一起工作意味着更多的技能-至少这是通过CLI启动Kubernetes集群的能力。 最大,包括其他开源工具(例如,Kafka的队列管理器)。

无论我们如何与Serverless一起工作-通过提供程序或使用开源,我们都会获得Serverless方法的许多优点和缺点。

从优缺点的角度


Serverless开发了一种容器基础结构和微服务方法的思想,其中团队可以以多语言模式工作而不必局限于一个平台。 简化了系统的构建,并且修复错误变得更加容易。 微服务体系结构使您可以比单片应用程序更快地向系统添加新功能。

通过让开发人员仅专注于应用程序的业务逻辑和编码, Serverless可以进一步缩短开发时间 。 结果,缩短了开发时间。

另外,我们可以自动缩放负载,并且仅在使用资源时和使用时才支付费用。

像任何技术一样,无服务器也有缺点。

例如,这样的缺点可能是启动时间短(对于JavaScript,Python,Go,Java,Ruby等语言,平均启动时间最多为1秒)。

一方面,实际上,冷启动的时间取决于许多变量:函数编写的语言,库的数量,代码的数量,与其他资源(相同的数据库或身份验证服务器)的通信。 由于开发人员控制这些变量,因此他可以缩短启动时间。 但另一方面,开发人员无法控制容器的启动时间-一切都取决于提供者。

当函数重新使用由上一个事件启动的容器时,冷启动可以变成热启动。 这种情况将在三种情况下发生:

  • 如果客户经常使用该服务,并且对该功能的调用数量正在增加;
  • 提供者,平台或框架是否允许您始终保持部分容器运行;
  • 如果开发人员运行计时器功能(例如,每3分钟运行一次)。

对于许多应用而言,冷启动不是问题。 在这里,您需要基于服务的类型和任务。 一秒钟的延迟启动对于业务应用程序并不总是很关键,但对于医疗服务却可能很关键。 在这种情况下,无服务器方法可能不再适用。

Serverless的下一个缺点是函数的生存期短(函数必须执行的超时时间)。

但是,如果必须处理长期的任务,则可以使用混合体系结构-将无服务器与其他技术结合起来。

并非所有系统都可以按照无服务器方案运行。

某些应用程序仍将在运行时存储数据和状态。 一些体系结构将保持整体,而某些功能将长期存在。 但是,(无所不包(就像云技术一样,然后是容器),无服务器是一项具有广阔前景的技术。

本着这种精神,我想顺利地继续探讨应用无服务器方法的问题。

在应用程序方面


在2018年,无服务器使用率增加了一半半 。 在已经在其服务中实施了该技术的公司中,有诸如Twitter,PayPal,Netflix,T-Mobile,可口可乐等市场巨头。 同时,您需要了解Serverless并非万能药,而是解决某些任务的工具:

  • 减少停机时间资源。 您无需将虚拟机始终保持在很少访问的服务下。
  • “即时”处理数据。 压缩图片,剪切背景,更改视频编码,使用IoT传感器,执行数学运算。
  • 将其他服务粘合在一起。 带有内部程序的Git存储库,带有Jira和日历的Slack聊天机器人。
  • 平衡负载。 在这里,我们将详细介绍。

假设有一项服务可供50个人使用。 它下面是一个虚拟机,其硬件较弱。 定期地,服务上的负载会大大增加。 然后弱的铁不能应付。

您可以在系统中包括一个平衡器,该平衡器会将负载分配给三个虚拟机。 在此阶段,我们无法准确预测负载,因此我们将一定数量的资源“保留”运行。 并且多付停机时间。

在这种情况下,我们可以通过一种混合方法来优化系统:对于负载平衡器,我们保留一个虚拟机,并使用功能将其链接到无服务器端点。 如果负载超过阈值,则平衡器将启动部分请求处理中的功能实例。


因此,可以在不经常使用的地方使用无服务器,但是可以集中处理大量请求。 在这种情况下,运行15分钟的多个功能比一直持有虚拟机或服务器的收益更高。

拥有无服务器计算的所有优点,在实施无服务器计算之前,您首先应该评估应用程序逻辑,并了解无服务器在特定情况下可以解决的任务。

无服务器和Selectel


在Selectel,我们已经可以通过控制面板更轻松地虚拟私有云中 使用Kubernetes 。 现在,我们正在构建自己的FaaS平台。 我们希望开发人员能够通过方便,灵活的界面使用无服务器解决问题。

是否要遵循新的FaaS平台的开发过程? 在服务页面上订阅Selectel“ Cloud Functions”新闻通讯。 我们将讨论开发过程并宣布Cloud Functions的封闭版本。

如果您有任何想法,理想的FaaS平台应该是什么,以及如何在项目中使用Serverless,请在评论中分享它们。 开发平台时,我们会考虑您的意愿。

本文中使用的材料:

Source: https://habr.com/ru/post/zh-CN452266/


All Articles