较早的无服务器(Serverless)平台架构可以追溯到Ken Fromm发表的文章《Why The Future Of Software And Apps Is Serverless》。在这篇文章里,Ken Fromm描述了未来云计算基础设施,在成熟的条件下应用程序是不需要服务器端的。在无服务器场景下构建应用程序的时候,开发人员和运维人员无须担心服务器如何安装配置、如何设置网络和负载均衡,无须监控状态,甚至不再会出现服务器相关的工作内容。无服务器计算解放了开发人员的时间,帮助开发人员聚焦在业务逻辑开发上,同时也让开发人员只需关注代码的运行而不需要管理任何基础设施。
CNCF针对无服务器计算的定义为:无服务器计算是指一种构建和运行不需要服务器管理的应用程序的理念。它描述了一个更细粒度的部署模型,即将以一个或多个功能方式提供的应用程序上载到平台,然后执行、扩缩容及计费,以响应当前所需的确切要求。
一个理想的无服务器平台至少需要以下几个方面:
·构建和运行应用程序,需要一个用来构建和运行应用程序的平台。是的,Kubernetes就是当前最为合适的新应用程序服务器。
·没有服务器管理,不需要专用的应用程序服务器管理。在Kubernetes之上,所有应用程序都通过Kubernetes Deployment和Service进行容器化和部署。
·根据确切的需求执行、扩缩容及计费,根据业务的需求配置以及扩容缩容的比率,Kubernetes提供了自动扩容与缩容能力,并可以根据使用量计费。
无服务器技术栈参见图11-1。

图11-1 无服务器技术栈
毫无疑问,Kubernetes目前无法为无服务器平台提供所有的功能。在Kubernetes基础之上,无服务器技术栈需要以下原语能力的补充:
·Build:需要一种“源代码到容器”的机制,来简化部署。
·Routing:灵活简便的路由能力;支持各种灰度发布的能力。
·Event Building:可插拔的事件源接入能力。
·Auto Scaling:灵活的自动扩缩容能力,支持自动收缩,从0个到1个实例,从1个到N个实例,再回到0个实例。
·Observability:提供可观察性能力,具备完善的跟踪、监控和日志记录能力。
·Invocation:可插拔的调用器,让开发人员可以使用简单、符合已有语言习惯的交付代码逻辑。
再往上,就是无服务器不同产品的能力,它可以复用Kubernetes的基础能力和上述无服务器原语能力,而不需要去重复发明轮子,同时也保证了可移植性。