---
url: https://sugarat.top/technology/theory/serverless.md
---

# Serverless

**闲言碎语**

前段时间看了一些`Serverless`的文章，恰好最近又听了一门`Serverless`的应用实践课程，就把笔记拿出来和大家分享一下，如表述有误还请各位斧正

## 大家关心的问题

1. Serverless是什么
2. 为什么Serverless这么火
3. 与前端的关系
4. 能帮助前端解决什么问题
5. 该不该用Serverless来承载业务
6. 扩缩容策略是什么

因笔者能力有限，无法全都回答上😄,其它的就交给评论区的各位大牛了

## Serverless 是什么

Serverless直译为中文是“无服务器”，但是实际上它仍需要服务器，只不过服务器的管理以及资源分配部分对用户不可见

Serverless 架构即“⽆服务器”架构，它是一种全新的架构方式，是云计算时代⼀种⾰命性的架构模式

## 相关概念

|                   英文                    |    中文    |                                   解释                                    | 与Serverless联系 |
| :---------------------------------------: | :--------: | :-----------------------------------------------------------------------: | :--------------: |
| FaaS ---- Function as a Service | 函数即服务 | 无服务计算的一种**形式**是在无状态容器中运行的事件驱动型计算执行模型 |       形式       |
|             Function Compute              |  函数计算  |                       事件驱动的全托管**计算服务**                        |       形式       |
|              Cloud Function               |  ☁️云函数   |                           放在☁️上管理的一个函数                           |       命名       |

## 传统开发

### 开发流程

![图片](https://img.cdn.sugarat.top/mdImg/MTYwNTI1OTM2NTgyNw==605259365827)

### 开发之外的问题

对开发团队的要求越来越高

![图片](https://img.cdn.sugarat.top/mdImg/MTYwNTI1OTgwMzM3OA==605259803378)

### 上线后

![图片](https://img.cdn.sugarat.top/mdImg/MTYwNTI1OTkzMDY1MQ==605259930651)

* 运维复杂
* 测试复杂
* 扩展复杂
* 稳定安全的运行

解决上述困境的方案：**抽象+上云**

## 技术变革,思想先行👏

![图片](https://img.cdn.sugarat.top/mdImg/MTYwNTI2MDQzNjQ3Mg==605260436472)

名词解释（云计算中的一些概念）：

* On-Premise: 本地部署
* IaaS: 基础设施即服务
* CaaS: 通信即服务
* PaaS: 平台即服务
* SaaS: 软件即服务

[云原生](https://www.jianshu.com/p/a37baa7c3eff)特点：

* 业务开发变轻，变薄，聚焦业务逻辑
* 基础设施变重，变厚，变标准

云计算的一些特点：

* 节约成本
* 缩短应用部署时间
* 系统自动扩容
* 业务升级不中断
* 故障自动检测定位
* 。。。💡

**“上云”已成为各个行业技术变革的必经之路**

## 云的未来 - Serverless

追求更低的心理成本，就是能力闭环

![图片](https://img.cdn.sugarat.top/mdImg/MTYwNTI2MzIwNzg4MA==605263207880)

Serverless 可能是目前资源抽象最高级别，为能力闭环带来了可能性

## 价值

> Serverless 真正的价值不在于节省了成本，而在于节省了时间,真正的价值在于时间效率，而不是成本效率真正的价值在于时间效率，而不是成本效率

传统云计算和Serverless云计算最主要的区别在于客户是否需要为未被使用或者未被充分使用的资源支付费用

以前，无论是内部数据中心还是云上，我们都需要提前预测容量和资源需求，并且提前准备好

在传统开发中，我们需要提前启动服务器以便随时执行调整镜像大小的服务

而在Serverless配置中，只需要调整代码执行的时机，即只在函数被调用时候执行

Serverless计算服务将函数作为输入，执行逻辑，返回输出，之后关闭。即只需要为函数实际执行所消耗的资源付费，即用即付（Pay-as-you-play），只用为实际使用的资源付费.

## 总结

Serverless是一种思想，不一定是所谓的 FaaS + BaaS（后端即服务）

### 1. 为什么Serverless这么火

> 在中国，能算清账的公司已经打败了99%的公司

现代软件开发成本非常的高，主要就在于 “成本意识”

函数即服务（FaaS）作为 Serverless 时代重要的发展⽅向，能够从⼯程效率、可靠性、性能、成本等⽅方⾯给开发者（企业）带来巨大的价值，尤其是能够极大地提升研发效率。

因此，拥抱FaaS成为开发者关心的重要技术领域

### 2. 能帮助前端解决什么问题

Node.js的出现 让前端开始有了成本意识

是否在项目中使用Node的心理活动：

* 用: 具备全栈视角，参与更多的架构决策，有更多优化手段
* 不用: 担心出问题，维护成本高

本质问题：

> 生产关系 与 生产力 的问题

Node.js可以解决简单的 **能力自治** , 不依赖于后端人员（业务中前期，后端人员少时）

随着业务发展，成熟的业务追求更高的稳定性，会逐渐抛弃 Node.js

Node.js带来了 `运维成本高` 的问题，是Node.js在企业落地的一个阻碍

理想情况是开发人员只关心业务逻辑：

* 常规应用
  * 业务逻辑（开发人员负责）
  * 外部服务集成（开发人员负责）
  * 基础设施管理（开发人员负责）
* Serverless应用
  * 业务逻辑（开发人员负责）
  * 外部服务集成（云商负责）
  * 基础设施管理（云商负责）

对于前端开发者而言，只是想要个接口，或者是包装一个接口，不一定要了解Node Web框架

Node.js成也Eventloop败也Eventloop，本身Eventloop是黑盒，开发将什么样的代码堆进去你是很难全部覆盖的，偶尔会出现Eventloop阻塞的情况，排查起来是极为痛苦的

利用Serverless，可以有效防止Eventloop阻塞。比如加密是常见场景，但本身执行效率是非常慢的。如果加解密和你的其他任务放到一起，是很容易导致Eventloop阻塞的

Serverless能够让依赖Node服务的前端极大减低成本，开发者只需关注业务逻辑，无需关心运维，扩容，Web框架

**本地开发一个函数，然后通过CLI发布到Serverless云上，必然是一个趋势**

:::tip 参考

* [Serverless 本质是什么](http://dockone.io/article/5999)
* [简书 · 云原生](https://www.jianshu.com/p/a37baa7c3eff)
* [知乎 · Serverless函数计算简介以及典型场景实践](https://zhuanlan.zhihu.com/p/109234861)
* [什么是 Serverless 架构](https://www.phodal.com/blog/Serverless-architecture-what-is-Serverless-architecture/)
* [掘金· 分享狼叔关于《大前端工程化的实践与思考》](https://juejin.im/post/6844903887091023885)
  :::
