仓库源文

.. Kenneth Lee 版权所有 2018-2020

:Authors: Kenneth Lee :Version: 1.0

Serverless是什么——谈如何捕获一个特性的架构本质


最近Serverless这个概念在热炒,所以前段时间我做了个调研,我这里来给一些关心这个 主题的读者总结一下到底什么是Serverless,同时,更重要的,我想就这个话题,谈谈架 构上我们是怎么理解一个特性的“本质”的。

Serverless表面的意思就是“没有Server”,但有Server是什么意思呢?比如你要做一个学 生登记,可能需要在某个云提供商那里租用一台服务器(或者虚拟机),里面运行一个 Linux,然后在里面部署一个LAMP系统,Web前端提供用户态接口,PHP实现商业逻辑,数据 库记录持久数据。这个特性就可以做起来了。

这就需要一台“Server”。

如果你的业务扩展,你就需要更多的Server,把这些业务分解开,按现在微服务的构架, 你的数据库是一个服务,前端是一个服务,中间的商务逻辑又是一个服务,之间可以通过 RESTful接口关联起来,互相通过http请求进行调用。

但服务(Service)是运行在服务器(Server)上的,你需要很多Server。

很多微服务,特别是没有状态的微服务,的Server可能是浪费的。你看,数据库那台 Server可能是必须的,因为你确实在租用设施存数据,Web前端一定程度上可能也是必须的 ,因为你还有静态页面要保存和维护呢,但PHP的逻辑的Server就不一定是必须的了。你有 一堆的脚本,这些脚本没有人调用的时候,你也得开着一个Service来运行它,这个 Service需要租用一台Server,这台Server可是要钱的,有用户用也要花钱,没有用户用也 要花钱,而且为了保证服务的体验,这台Server还必须有足够高的配置,他很贵。

那么,有没有办法可以仅仅花“调用这个服务”的钱呢?答案就是“Serverless”,或者有人 又叫FaaS。这两者的本质都是,Server是不需要的,你把代码给我(云提供商),我到时 总能找到一台Server给你搞定它,反正你的概念中是不需要有Server的概念的。

你登记学生的前端中调用一个RESTful API:

http://restful.student.edu/api/2.0/register_student?name=xxx,age=xxx...

可以修改为:

http://restful.cloud_provider.org/serverless/student_edu/api/2.0/register_student?name=xxx,age=xxx...

然后,你把你那段PHP也好,Python也好等代码交给云提供商,云提供商到时找个Docker也 好,LXC也好的空间,帮你执行一下,反正你也是没有状态的(状态在Memcached或者数据 库上呢),这个部分就没有Server租用成本了,你就很容易实现成本的控制了。

这很简单吧。

这个事情对运营商和用户都有利,用户可以少花钱,运营商可以聚合多个客户的需求通过 收敛比来降低Server的需求,都有动力。工程师嘛,有事干就有价值,自然的价值。

你看现在各家谈Serverless的,说得天花乱坠,这里又有什么特点,那里又有什么本质。 用AWS Lambda谈到算法的Lambda函数的,其实都是在玩“学”这个游戏,自己把自己玩瞎了 。这些东西,今天是这样,明天就是那样了。

架构看本质,其实我们看的是投资,就是钱和收益的流动是怎么控制投资的。你投资一个 技术,这个技术就要有人受益,受益的人肯埋单,这个循环就能建立起来,就会催生特性 的改变,特性的改变总是围着这个利益变的,根本不受特定个人的情怀的左右。所以你聚 焦在什么“不是啦,现在FaaS不支持PHP啦”,“Lambda不是用的Docker啦”,仿佛很牛,根本 就跟不住变化,这就叫看不到本质。

子言非不辩也,吾所欲者土地也,非斯言所谓也