Serverless 初探

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 接收到触发器的事件后,才会启动并运行函数。整个函数的运行过程可以分为四个阶段。

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

当函数第一次执行时,会经过完整的四个步骤,前三个过程统称为“冷启动”,最后一步称为 “热启动”。
编写简单的 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 应用编写完成了。

稀土掘金
我还没有学会写个人说明!
上一篇

新年成功拿下第一个java后端开发岗offer,分享经历希望对大家有帮助,接好运!

下一篇

为遏止加密货币矿工抢游戏显卡,英伟达推出挖矿专用处理器

你也可能喜欢

评论已经被关闭。

插入图片