Serverless简介
概念
Serverless的全称是Serverless computing无服务器运算,又被称为函数即服务(Function-as-a-Service,缩写为 FaaS),是云计算的一种模型。以平台即服务(PaaS)为基础,无服务器运算提供一个微型的架构,终端客户不需要部署、配置或管理服务器服务,代码运行所需要的服务器服务皆由云端平台来提供。 国内外比较出名的产品有Tencent Serverless、AWS Lambda、Microsoft Azure Functions 等。
Serverless称为微服务运算,但不代表它真的不需要服务,而是说开发者再也不用过多考虑服务器的问题,计算资源作为服务而不是服务器的概念出现。Serverless是一种构建和管理基于微服务架构的技术,允许开发者在服务部署级别而不是服务器部署级别来管理应用部署,你甚至可以管理某个具体功能或端口的部署,以便让开发者快速迭代,更快速地开发软件。
目前,Serverless 仍然处于探索和发展阶段,并且对于Serverless也没有一个权威的定义,不过我们仍然可以从以下几个方面来理解它: - Serverless代表的是一种服务理念或模式。这种服务理念希望用户无需关注除了业务逻辑本身之外的主机管理、服务运维、配置等事务,不需要关注运营维护问题。也即是说,只要有了Serverless,几乎可以不需要再考虑Devops工作流。 - Serverless是一种软件系统架构方法,并不代表某种技术。通常我们称Serverless 为一种架构而不是某种技术框架。 - Serverless是一种云服务产品形态。通常我们称Serverless为一种产品,比如各大厂商推出的各种 Serverless 服务或能力、封装的 API 网关等产品。
当前业界最常见的 Serverless 实现方案为 FaaS(函数即服务) + BaaS(后端即服务),我们经常听到的「云服务」就是基于 FaaS + BaaS 架构。
**
Serverless历史**
Serverless 架构是云的自然延伸,为了理解 Serverless,我们有必要回顾一下云计算的发展。
Serverless
历史上第一个 Serverless 平台可以追溯到 2006 年的 Zimki(该公司已倒闭),这个平台提供服务端 JavaScript 应用,虽然他们没有使用Serverless 这个名词,但是他们是第一个“按照实际调用付费”的平台。而真正第一个使用 Serverless 名词的是 iron.io。
不过,Serverless 真正流行起来还的是 2014 年亚马逊推出的 AWS Lambda,然后其他公司也陆续跟进,比较出名的有2016 年推出 Google Cloud 与 IBM 等厂商。而国内的要属阿里云和腾讯云起步最早,也最成功。
Serverless 是云原生发展的高级阶段
Serverless 跟云原生有什么关系呢?Serverless 的出现,就像人类的演进过程,代表着生产力的解放,极大提升了客户用云的效率。Serverless 在其之上封装了容器技术,是云原生的高级阶段。
Serverless 是对用户强调 No Server,本质并不是不需要服务器,而是将服务器全权托管给了云厂商,用户不用去关心,不用去管理,只用把业务部署到平台上来,只需聚焦业务逻辑代码,能够根据实际请求进行弹性伸缩,不用再去关心资源够不够。
Serverless的应用场景
虽然 Serverless 的应用很广泛,但是也有使用上的局限性,Serverless 比较适合的场景有以下一些: - 异步的并发,组件可独立部署和扩展 - 应对突发或服务使用量不可预测(主要是为了节约成本,因为 Serverless 应用在不运行时不收费) - 短暂、无状态的应用,对冷启动时间不敏感 - 需要快速开发迭代的业务基于此,我们发现,Serverless非常适合做实时文件处理、周期性的数据处理和移动及 Web 应用后端等。下面,我们通过一个游戏应用为例来说明什么是 Serverless 应用。
通常,一款移动端游戏至少包含如下几个特性: - 移动端友好的用户体验 - 用户管理和权限认证 - 关卡、升级等游戏逻辑,游戏排行,玩家的等级、任务等信息
本地测试
Serverless 应用的本地测试困难是一个很棘手的问题。虽然可以在测试环境下使用各种数据库和消息队列来模拟生产环境,但是对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试,并且 Serverless 应用本身也是分布式的,简单的将无数的 FaaS 和 BaaS 组件粘合起来也是有挑战性的。