Serverless,即无服务架构。是指由第三方云计算供应商以服务的方式为开发者提供所需功能,例如数据库、消息,以及身份验证等。它的核心思想是让开发者专注构建和运行应用,而无需管理服务器。
Serverless 技术的应用一般有两种:Faas(Function as a Service) 函数即服务和 Baas(Backend as a Service) 后端即服务。
Serverless 最大的优点就是自动扩展伸缩、无需自己管理。
在以往部署一个应用时,需要经历购买服务器、安装操作系统、购买域名等等一系列步骤,应用才能真正的上线。后来有了云服务器,我们就省去了购买服务器、安装操作系统这些操作步骤。只需要在云服务器上搭建环境、安装数据库就可以部署应用了。
但是这仍然有个问题,当网站访问量过大时,你需要增加服务器;访问量过小时,需要减少服务器。如果使用 Serverless,你就不需要考虑这些,云服务商会帮你管理这一切。云服务商会根据你的访问量自动调整所需的资源。
当应用部署在云上,并且使用云存储或云数据库,那可能会让我们的应用访问速度变得比较慢。因为网络的访问速度比内存和硬盘差了一到两个数量级。
什么是函数即服务?
一个函数通常用于处理某种业务逻辑,例如一个 abs()
函数,它将返回所传参数的绝对值。我们可以把这个函数托管到 Faas 平台,由平台提供容器并运行这个函数。当执行函数时,只需要提供函数所需的参数,就可以在不部署应用的情况下得到函数的执行结果。
Faas 运行函数的容器是无状态的,上一次的运行效果和下一次的运行效果是无关的。如果需要存储状态,则需要使用云储存或者云数据库。
Faas 函数如果长时间未使用,容器就会对其进行回收。所以函数在首次调用或长时间未使用时,容器就需要重新创建该函数的实例,这个过程称为冷启动,一般耗时为数百毫秒。
既然有冷启动,就有热启动。例如容器刚刚调用完函数,过一会又有新的事件触发。这时由于函数仍未被回收,所以可以直接复用原有的函数实例,这被称为热启动。
Faas 函数需要通过触发事件来运行。我们可以指定不同的触发器:
其中 HTTP 触发器是最常见的,即通过 HTTP 请求触发。
像以往我们购买的云服务器一般是采取包月、包年的计费方式,即使你买了不用也要收取费用。Faas 采取的是按需付费的方式,云服务商会根据你的实际使用量来收取费用,不使用不收费(一般来说,Baas 可按需付费,也可包年包月)。
Faas 如果单独使用的话,那它只适合部署一些工具类函数。因为它是无状态的,每次运行都可能是在不同的容器上,它不知道上一个函数的运行结果。所以如果要使用 Serverless 来部署整个应用,还得额外购买 OSS 云存储或者云数据库来提供数据存储服务(也就是需要配合 Baas 来使用)。
什么是后端即服务?
假设你是一个前端,现在要开发一个网站。前端部分你可以自己完成,但后端部分怎么办呢?这个时候就可以使用 Baas 了。也就是说,你只需编写和维护前端页面。其他的一切,例如数据库、身份验证、对象存储等等都由云服务商提供。你只需要在前端通过 API 调用它们就可以使用所需的服务。
Faas 其实是一个云计算平台,用户可以将自己写的函数托管到平台上运行。而 Baas 则是提供一系列的服务给用户运用,用户通过 API 调用。
其他不同点:
可以说 Faas 和 Baas 是两个不同的东西,但它们有一个共同点,就是无需自己管理服务器和资源的分配、整理,所以都属于 Serverless。
现在的阿里云、腾讯云都可以免费体验 Faas,下面以阿里云为例,演示一下如何使用 Faas。
打开阿里云 serverless,点击立即开通:
开通后(阿里云每个月提供一定额度的免费流量,可以利用这一点来学习如何使用 Serverless)如果没打开函数计算页面,请点击控制台搜索函数计算:
然后会提示是否授权,授权成功后,就可以查看刚才创建的函数。
箭头所指处是一个 API 地址,调用它可以触发你设置的函数。
从刚才的示例可以发现,要想编写 Faas 函数只能在线编写,或者提前写好复制到阿里云。为了改善这种情况,现在有很多 Serverless 框架,可以让你在本地进行开发,开发完后再部署到阿里云或其他云上。
在这里推荐一下 midway 框架,主要是国人开发,具有非常详细的中文文档。根据文档的快速指引,就可以成功将函数部署到阿里云或其他云上。
Serverless 最大的优点就是弹性扩容和无需亲自管理服务器。即使它也有不少缺点,但相对于优点来说,是可以忽略的,近几年来 Serverless 技术的火热程度也证实了这一点。目前 Serverless 技术仍有很大的发展空间值得我们去探索,毕竟还是一门“出生”不久的新技术。