Serverless 初探

标签: serverless | 发表时间:2021-02-19 09:29 | 作者:宿雨i
出处:https://juejin.cn/frontend

Serverless

  • 广义的 Serverless :构建和运行软件时不需要关心服务器的一种架构思想。 虽然 Serverless 翻译过来是 “无服务器”,但这并不代表着应用运行不需要服务器,而是开发者不需要关心服务器。而基于 Serverless 思想实现的软件架构就是 Serverless 架构。

  • 现阶段关于 Serverless 的实现主要是基于 FaaS(函数即服务) 和 BaaS (后端即服务)的方案。

为什么说 Serverless 是 Faas + Baas 的组合?

Fass

首先如果想要实现一个接口,想让这个接口对外提供服务,就需要一台服务器进行部署我们的代码,既然 Serverless 不需要关心服务器,那就需要 Fass

FaaS(Function as a Service)本质上是一个函数运行平台,大多 FaaS 产品都支持 Node.js、Python、Java等编程语言,你可以选择你喜欢的编程语言编写函数并运行。函数运行时,你对底层的服务器是无感知的,FaaS 产品会负责资源的调度和运维,这是它的特点之一, 不用运维

另外,FaaS 中的函数也不是持续运行的,而是通过事件进行触发,比如 HTTP 事件、消息事件等,产生事件的源头叫触发器,FaaS 平台会集成这些触发器,我们直接用就行,这是 FaaS 的第二个特点, 事件驱动

FaaS 的第三个特点是 按量付费。 FaaS 产品的收费方式,都是按照函数执行次数和执行时消耗的 CPU、内存等资源进行计费的。除此之外,FaaS 在运行函数的时候,会根据并发量自动生成多个函数实例,并且并发理论是没有上限的,这是它的第四个特点, 弹性伸缩

Bass

BaaS 本质上就是把后端功能封装起来,以接口的形式提供服务在 Serverless 架构中,常见的 BaaS 产品有 AWS DynamoDB、阿里云表格存储、消息中间件等,这些服务都可以通过 API 进行访问。


其它 ass

  • 最初云厂商都是卖硬件,AWS 的 EC2、阿里云 ECS、Azure Virtual Machines,这种云计算形态也被叫作 IaaS ( Infrastructure as a Service ) (基础设施即服务)

  • 随着业务形态发展,云厂商发现可以抽象出一些通用的平台,比如中间件、数据库等,于是就把这些功能做成服务,也放在云上去卖,这就是 PaaS ( Platform as a Service )(平台即服务)

  • SaaS ( Software as a Service ) 的话,是厂商直接提供软件服务,用户花钱购买使用,也就不用自己设计网站架构了

  • FaaS 提供了运行函数代码的能力,并且具有自动弹性伸缩。基于 FaaS,我们应用的组成就不再是集众多功能于一身的集合体,而是一个个独立的函数。每个函数实现各自的业务逻辑,由这些函数组成复杂的应用。

  • BaaS 是将后端能力封装成了服务,并以接口的形式提供服务。比如数据库、文件存储等。通过 BaaS 平台的接口,我们运行在 FaaS 中的函数就能调用各种后端服务,进而以更低开发成本实现复杂的业务逻辑。


Serverless 的优缺点

优点

不用运维、弹性伸缩、节省成本、开发简单、降低风险、易于扩展

缺点

  • 依赖第三方服务
  • 底层硬件的多样性
  • 应用性能瓶颈 => 冷启动
  • 函数通信效率低
  • 开发调试复杂

函数生命周期:冷启动与热启动

在 FaaS 平台中,函数默认是不运行的,也不会分配任何资源。甚至 FaaS 中都不会保存函数代码。只有当 FaaS 接收到触发器的事件后,才会启动并运行函数。整个函数的运行过程可以分为四个阶段。

  1. 下载代码: FaaS 平台本身不会存储代码,而是将代码放在对象存储中,需要执行函数的时候,再从对象存储中将函数代码下载下来并解压,因此 FaaS 平台一般都会对代码包的大小进行限制,通常代码包不能超过 50MB。
  2. 启动容器: 代码下载完成后,FaaS 会根据函数的配置,启动对应容器,FaaS 使用容器进行资源隔离。
  3. 初始化运行环境: 分析代码依赖、执行用户初始化逻辑、初始化入口函数之外的代码等
  4. 运行代码: 调用入口函数执行代码。

当函数第一次执行时,会经过完整的四个步骤,前三个过程统称为“冷启动”,最后一步称为 “热启动”。

编写简单的 Serverless 应用

这里我们使用阿里云的 Serverless 做演示,其他平台有些小的差异,但本质都是一致的。

开发 Serverless 应用的步骤

我们编写一个简单的 Serverless 应用,这个应用的功能是: 提供一个所有人都可访问的接口,并且能够根据请求参数进行响应(比如请求 example.com/?name=Serve… 返回 Hello, Serverless )。 你可以直接点击 新建函数 进入函数计算控制台,新建一个函数。新建一个 HTTP 函数,函数创建成功后进入到代码编辑页面。

代码如下:

   exports.handler = (request, response, context) => {
    // 从 request 中获取
    const { name } = request.queries;
    // 设置 HTTP 响应
    response.setStatusCode(200);
    response.setHeader("Content-Type", "application/json");
    response.send(JSON.stringify({ message: `Hello, ${name}` }));
 }
复制代码

本质上这就是一个函数,函数有三个参数:

• request 是请求信息,你可以从中获取到请求参数; • response 是响应对象,你可以用它来设置 HTTP 响应数据; • context 是函数上下文

编写完之后保存,会在下面看到请求的测试地址。输入对应的参数进行调试,发现右面可以正常返回数据,说明我们简单的 Serverless 应用编写完成了。

相关 [serverless] 推荐:

Serverless 初探

- - 掘金 前端
广义的 Serverless :构建和运行软件时不需要关心服务器的一种架构思想. 虽然 Serverless 翻译过来是 “无服务器”,但这并不代表着应用运行不需要服务器,而是开发者不需要关心服务器. 而基于 Serverless 思想实现的软件架构就是 Serverless 架构. 现阶段关于 Serverless 的实现主要是基于 FaaS(函数即服务) 和 BaaS (后端即服务)的方案.

Knative serverless架构详解

- -
服务器是一个高性能的 Web 和反向代理服务器. Nginx 在激烈的 Web 服务器竞争中依旧保持良好的发展势头,一度成为. Web 服务器市场的后期之秀,这一切跟 Nginx 的架构设计是分不开的. 来自于my.oschina.net,,由火龙果软件Alice编辑、推荐. 无服务器架构(serverless),则表示代码可以只在需要时运行,在不需要时就停止,从而让你的基础设施能在其他方面自由使用计算资源.

Serverless/FaaS 的现状和未来

- - 午夜咖啡
FaaS 是一种新兴的技术平台,个人认为 2018 年即将迎来 FaaS 的崛起. 本文给大家提供一个 Serverless/FaaS 的现状与未来的报告,也作为自己的年度技术总结. 什么是 Serverless/FaaS. 但传统的 Application PaaS 平台,开发者对服务运行的实例还是有感的,即便是没有调用,也依然需要占用资源,并对资源付费,并不是完全的 Serverless,直到 FaaS 出现.

Serverless 的初心、现状和未来

- -
作者 | 不瞋  阿里云高级技术专家. 导读:Serverless 是如何产生的. Serverless 的未来又将如何. 本文分享了阿里云高级技术专家不瞋对于 Serverless 的看法,回顾其发展历程,并对 Serverless 的发展趋势做出预测. 回望整个计算机技术发展史,我们会发现 “抽象、解耦、集成” 的主题贯穿其中.

引入:从云计算到Serverless

- - InfoQ推荐
自世界第一台通用计算机ENIAC(Electronic Numerical Integrator And Computer, 如图1)诞生以来,计算机科学与技术的发展就从未停止过前进的脚步,尤其是近些年计算机的发展更是日新月异,有不断突破和进化的人工智能领域,有5G带来更多机会的物联网领域,还有“可信“的区块链技术,当然也有不断更新、不断迭代,不断走进“寻常百姓家”的云计算.

Serverless实战:打造个人阅读追踪系统 – ThoughtWorks洞见

- -
阅读习惯和个人知识管理体系. 进入互联网时代,知识的获取成本变得前所未有的低廉,但是无论再好的知识,若是没有对个人产生价值的话,那也只不过是一种信息噪音而已. 我在《个人知识管理:知识的三种形态》这篇文章中使用“材料 -> 资料 -> 知识”这样的路径来诠释信息的流通,如何方便快捷并且有效地收集材料,再将其整理转化为有价值的个人知识体系结构,在这个信息极度碎片化的时代变得尤为重要.

探索 Serverless 中的前端开发模式 - 掘金

- -
最近关于 Serverless 的讨论越来越多. 看似与前端关系不大的 Serverless,其实早已和前端有了渊源,并且将对前端开发模式产生变革性的影响. 本文主要就根据个人理解和总结,从前端开发模式的演进、基于 Serverless 的前端开发案例以及 Serverless 开发最佳实践等方面,与大家探讨 Serverless 中的前端开发模式.

当 SSR 遇上 Serverless,轻松实现页面瞬开

- -

谈Serverless无服务器架构和应用场景(201013)

- - 人月神话的BLOG
对于云原生解决方案中涉及到的微服务,DevOps,容器云和ServiceMesh等内容,在前面很多文章都已经谈到过,今天准备谈下对Serverless架构的一些理解. 实际上要完全理解Serverless无服务器架构是一件相对困难的事情,包括到现在我的认知里面仍然认为这种架构是无法满足传统IT应用系统的架构转型和迁移的,只能够应用到一些特定的场景.

Serverless:微服务架构的终极模式

- - DockOne.io
微服务的生态和实践已经比较成熟,其设计方法、开发框架、CI/CD工具、基础设施管理工具等,都可以帮助企业顺利实施微服务. 然而,微服务远没有达到完美,它在架构、开发、基础设施方面仍然面临新的挑战. 微服务的粒度影响服务的交付速度及扩展性,微服务的开发引入治理组件,增加了开发的难度,以容器为基础的微服务基础设施在弹性等方面仍有不足,而微服务增加带来的基础设施成本也是微服务实施的新挑战.