无服务器体系结构简介

无服务器架构和函数即服务(FaaS)是当下云计算领域的大热门。除了微软和亚马逊以外,还有很多厂商提供FaaS。本文对无服务器体系结构进行了简短的介绍,并试图解释什么是无服务器体系以及为什么我们需要它。

云计算的发展

随着云计算的不断发展,云计算已经衍生出多种形式和抽象层次。

云的演变

无论是在本地构建还是一种由厂商来提供的服务,数据中心都是云计算的第一步。它对物理主机环境进行了抽象,接着我们可以用硬件单元来扩展这些环境。随着虚拟化的发展,我们开始在云环境中托管虚拟机,一般是将硬件抽象化并使用操作系统作为扩展单元。很快,我们为云建立了托管环境,并对操作系统进行抽象化的处理。这样,应用程序取代操作系统成为了新的扩展单元,但这并不是云计算发展的终点​​,因为现在我们已经转向函数或无服务器体系结构。

不同的云模型给我们留下了不同的任务。如果数据中心是在本地,则意味着我们要对本地所发生的所有事件负责。而如果将数据中心转移到云端,云计算的每一步发展都会使得我们的工作量大大减少。

云模型

无服务器体系结构实际上在SaaS之后才出现,但是在上图中把它放到了SaaS的前面,因为在SaaS体系下,用户不能控制应用程序以及其下的基础结构。

无服务器架构

函数是用于抽象语言运行时无服务器体系结构中的扩展单元。在本文中不讨论运行一个函数需要多少CPU,RAM或者其他的资源,而是讨论运行该函数所耗费的时间。在此过程中不应该受到其他指标的影响。我们编写自己的函数,将它们发布到云中,并且只为这些函数运行的时间付费。

无服务器体系结构并没有严格规定我们所编写的函数在技术上必须以何种方式实现。这只是我们所做工作的一部分。函数可以通过多种方式触发。它可以是一个定时器,该定时器可以定时运行函数,但它也可以是HTTP请求或某些相关服务中的事件。

Mike Roberts在“无服务器体系结构”(Serverless Architectures)的文章中提出了关于“函数即服务”的六个要点:

  1. 从根本上讲,FaaS运行后端代码,无需管理自身服务器系统或服务器应用程序。
  2. FaaS产品无需编码成特定的框架或库。当涉及到语言和环境时,FaaS函数是常规的应用程序。
  3. 由于无需运行服务器应用程序,所以部署工作与传统系统非常不同-我们将代码上传到FaaS提供商,它会完成其余的所有工作。
  4. 水平扩展是全自动的,有弹性的,并且由提供商来管理。
  5. FaaS中的函数由提供商所定义的事件类型来触发。
  6. 大多数提供商还允许将函数作为对入站HTTP请求(通常在某种API网关中)的响应来完成触发。

Adrian Cockroft在他的推文中明确地定义了“无服务器”:

如果您的PaaS可以在20ms内有效启动实例并运行半秒,则可以称其为无服务器。

由此我们可以得出结论:长时间运行的工作流和大规模的任务并不适合无服务器体系结构。

函数服务

目前已经有公司将函数作为服务运行。举例如下:

除此之外,还有许多其他的可用服务,所有这些服务都因技术功能和实现的差异而有所不同。

总结

无服务器体系结构可以帮助使用者构建出有用的代码片段,这些片段能够快速运行而不必消耗大量的服务器资源。但这并不意味着FaaS只能在小场景中使用。例如,虽然每个函数只是一个小单元,但是每秒可以被调用数百万次。问题是我们应该将哪些小型函数从应用程序的其他组件或层迁移到函数的对应部分。

本文的版权归 PALIN 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

编程 | 用python获取天气数据,并作定时播报

思路 1.调用和风天气的API,获取天气数据 2.用百度语音API,将天气数据合成语音 3.用树莓派每天早上定时播报天气(定时任务crontab + Pytho...

76780
来自专栏前端大白专栏

关于react-native的各种报错的最终解决方案

27090
来自专栏企鹅号快讯

CPP程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!

编程5分钟,查代码2小时! 在程序员的编程生涯,免不了和BUG打交道,甚至有些程序员被BUG虐杀的苦不堪言。 ? 当有人指出程序员代码有BUG时,程序员的回答各...

23080
来自专栏阮一峰的网络日志

USENET简介

普通的互联网用户,可能对USENET知之甚少,或者根本就没有听说过它。但是,这是一种很重要的网络应用,里面有一些真正有趣的东西。 我在网上没有找到比较通俗易懂的...

30390
来自专栏大数据

数据挖掘敲门砖-Python爬虫入门

WHAT ? 数据挖掘是一门综合的技术,随着Ai的兴起,在国内的需求日渐增大。 数据挖掘的职业方向通常有三个,顺便概要地提一下所需的技能(不仅于此) 数据分析方...

27090
来自专栏web前端教室

如何从零开始,形成自己的模块化思维方式?

计算机这东西不是凭空出现的,它是为了解决一些实际的问题,有很多时候是对现实世界的模拟。遇到问题时,经常会有人说,要有大局观,要具体问题具体分析,也可以牵强的解释...

15520
来自专栏落影的专栏

三年程序员的日常

前言 汇总平时的一些思考。 正文 如何快速上手一个庞大的工程? 这个问题,我已经经历过多次,现在的方式: 1、整理基本框架,研读代码规范,熟悉团队开发习...

45090
来自专栏Crossin的编程教室

我们一直谈论“写代码”,但你会“读代码”吗?

编程,又被称作“写代码”。这个说法有可能会带来一点点误解,让人觉得如何“写”是学习编程要解决的主要问题。但事实并非如此。尽管最终代码要在键盘上敲出来,但这个过程...

14020
来自专栏张善友的专栏

Web 上构建MDI 应用程序---Prototype Window Class

      今晚在网上看到一个非常酷的JS框架Prototype Window Class。Web开发者通过Prototype Window Class便可以轻...

22490
来自专栏CSDN技术头条

大规模数据集成: Linked Data

在本系列的前两篇文章(“ 使用 RDF 创建数据网络 ” 和 “ 使用 SPARQL 查询 RDF 数据 ”)中,您了解了资源描述框架和 SPARQL 协议和 ...

25380

扫码关注云+社区

领取腾讯云代金券