Serverless 一点思考

115 阅读4分钟

serverless 这个概念目前没多少人喊,算是退潮期。作为一直找小成本落地通用 serverless 服务方案的人,想出来唠几句。

谁最拥护serverless?

云厂商,尤其是那些头部的云厂商。他们十分拥护 serverless!至于为什么拥护,可以基于下面三个点进行思考:
1:百分80%的收入来自20%的头部客户。
2:小公司的寿命90%不会超过2年,很多App在开发成功的第二个月就死掉了。
3:serverless研发很烧钱。

按第一点说,既然头部客户那么值钱,大厂应该怎么留住他们呢,除了更好的服务和采购人的回扣以外,就是独占游戏!说错了,是独占服务。 serverless 能让客户不再考虑服务器资源(分发),只考虑应用(内容)本身,而云厂商在本职考虑服务器(游戏机售卖+游戏机系统)的基础上,只需要再抽象一层服务API(商店),就可以让满足所有客户(游戏开发商)的需求。等客户的应用成长起来,用的人特别多的时候,用户想要迁移,需要改动大量代码,甚至是重写,成本巨高(排他协议)。

依照第二点讲,小公司所能带来的资源开销其实有限,那么设定价格的时候,就可以提供免费额度,毕竟大公司都是来自于小公司,而且根据摩尔定律、马太效应,今年小亏,明年就是赚钱。

依照第三点讲,就是卷死友商,卷死小云厂商!围一道深深的护城河,至于后面,嗯,没看我现在的价格是浮动/打折的嘛。

现有serverless方案怎么样?

如果只考虑开源方案的话,不怎么样!目前主流的 有 openfass、krustlet、 knative、 fission。

krustlet 目标是提供运行 wasm 的 kubectl,尽可能的复用现有 k8s 的东西。包袱是需要把 wasm 变成 image,并不轻量。尚未 production stable,算是 kubectl 的补充。

openfaas 比较早,提供一整套的 faas runtime 及相关工具。有些重,和现有 k8s 的功能有些重复。

knative 最核心的两个组件 serving + eventing,其他的可以是现有的 k8s 组件。 serving 可提供 cronjob + http 之类的简单服务。路由网络、event 持久化 需要第三方 support。 对 tls 安全相关的会有强支持,估计后面是方便做多租户。路由网络可以不使用 istio,而是 Gloo。 mink 是 knative 的最小发行版。

fission 比 knative 更多一步,增加了 enviroment 概念,用来跳过 image, 能更轻量的执行脚本,并提供管理脚本的工具。istio 可选。

还有一些其他的重量级serverless ,Flink 推出了 Stateful Function,但目前看来对标的应该是 akka cluster。

总的看来,knative 更像是加了 发布订阅+ 路由自动化+负载自动化 的高级版 helm+operator,但没有脚本执行runtime+管理,如果有人搞了这个就可以完全不用考虑 fission。

另外,看 fission,方向是更纯粹的 serverless。定位和 knative 不一样,直接集成 cicd + runtime 配置,研发只需要在他的sdk下写脚本就好了。剩下打包之类的它来搞定。

serverless的未来发展

我更关注另一个东西的发展:JIT=>AOT,以降低吞吐为代价,走向低资源开销和快速启动。Oracle 推出了 GraalVM,有着下一个JVM平台的趋势;NodeJS有webAssembly, 很多nodeJS生态里的工具都在用Rust+WebAssembly重写。

一旦所有程序都AOT后,k8s 再补上 special runtime + small task manager的能力,不就是 serverless ?

serverless的必要性

对小公司来讲,上个k8s已经够够的。对于大公司来讲,其业务足够沉淀,代码不变性增强,而这时的 serverless费用会高于k8s方案,所以也没啥价值。serverless 更像是专门做低代码平台的基础设施,用来提供了完善可预期的费用结算体系。

对serverless的期望

我其实更期待另一种 serverless,就是在开源闭源的基础上,再抽一层,每个组件可用开源方案或云厂商的自有方案进行替代,这样对客户来讲就有了足够的灵活度,不过预估没人愿做,毕竟只是脏活。