目录
一、云原生与 Serverless 的崛起
在当今数字化时代,云计算技术的迅猛发展深刻改变了软件开发和部署的格局。云原生(Cloud Native)和 Serverless 作为云计算领域的两大重要概念,正引领着行业的变革。
云原生的概念最早可追溯到 2013 年,由 Pivotal 公司的 Matt Stine 首次提出。随着时间的推移,其定义不断演进,涵盖了 DevOps、持续交付、微服务和容器等多个关键要素 。云原生应用采用开源堆栈(如 K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps 支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。它的出现,是为了应对传统 IT 架构在资源利用率、系统耦合度、基础设施复杂性以及开发运维割裂等方面的挑战。通过云原生架构,企业能够更高效地利用云计算资源,实现应用的快速迭代和部署,提升业务的敏捷性和竞争力。
Serverless,即无服务器计算,虽然名字中带有 “无服务器”,但并非真的不需要服务器,而是让开发者无需关心服务器的管理和运维,将这些工作全部交给云服务提供商 。其核心目的是在云计算的基础上,进一步简化开发运维过程,开发者只需编写代码并上传,云平台就会自动准备好相应的计算资源,完成运算并输出结果。Serverless 的发展轨迹可以追溯到 2012 年,这个单词首次出现,而真正被大家熟知是在 2014 年 AWS 推出 Lambda 的时候。此后,各大云厂商纷纷跟进,推出自己的 Serverless 产品,如今 Serverless 已成为云计算领域的重要发展方向。
在云原生和 Serverless 的发展浪潮中,Knative 应运而生,成为了连接两者的关键桥梁,发挥着举足轻重的作用。
二、认识 Knative
Knative,读音为 kay - nay - tiv,是一个基于 Kubernetes 的开源平台 ,旨在构建、部署和管理现代 Serverless 工作负载。它由谷歌发起,并得到了包括 Pivotal、IBM、Red Hat 等多家公司的支持,目标是制定云原生、跨平台的 Serverless 编排标准,让开发者能更专注于业务逻辑的实现,而无需过多关注底层基础设施的管理。
Knative 与 Kubernetes 有着紧密的联系。Kubernetes 作为容器编排领域的事实标准,提供了强大的容器管理、调度和资源分配能力 。Knative 则建立在 Kubernetes 生态的基础之上,以 Kubernetes 扩展的形式提供了一整套中间件。它整合了 Kubernetes 平台的最佳实践,将能力主要聚焦在容器的部署、路由和流量管理、按需自动化扩缩容、事件绑定服务等方面。可以说,Kubernetes 为 Knative 提供了坚实的底层基础,而 Knative 则在 Kubernetes 之上进一步抽象和简化了 Serverless 应用的开发和部署流程,两者相辅相成,共同推动了云原生应用的发展。
三、Knative 核心组件剖析
3.1 Serving 组件
Serving 组件是 Knative 中负责服务部署和管理的关键组件,在整个 Knative 架构中处于核心地位 。它的主要职责是将用户定义的 Serverless 服务部署到 Kubernetes 集群中,并对这些服务进行全方位的管理,涵盖了从服务的初始部署到运行时的各种操作。
在服务部署方面,Serving 组件极大地简化了传统的部署流程。开发者只需提供服务的相关定义,例如服务名称、对应的容器镜像、必要的环境变量以及网络配置等信息,Serving 组件就能依据这些定义,自动完成服务在 Kubernetes 集群中的部署工作 。这一过程涉及到多个底层操作,包括创建 Kubernetes 的 Pod、Deployment 等资源对象,但开发者无需深入了解这些复杂的细节,大大降低了部署的难度和工作量。
版本管理是 Serving 组件的另一大重要功能。当服务的代码或配置发生变更时,Serving 组件会自动创建一个新的版本,也就是 Revision。每个 Revision 都是服务在特定时间点的代码和配置的快照,是不可变的 。这一特性使得版本管理变得清晰有序,开发者可以方便地对不同版本的服务进行管理和维护。例如,在进行服务升级时,可以轻松地回滚到之前的稳定版本,确保服务的稳定性和可靠性。
自动扩缩容是 Serving 组件的一大亮点功能,也是 Serverless 架构的核心优势之一。Serving 组件能够实时监测服务的流量情况,根据流量的变化自动调整服务实例的数量 。当流量较低时,它可以将服务实例缩容到零,从而节省资源成本;而当流量突然增加时,又能迅速扩容,启动更多的服务实例来应对高并发请求,确保服务的性能和响应速度。这种基于流量的自动扩缩容机制,实现了资源的动态分配和高效利用,使得服务能够在不同的负载情况下都能保持良好的运行状态。
Serving 组件还提供了智能的服务路由功能,支持将流量路由到不同版本的服务 。这使得开发者在进行服务更新和迭代时,可以采用灰度发布等策略,先将一小部分流量路由到新版本的服务上,进行充分的测试和验证,待确认新版本稳定可靠后,再逐步将更多的流量切换到新版本,实现平滑的版本过渡,降低服务更新带来的风险。
3.2 Eventing 组件
Eventing 组件是 Knative 实现事件驱动架构的核心组件,在构建松耦合、高扩展性的应用系统中发挥着关键作用 。其主要功能是构建事件驱动架构,实现应用之间的消息传递和事件驱动交互。
在现代的分布式系统中,事件驱动架构越来越受到青睐。它将系统中的各个组件之间的通信方式从传统的请求 - 响应模型转变为基于事件的异步通信模型 。在这种架构下,当特定的事件发生时,产生事件的组件(即事件源)会将事件发布到一个中心的消息管道或总线中,而其他对