什么是 Serverless?
Serverless(无服务器架构)是指服务端逻辑由开发者实现,运行在无状态的计算容器中,由事件触发,完全被第三方管理,其业务层面的状态则存储在数据库或其他介质中。
Serverless 是云原生技术发展的高级阶段,可以使开发者更聚焦在业务逻辑,而减少对基础设施的关注。
Serverless 的定义
下面将分别从简洁版和进阶版向您展示什么是 Serverless。
简单定义
就像无线互联网实际有的地方也需要用到有线连接一样,无服务器架构仍然在某处有服务器。开发者无需关注服务器,只需关注代码即可。
Serverless(无服务器架构)指的是服务端逻辑由开发者实现,运行在无状态的计算容器中,由事件触发,完全被第三方管理,而业务层面的状态则记录在数据库或存储资源中。
进阶定义
Serverless是由事件(event)驱动(例如 HTTP、pub/sub)的全托管计算服务。用户无需管理服务器等基础设施,只需编写代码和选择触发器(trigger),比如 RPC 请求、定时器等并上传,其余的工作(如实例选择、扩缩容、部署、容灾、监控、日志、安全补丁等)全部由 serverless 系统托管。用户只需要为代码实际运行消耗的资源付费——代码未运行则不产生费用。
Serverless 相对于 serverful,对业务用户强调 noserver(serverless 并不是说没有服务器,只是业务人员无需关注服务器了,代码仍然是运行在真实存在的服务器上)的运维理念,业务人员只需要聚焦业务逻辑代码。
Serverless 相比 serverful,有以下 3 个改变(来自 Berkeley 的总结):
- 弱化了存储和计算之间的联系。服务的储存和计算被分开部署和收费,存储不再是服务本身的一部分,而是演变成了独立的云服务,这使得计算变得无状态化,更容易调度和扩缩容,同时也降低了数据丢失的风险。
- 代码的执行不再需要手动分配资源。不需要为服务的运行指定需要的资源(比如使用几台机器、多大的带宽、多大的磁盘等),只需要提供一份代码,剩下的交由 serverless 平台去处理就行了。当前阶段的实现平台分配资源时还需要用户方提供一些策略,例如单个实例的规格和最大并发数,单实例的最大 CPU 使用率。理想的情况是通过某些学习算法来进行完全自动的自适应分配。
- 按使用量计费。Serverless按照服务的使用量(调用次数、时长等)计费,而不是像传统的 serverful 服务那样,按照使用的资源(ECS 实例、VM 的规格等)计费。
总结
No silver bullet. - The Mythical Man-Month
许多年前,我们开发的软件还是 C/S(客户端/服务器)和MVC(模型-试图-控制器)的形式,再后来有了 SOA,最近几年又出现了微服务架构,更新一点的有 Cloud Native(云原生)应用,企业应用从单体架构,到服务化,再到更细粒度的微服务化,应用开发之初就是为了应对互联网的特有的高并发、不间断的特性,需要很高的性能和可扩展性,人们对软件开发的追求孜孜不倦,希望力求在软件开发的复杂度和效率之间达到一个平衡。但可惜的是,No silver bullet!几十年前(1975年)Fred Brooks 就在 The Mythical Man-Month 一书中就写到了这句话。那么 Serverlss 会是那颗银弹吗?
云改变了我们对操作系统的认知,原来一个系统的计算资源、存储和网络是可以分离配置的,而且还可以弹性扩展,但是长久以来,我们在开发应用时始终没有摆脱的服务器的束缚(或者说认知),应用必须运行在不论是实体还是虚拟的服务器上,必须经过部署、配置、初始化才可以运行,还需要对服务器和应用进行监控和管理,还需要保证数据的安全性,这些云能够帮我们简化吗?让我们只要关注自己代码的逻辑就好了,其它的东西让云帮我实现就好了。