微服务架构下Knative与Dapr的比较


DaprKnative项目都有助于在 Kubernetes 上创建和运行云原生应用程序,但在重要方面有所不同。

注意两者侧重点有不同:

  • Knative 使用无服务器容器(从 0 扩展至 0)扩展 Kubernetes,并帮助您以声明方式连接应用程序。
  • Dapr 帮助开发人员快速实现可靠的互联分布式应用程序。 

Knative 源自谷歌,而 Dapr 源自微软。如今,这两个项目都在 CNCF 孵化。这两个项目都有不断增长的社区,并且都属于前 20 个活跃 CNCF 项目之列(Dapr #10 和 Knative #17)

关注的领域不同:

  • Knative 通过处理运行网络(同步/异步)、自动缩放(从零到零)和应用程序修订跟踪,使用无服务器容器扩展 Kubernetes。
  • Dapr帮助开发人员快速创建可靠的互联分布式应用程序。它不管理应用程序的生命周期,而是在应用程序旁边运行。

目标用户

  • Ops 可以使用 Knative 服务来自动扩展和发布应用程序(通过流量分割)。开发人员可以使用 Knative 事件和函数来构建、部署应用程序以及连接外部系统和事件驱动的容器。 
  • Dapr 是主要为开发人员设计的工具包。开发人员使用 API 和 SDK 与 Dapr 交互并减轻责任,例如:发布/订阅、状态访问、有状态服务调用、弹性等。架构师和运营团队分别具有设计时间和运行时优势

支持的平台

  • Knative 仅运行在 Kubernetes 和网络层(例如 Kourier、Istio、Contour)之上。
  • Dapr 可以在 Kubernetes 上运行,也可以在本地和边缘设备(例如国际空间站)上运行。

对于本地开发,Knative 需要 Kubernetes,而 Dapr 也可以在 Docker 上运行,或者仅作为单个二进制文件运行。

部署模式
这两个项目都有operator、helm chats,和 CLI,可帮助在 Kubernetes 上安装和操作控制平面。

  • 在数据平面方面,Dapr 是一个被注入到应用程序 pod 中的侧卡。应用程序通过定义明确的 API 与 Dapr 交互...
  • Knative通过创建部署、pod、配置映射和网络配置,决定应用程序如何在Kubernetes上定义和运行。它为每个 pod 注入一个透明的侧卡,以测量网络活动。它还有一个激活器,可在从零开始扩展时阻止请求。

开发者经验

  • Knative 使用 Kubernetes CRD 来定义由容器、配置、修订版组成的应用程序(称为 Knative Service)。它还提供 CRD,可以定义事件 (CloudEvents) 在这些服务之间如何流动、订阅代理。以及以功能为中心的 CLI。
  • Dapr 提供用于服务调用、Pub/Sub、状态、工作流、绑定、配置、秘密、分布式锁的 HTTP 和 gRPC API,称为构建块。开发人员使用 HTTP/gRPC 客户端或 8 种以上语言的 SDK 与上述 API 进行交互。

运维经验

  • Knative 服务帮助运维人员发布、自动扩展、配置服务。Knative 事件与抽象代理。 
  • Dapr 帮助运营人员监控、保护和提高服务弹性以及云基础设施抽象。

主要功能

  • Knative 缩放至 0 自动缩放 流量分割 应用程序定义 Pub/sub 连接器 功能 CLI
  • Dapr Pub/sub 服务与服务之间的交互,具有弹性、键/值访问、Actors、连接器、安全性(mTLS、Auth)、配置/秘密、工作流、分布式锁 API。

特征重叠
主要重叠是围绕发布/订阅功能。这两个项目都通过抽象代理并使用 CloudEvents 格式来提供应用程序之间的异步交互。

这两个项目都有连接器并能够向代理订阅应用程序。 

  • Knative 通过 CRD 和 HTTP 定义这些。 
  • Dapr 支持 HTTP/gRPC,使用 CRD 和代码。

甜蜜点

  • Knative:自动缩放容器(从零到零)。
  • Dapr:事件驱动和有状态的服务交互。

即将推出的热门功能: 

  • Knative:函数开发。 
  • Dapr:基于工作流程的编排。