什么是 Serverless
认识 Serverless
Serverless 是一种云原生开发模型,可使开发人员专注构建和运行应用,而无需管理服务器。 Serverless 将服务器从应用开发中抽离了出来。云提供商负责置备、维护和扩展服务器基础架构等例行工作。开发人员可以简单地将代码打包到容器中进行部署。
Serverless 的实现
Serverless 只是一种理念,而 BasS(后端即服务) or FaaS(功能即服务) 则是基于这一理念的具体实现。 BaaS 有些类似 SaaS 的概念,只不过是更小粒度的应用。 可以理解为 BaaS 就是云服务提供商提供一些后端通用能力(比如数据库、鉴权认证、消息推送),使用者以 API 形式接入,BaaS 做的比较有名的是 Google Firebase。 与 BaaS 不同,FaaS 可让开发人员拥有更大的掌控权力,在 FaaS 模式下,编程人员编写几乎所有的业务代码,然后将代码交由云服务提供商运行。
Serverless 的特点
1.较低的尝试成本
Serverless 都是计费服务,没有流量不计费,对于一个 Web 服务,初期的尝试成本很低。
2.云服务提供商提供强大运维能力
比如自动扩缩容、灾备、负载均衡等等。
3.事件驱动
函数本质上实现的是一种 IPO(Input-Process-Output)模型,它是短暂的,是即用即走的。这点是函数区别于单体应用和微服务的另一个特征。不管是单体应用,还是微服务,都是系统中的常驻进程,即便你不使用,它依旧会一直运行。而对于函数来说,没有请求就不需要消耗任何资源,只有在收到请求时才会调动资源进行响应,完成之后就会立刻释放资源,这在节省资源方面无疑是巨大的优点。
4.无状态
事件驱动提到了它只有在收到请求时才会工作起来,工作完成之后就立刻被释放。也就是各种运行时的内存缓存都是没有太大效益的,不仅如此,同一个请求方式,第二次访问服务时很有可能被调度到其他新的机器上,所以本地缓存方式依旧是失效的,函数只能使用外存(比如Redis,数据库)进行缓存,而操作外存都需要通过网络,性能跟内存、本地硬盘相比差了一到两个数量级。
Serverless 的优点
降低运维成本:
- 快速构建应用并部署。
- 自动扩缩容。
- 负载均衡。
- API 网关。
Serverless 的缺点
最大的问题是无法自定义,个人和团队对项目无法做到百分之百的掌控。
- 我们的 Serverless 服务会被供应商绑定,比如我们使用 Lean Cloud 的数据存储服务,如果想要迁移到 Google Firebase 上去,二者的数据和编程模型可能完全不同,这其中的成本有可能是非常巨大的。
- 因为服务端被托管给了供应商,你无法自己去根据自己的需求对服务端进行优化,人家给什么就用什么。
总结
传统的 Web 开发,我们除了要编写代码外,还需要负责软件的部署、日志、监控、网关、负载均衡等工作。 现在有了 Serverless,对于一部分不太懂后端基础建设的 Web 开发者来说是一件好事,可以专注写业务,后端基建的活交给云服务商去干(虽然学习 Serverless 需要一点学习成本)。 此外,按量计费的方式意味着初期的试错成本很低,我认为这也是一个重要的优势。