从Google Trends的Serverless关键字的趋势可以看到,对于Serverless的搜素一直居高不下,并且在未来的一段时间内也会保持相当的热度。从2015年开始,以AWS为代表的国外云计算大厂也在不断的布局Serverless相关的产品,AWS Lambda、Aliyun FAAS,数据库领域的Aurora Serverless、RedShift Serverless、Azure SQL Database等。 学术界对Serverless的研究热度也不亚于工业界对商业化方案的追求,文末列出了一些相关文章作为参考。对于云计算往Serverless演进的趋势,学术界也经历过一些质疑,2018年“Serverless Computing: One Step Forward, Two Steps Back”[3] 文章曾经对Serverless的发展给现在IT基础设施带来的冲击表示过担忧,但2019年同一拨人在这个方向上又表现出了支持和乐观的态度。从Serverless领域被引用次数较多的论文上看到,主流科研机构对Serverless的趋势和方向研究上趋于一致,研究重点也慢慢从“why”转变为“how”[6]。
何为Serverless?为什么Severless是个趋势?“Cloud Programming Simplified: A Berkeley View on Serverless Computing”[5] 这篇文章为代表做了一个比较全面的分析和预测。同样是Berkeley在2009年发表的另一篇文章“Above the Clouds: A Berkeley View of Cloud Computing”[7] 预测了云计算作为IAAS基础设施的观点。该篇文章延续了之前的风格,分析了现状和难点,预测了云计算2.0的形态Serverless作为下一代基础设施,也定义了Serverless的主要三个特征:
自动弹性伸缩:代码的执行不再需要手动分配资源。不需要为服务的运行指定需要的资源(比如使用几台机器、多大的带宽、多大的磁盘等),只需要提供一份代码,剩下的交由 Serverless 平台去处理就行了。当前阶段的实现平台分配资源时还需要用户方提供一些策略,例如单个实例的规格和最大并发数,单实例的最大 CPU 使用率。理想的情况是通过某些机器学习算法来进行完全自动的自适应分配。
数据库品类繁多,关系型数据库自1979年E. F. Codd对于关系模型的描述[7]开始,后来者大多只是模仿,而尚未在用户接受度和规模上有超越。 数据库不仅仅是一个“stateful”的应用,而且是一个“state-heavy”的应用。数据库是Serverless最不友好的应用之一,包括云原生基础设施kubernates对于stateful应用的支持,也是等到StatefulSet和operator之后才有一个比较好的解决方案。而在这之前数据库都是作为Serverless对状态做解耦和状态下沉的工具,也是全栈Serverless解决方案中最难攻坚的最后一个堡垒。
对于Serverless的定义,文章给出来一个公式:Serverless = FAAS+ BAAS。将FAAS(Functions as a Service)定义为事件、API、消息驱动的计算层;将BAAS(Backends as a Service )定义为类似数据库、消息队列等后端服务。
“State-heavy applications will remain as BaaS”是目前对于数据库的一个基本认知,但这与数据库本身是否具备一定程度的Serveless能力其实是两回事。前者强调的是在应用向Serverless做架构转型的过程当中,数据库的大量状态存储做不到FAAS这样即开即用的能力,只能作为“+”来对接Serverless生态;后者说的是在某种程度上也能够满足“资源解耦”、“自动弹性”、“按使用量付费”的特点,某种程度上也可以认为是Serverless。