Serverless 会是一场云计算的革命吗

微服务方兴未艾,Serverless 横空出世。

关于 Serverless,网上众说纷纭,本人也是前几个月刚刚了解到 Serverless,但第一次看到 Serverless 就感觉,这就是我想要的,这应该就是云计算的未来。

什么是 Serverless

Serverless 通常被翻译成无服务器架构,它是一种事件驱动的函数级计算服务,同时也是一种极致的微服务设计,弹性伸缩能力无与伦比。

Serverless 平台是一种高度抽象的代码运行环境,它能直接冷启动一段逻辑代码,既简单易用又无比强大,用户无需管理服务器,仅仅写出业务逻辑代码就能即刻运行。

目前 Serverless 的主要形态是 FaaS(Function as a Service),国外有 AWS Lambda、Azure Functions、Google Cloud Functions 等,国内阿里云、腾讯云等都提供了 FaaS 函数计算服务。

由于还处于很早期的阶段,毫无疑问,Serverless 还有很多缺点,比如实时性不足、运行时长限制等,但相信随着技术的进步,这些问题都会逐步解决,本文只谈谈 Serverless 相对传统基础设施的优势,以及为什么 Serverless 很可能是云计算的未来趋势。

一切皆因成本

大学时无意中在图书馆看到一本书《问道云计算》,书中一个观点令人印象深刻,作者认为云计算就像是国家电网,通用的计算服务将会成为像电力这样的社会基础设施。

现在用电很方便,牵根电线安个电表就行了,你不开电器电表就不会转,每月电表转多少度国家电网收你多少钱,这些都太平常不过了,然而这要放到云计算,简直不可思议。

试想如果你家的电表换成以时间计费,你愿意么?也就是给你牵根电线,然后不管你用没用、用多少,每时每刻都要给你计费,而且始终按最高 “功率” 计费,你可能会惊呼:这 TM 就是赤裸裸的抢劫啊!

然而现在的云计算公司就是这么干的,你按 CPU 核数、内存、带宽买云服务,不管你用没用、用多少,每时每刻都要给你计费,而且电力功率还有限制(按你购买的 CPU 核数、带宽等),超出功率就给你断闸限电……

但这也并不代表云计算公司多么暴利,因为它们提供的基本都是虚拟机或容器实例,但这些实例的弹性伸缩能力太差,大部分时间都在空转浪费,偶尔高峰期又力不从心,虽然它们也不想这样,但这种浪费终究还是用户买单。

为此 AWS 很早就提供了 EC2 竞价实例试图提高实例的利用率,现在很多云计算公司都推出了按秒计费的云服务器,但这依然还是延续着那种粗暴的按时间计费的方式,不过是营销的套路而已,用户的使用成本依旧高昂。

在所有的经济活动中,成本一定是首要考虑的因素之一,Serverless 对传统云服务的颠覆就在于它极大的成本优势,它能精确地按计算量来计费,就像电表按用电量计费,与时间无关一样,避免了虚拟机、容器大量的计算资源闲置浪费,对普通用户来说,成本上可以秒杀虚拟机和容器,能够大幅降低云计算服务的价格。

IT 的基础设施

要成为基础设施,首先是要让人放心,但目前云计算依然是一件让人操心的事情,开发部署应用时你需要考虑可扩展性、高可用性,每个服务一般都要部署多个实例,还要做服务注册发现、负载均衡、容错断路等,容器还要用 Kubernetes 管理集群……

但对开发人员而言,他们只想专注于业务逻辑,并不想为服务器管理和运维有关的基础设施问题操心。

Serverless 几乎把这些 IT 的基础设施问题一次性解决了,Serverless 天然具备高可用、完全的弹性伸缩等特点。

国外的工程师给 Serverless 打出的一句口号就是:

“ Focus on your application, not your infrastructure ”

云计算的门槛

现在的云服务就像是早期的发电站一样,提供的是不同电压不同功率的电力,你得自己买变压器、自己去捣腾电压频率然后才能用,Serverless 则是直接让国家电网给你 220V 50Hz 的电力,你直接插上插头就能用了。

Serverless 就像插座一样即插即用,极大地降低了云计算的接入使用门槛,通过 FaaS 加 API 网关基本上可以重构大部分的企业级应用。

Serverless 对传统的软件架构是颠覆性的,未来在 Serverless 平台上创建高可用、高可扩展性的微服务将是异常简单的事情,只写点业务代码就行了,你根本不用去考虑架构、扩展、并发之类的问题,因为云计算公司会用它们最优的架构和扩展来构筑 Serverless 的底层基础设施,使其上的应用天然具备分布式系统和微服务架构的所有优势。

虽然未来云计算公司可能仍然使用 Kubernetes 等容器技术构建 Serverless 底层基础,但云计算用户可能不会再接触虚拟机和容器了,直接面向 Serverless 开发就行了,普通人也完全没必要花大价钱买云主机或容器服务,既麻烦又浪费。

熵的转移

从单机到分布式集群,从虚拟机到容器,从单体应用到微服务架构,无论 IT 系统如何演变,系统的复杂性都不会降低,而且还会呈指数级增加,这就像物理世界的熵增加原理一样,系统只会演变得越来越复杂和难以管理。

实际中应用开发越来越简单是因为我们不断把复杂性从上层转移到下层,最终通过自动化程序把复杂性从人转移给了机器,让机器承担底层越来越复杂的重担,通过这样的复杂性转移就能不断降低 IT 系统的成本。

Serverless 对传统的 IT 系统架构是颠覆性的,它更彻底地把复杂性转移给了基础设施,把 IT 系统的熵不断转移给机器,剩下的只是业务的复杂性。

重新定义云应用

传统的应用都是常驻内存型,每个应用启动时都需要开辟自己的进程并常驻在 CPU、内存中,这种应用不仅长时间占用硬件资源,而且启动速度很慢,例如在容器环境中,使用 Java 开发的微服务启动速度明显偏慢,而运行在 Serverless 平台上的短时间、快速启动的函数单元则具有明显优势。

Serverless 一个了不起的地方就是它的应用不是常驻内存的,只有你去唤醒它,触发它的事件时才会占用计算资源,其他时间都是退出硬件静静地躺在硬盘上的文件而已。

很多人以为提供虚拟机、容器服务就是云计算了,以为虚拟机容器就能把计算资源抽象出来了,那其实和以前的服务器租赁没啥区别,正如《问道云计算》书中所说,它们并没有构建出通用的计算资源池,真正的云计算应该像 Serverless 这样,对硬件基础设施进一步抽象,构建出通用的计算资源池。从这个角度来看,Serverless 在重新定义云计算的形态。

除了云基础设施,Serverless 同时也在重新定义云应用,传统的软件形态可能必须重构,运行在 Serverless 平台上的无状态函数式应用可能才是云应用的应有形态。

展望 Serverless 未来

现在云计算产业正如火如荼地发展,未来 Serverless 很可能是决定公有云竞争格局的关键因素,得 Serverless 者得天下。

未来的 Serverless 平台上,通过函数式应用调起硬件资源,不管底层是 CPU、GPU、FPGA 还是 ASIC,都可以通过 FaaS 提供计算服务;上层都是统一的函数式应用,不管你是普通的 Web 服务、大数据处理还是神经网络训练,都可以通过 FaaS 获取计算服务。

当然目前来看,Serverless 还远未成熟,但从未来来看,Serverless 必将是云计算的一道曙光,甚至是云计算的一场革命。