云开发 从 Serverless 到商业
当前业界 Serverless 是一个热词,各种高大上概念的包装,好似空中楼阁。但是绝大数的开发只能是隔岸观花、望梅止渴。讲清楚趋势很重要,让人落地也很重要。下面从商业侧技术侧的角度,以云开发为例,剖析技术的发展。
降本提效
首先,我们要清楚技术的发展趋势。首先我们看商业的发展,商业的发展一般围绕下面4个要素展开。
- 助力盈利
- 降低成本
- 提高效率
- 体验增强
商业的发展一定是依赖上下游的,那么在角色的定位中,最重要的是,你能给客户带来什么业务价值,能否帮助他盈利。如果这个问题能够回答的很清楚,公司活下来是大概率事件。也就是能够帮助客户的实现业务价值。这个要求很高,也很难,尤其是技术的商业化。
云计算行业更多的是跟后面三者相关。技术很难直观地帮客户产生商业价值,这个非常难衡量。自我论证是一个非常难的过程,你很难说用了 C 家的云就带来了多少用户的增长,也很难说不用你这个云就会损失多少收入。往往技术的商业化第一步是“降低成本”。
降低成本这个看似简单,其实非常难,需要做很深的技术创新。如果你发现了一个极大降低成本的方法,那么这个行业将发生巨大的改变,包括上下游关系都会被重新定义。现在云服务的竞争是火热的????,每个云厂商都在绞尽脑汁的做技术创新,期望通过技术创新降低成本。整个行业,有多家云厂商是幸福的,珍惜这个还没有完全分出胜负的年代;假如只剩寡头,消费者没有议价权的。所以在 IaaS(基础设施即服务) 上,唯一的出路只有一个:创新。剖开来说就是:降本和稳定。
提高效率很直白,就是如何让客户的业务发展的更快,如何让人的效率可以提高。如下图所示,目前绝大多数的云厂商都是做着二道贩子的生意,只是这个二道贩子对技术的要求比其他行业要高很多。没有云计算的年代,就是基础资源,各家自我加工。有了云计算,粗加工的工作云厂商都做了,在 IaaS 层都是标品,但是这里的成本和收益是透明的。多少利润空间,早就成为了行业共同的认知。所以云厂商的想获得高额回报的出路是将资源可以做到“精细服务”,提供可以靠近业务的价值。这个过程很难,所以PaaS(平台即服务) 和 SaaS(软件即服务)是必由之路,它们可以模糊掉一些价值评估,尤其是靠近业务的 SaaS 可以带来溢价。
云计算基本围绕“降本提效”展开。目前来看并不是一门可以 “快速” 挣大钱的生意,更多的是提升了行业的生产力。但是我们不能否认的是,未来自来水公司、燃气公司也是可以挣钱的。
另外一个就是“体验增强”。用户是发展的,对美和体验是有追求的。2000年的互联网产品体验估计现在没有人可以瞧的上一眼。那么围绕“体验增强”的服务,就是每一步都需要的,也是贴近客户和用户的。比如视频云服务,比如直播云服务,CDN 服务,都是体验增强的一个表现。
云计算从粗加工到精细加工,再到增值服务,其趋势就是“整合云服务,套餐出售”,说得更直白些就是“能不能拎包入住”,开发者不要知道细节,开发者也不想触碰细节。是不是可以从“云服务”到“应用云”,或者说“云应用”。
封装复杂,暴露简单
很显然,Serverless 概念的提出,就是希望“封装复杂,暴露简单”。
互联网从初始到高速发展,应用和业务模型越来越复杂,对技术团队的挑战越来越大,所以岗位职能出现了精细分工。但是技术的发展总是会螺旋式上升,慢慢的运维开始自我革命。那能不能运维自动化,能不能 devops?再往后,研发自我革命,能不能进一步提高效率?是否可以 devopsless , 是否只需要应用开发工程师....
所以“封装复杂,暴露简单”一定是技术的趋势,也是商业化的趋势。
FaaS
Serverless 从技术层面看,是“封装复杂,暴露简单”;从商业角度看,则是带动资源多次加工,精细化深加工,能不能带动 PaaS 层服务的整合和融合。
Serverless 是一种理念,目前没有一种标准的产品,有的是 FaaS (函数即服务)来作为产品承载,有的是 FaaS + BaaS (后端即服务)来作为产品承载。serverless.com 是不是标准,需要值得思考。是不是理念的实践和商业的落地,也需要思考。????
如下图,是一个简易的 FaaS 模型。
我们希望也是要求:
- 一个函数就是一个服务,可以独立部署、调试、监控;当然可以配合 API 网管使用;
- 函数之间可以调用,可以抽象一些中间件的服务,以函数形态存在;
- 每个函数,有流量时,可以快速冷启动,响应要快;同时可以根据流量进行伸缩,没有流量可以维持冷冻状态,不需要保持资源的消耗。
因此 FaaS 带来的好处是:
- 高可扩展,伸缩自动: 有洪峰就快速扩展,无需关心峰值压力;
- 成本降低:资源不需要预采购,理想状态就是有流量就消耗,没有流量就降至 0;
- 解构架构:将服务拆分,架构扁平;
结论:FaaS 整合了 IaaS 层的云服务器和网络,重组了计算单元。
BaaS
函数只是运行逻辑的地方,光有函数是不行的。云数据库可不可以提供?云存储可不可以提供?监控要不要提供?日志服务要不要提供?这时候,就会发现 FaaS 只是一个计算容器,或者说“计算单元”。我们开发一个业务,不能只做运算,不做数据存储,不做文件存储。
因此 BaaS(后端即服务) 服务商解决的问题就是将 PaaS(平台即服务) 产品做整合,所有都在云上,不需要本地搭建和部署。性能和稳定性、安全性由云厂商提供服务支持。
BaaS 将服务进行组装,尝试封装复杂。
云开发:尝试垂直整合,做到拎包入住
有了 FaaS 和 BaaS,Serverless 的理念就不再是空中楼阁了。服务的计算容器有了,或者说计算单元更加合理了,基础的 IaaS 和 PaaS 层是不是也可以做融合?
以前需要关心的:
- API 网关,流量如何控制
- 数据库如何部署,数据库如何优化,分布式怎么做
- Web 容器
- 代码如何构建
- 系统安全
- 日志与监控服务
- 如何计算服务用量,服务器如何扩展
- ......
目前腾讯推出了云开发(https://cloudbase.net/),是 Serverless 的一种产品实现。这些在云开发中都不需要关心。
整合了这么多,我觉得完成了拎包入住的第一步,就是“云”侧 OK 了。
如上图方式1,一般情况,使用云函数构建 Serverless 服务,云函数起到逻辑和胶水的作用。目前市面上大多数 Serverless 方案都走到了这一步。那么“端”侧要不要改进?比如我在安全的客户端环境中,上传一张图片,要不要先写一个云函数,然后云函数再去调用数据库服务?获取一个列表数据,是不是也得先写个云函数,然后请求函数拿到数据?
端侧如何进一步提升效率,进一步整合掉。腾讯云云开发因此提供了端侧 SDK,例如提供 JS-SDK , 可以直接操作云数据库,云存储;这样有些能力,不再需要编写云函数,可以直接在客户端用 SDK 提供的 API 进行操作,如下图方式2所示。那就是需要“云 + 端一体化”,也是云开发诞生的初衷,让开发者只用关心应用开发的最后一公里。
const tcb = require('tcb-js-sdk');
const app = tcb.init({
env: "环境ID, 环境是一个集合,包含数据库、存储、云函数的资源"
});
// 1. 获取数据库引用
var db = app.database();
//2.获取数据库集合
//3.条件查询
db.collection("users")
.where({
name: 'vczero'
})
.get()
.then(res => {
console.log(res.data);
});
这样一个客户端工程师,就可以承担起所有的“应用开发”的任务,协同的工种就只有自己。真正做到,SDK 在手,应用说有就有。目前云开发提供了不只有 JS-SDK,还有 Flutter SDK、.NET SDK、Node.js SDK。
后话
通过 Serverless 和云开发核心理念的分析,我们可以清楚的看到技术发展的大趋势,是不可逆的:
- 成本依赖创新,会进一步的压缩;无论是机器的成本,还是人的成本;
- 云计算服务会进一步降低使用门槛,封装复杂;
- 从人肉运维到 devops, 再到 devopsless 和 serverless,趋势不可抗争,先“做没”自己,再给自己创造新机会;能够贴近业务,帮助业务成功的云服务一定是好服务。