SaaS 的困境与 API 经济
SaaS 已经成为 deliver software 越来越重要的一种方法。但是中心化运营的 SaaS 产品怎么才能满足“千人千面”的定制化需求呢?这个问题在中美两国都有,但是中国的问题更严重一些。
SaaS 公司普遍面临着一个问题,就是如果为用户定制化过多,SaaS 慢慢就不是一个产品公司了,而变成一个咨询公司。当然这个问题并不是今天才有的。这个问题的解决方法其实也很简单,就是 API,所以就有 API economy (API 经济)的说法。
Postman 这家印度公司最近融了2.5亿美金,估值已经是56亿美金。可能很多程序员会觉得惊讶,因为 Postman 这个事其实并不复杂,就是为 SaaS 提供 API 测试和 API 管理的平台。这件事说起来技术含量并不大,但是 Postman 产品做得比较好,而且入行的时间比较早,所以取得了成功。这就是 API 经济,就是帮 SaaS 管理 API 这件事情,其实是有很大需求的,而且今天有人做出了 Postman 这样五十几亿美金的公司。
但是对于用户和开发者来说,其实都是对 API 有 mixed feeling 的,因为每个 SaaS 的 API 都不一样,管理起来也比较复杂。有没有更好的方法呢?我们来看另外一家公司叫做 Zapier。
Zapier 这家公司总共才融了不到200万美金,但是今天它的估值也是50亿美元,每年的收入11.4亿美元。Zapier 就是做 API 自动化的,或者用今天比较流行的话来讲就叫无代码平台。就是开发者不需要直接去管理API,也不需要直接为 API 应用专门起服务器。具体来说,如果 SaaS 的用户要开发 SaaS 的应用程序,不需要起服务器,就也不需要去管理运维,而是直接用 Zapier 来管理 API。在 Zapier 建立一个 Zap,然后在那个 Zap 里面点击授权登录 SaaS,就可以把 API 的功能给串起来,或者把 API 的功能给自动化。Zapier 让比较初级的开发者或者甚至没有代码能力的商务人员能够对 SaaS 进行定制化。
解决 SaaS 定制化的问题中,API 是给程序员用的,低代码的解决方案是给商务人员用的,总的来说这两个生意都能做得挺大的,这两家公司都在50亿美金的规模了。 API 是什么
那么下面具体来讲 API 到底是什么?SaaS 的 API 为什么会这么有用,为什么会有这种低代码解决方案出现?
API 的作用就是典型的网络隔离代码的作用。SaaS 是一个中心化运营的软件环境,所以说不能千人千面的为每一个客户进行定制,不能为每个客户改代码,那怎么办呢?可以让用户自己改代码,把代码放在自己的服务器上,然后跟 SaaS 之间有某种交流的机制,这就叫 API。
用户写了什么代码,要对 SaaS 进行什么样的定制,作为 SaaS 提供商来说是不知道的,只有用户自己知道。所以用户写了之后放在自己的服务器上,不会放在 SaaS 的服务器上,然后跟 SaaS 的交互就是通过API、通过网络来进行交互,用网络把代码隔离开,这个是在云计算早期一个大家都用的方法。
这个缺点是什么呢?缺点就在于用户自己要管理 服务器,这是一个开发也慢、deploy 也慢,安全性低,可靠性低,而且是一个非常昂贵的工作。
上图下面的这三张表就是飞书的应用上架流程,我下面会讲到它其实是一个正面例子,不过为了要讲痛点,所以我们现在把他当做负面例子来讲。
飞书有一个核心功能,就是用户可以在飞书平台上定制自己的机器人,让机器人来处理一些事务。要搭建一个聊天机器人,标准的做法就是用飞书的 API。这个 API 的设置是用户去起一个服务器,用这个服务器监听飞书的 API 来的 event 的。如果有人在飞书里面和机器人对话了,就会产生一个事件,然后飞书通过 API 发回开发者的服务器上来,然后开发者的服务器就会按照写好的逻辑把回答通过 API 发回到飞书去,这个机器人对用户回答了一句话,整个过程就完成了。
为了要干这件事情,需要开发者自己起个服务器。要求很多,服务器需要在大陆,需要在工信部备过案,需要有 https,需要有 SSL certificate,飞书同时需要应用开发者能够管理自己的内容,不能有黄色内容和反动内容,需要 99.9% 以上的时间是可用的,当飞书用户与机器人对话的时候,机器人能立马要回应。如果把这些东西全部加起来,其实是运营的工作很多,其实开发的工作不多。
下面这几个图讲的就是我们当时就为了在飞书里面加一个春节的时候发贺卡的机器人,这需要经过的 check list 是好几十项,要好几个人干好几天才能完成。所以 API 这东西听起来是很有用的,也很有价值,可是其实用起来还是挺困难的,这就是为什么会有无代码这样的平台出现。 有没有一种更好地使用 API 的方式?
怎么解决 API 今天的问题呢?其实在 SaaS 跟 PaaS 之间的这条线其实一直都是模糊的,SaaS 是 software as a service,PaaS是 platform as a service。从 Salesforce 开始,SaaS 公司其实一直想做 PaaS 的,就是说把 API 做成一个开发者的平台。但我们来看看真正的 PaaS 平台,比如说腾讯云、Heroku、字节的轻服务,其实都是以 API 与托管代码的形式共存的。我要做一个平台,让大家能够在我的平台上进行扩展,能够加自己的业务逻辑,需要的不仅是 API,需要的还是在平台上要能够直接运行客户自己的代码。
SaaS 为什么要用 API 来隔离网络,因为他不想让用户把自己的代码放到中心化运营的 SaaS 上面去。但是在 PaaS 平台里面,这种做法经常是反过来的,就是让用户直接把代码上传到平台上来,然后在平台上运行用户的代码。举刚刚那个聊天机器人的例子,那就变成了开发者不需要自己起个 API server 去监听从飞书来的 events 和信息,只需要给飞书上传一个函数,这个函数的输入就是用户对机器人说的话,这是个字符串。函数的输出就是机器人要回答的话,也是一个字符串。我把这个函数上传上去之后,不用购买任何服务器,就能够运行起来。而且,因为是在 SaaS 这个环境里面运行的,这样域名就不需要认证、99.9% 的可用性,这些都是有保证的。显然这是一个更简单的做法,就是在平台上直接运行用户的代码来实现定制化。
在 PaaS 平台里这样的传统做法是什么?就是用 Docker。在平台里面用户上传了一段代码、上传了一个函数,这个函数在平台上是不能被信任的,平台不能直接去运行这个函数,所以它就起一个 Docker instance,然后在 Docker 里面去运行用户的代码。这个就是所谓 Serverless 的概念,这是目前 PaaS 平台里面常用的一种方法。
现在在云计算这个行业里面, serverless 是一个非常大的趋势。
再借用我上面举的那个例子,用一个函数来做飞书机器人的,我就只管业务逻辑了,就不用再管 infrastructure 逻辑了,只是把函数上传上来就可以了。从容器到函数这一步是我们现在正在走的这一步。当然在这一步里面,今天大部分人实际上就是所谓的 Function as a service,就是函数即服务,这种函数的方法还是用容器,但是我们下面会讲到还有其他更好的方法。 总结一下观点,今天的 SaaS 虽然是用 API 来做的,是用 API 来实现扩展的,但是如果说我们需要更轻更快更安全,跨平台的扩展方法,我们其实是可以用嵌入式的函数,我们就让用户上传一段函数给一个平台,然后让这个函数去定制 SaaS 的行为和 SaaS 里面的业务逻辑。 SaaS 里的嵌入式函数用 Docker 合适吗?
下面就要问个问题,Docker 真的合适吗?做嵌入式的函数、做 Function as a service,今天主流的做法是用 Docker 来做。用户把函数代码上传上来了,然后放在 Docker 里面运行,然后通过这个函数运行的结果来定制这个 PaaS 平台或者 SaaS 平台的行为。但是 Docker 干这件事情真的合适吗?
Solomon Hykes 是 Docker 的 CTO 和 Co-founder。他说 If WASM+WASI existed in 2008, we wouldn’t have needed to created Docker. That’s how important it is. Webassembly on the server is the future of computing. 这是他在2019年说的话。如果说 Webassembly 这种容器在2008年就存在的话,我们就不需要 Docker 了。作为 Docker 的发明人说这样的话,自然在社区里面引起了很大的反响。
在云原生的行业里,我们在用 Docker 做嵌入式函数的隔离,但是 Docker 真的合适吗?像 Webassembly 这样的新标准会不会是一个更好的选择呢?
我们来看看 Shopify 的故事。Shopify 是电商行业最大的 SaaS 之一了,Shopify 用 SaaS 的方法在北美市场上挑战电商巨头AWS。Shopify 今天的流量比亚马逊要大了,已经是北美第一的电商了。这是 Shopify 的 CTO 说的话,Shopify is an API first company。