在进一步理解 Dapr,我们先来大概看一下它的 code base,梳理一下它的代码地图,从而对它的结构有个 high-level 的理解。

目录结构

Dapr 的代码包含了几个主要的顶层目录:

  1. cmd: 包含了几个主要的可执行程序。
  2. dapr: 包含了 dapr 使用到的 protobuf 的定义。这些 protobuf 主要是用于 RPC 使用的数据结构定义。
  3. pkg: 包含了 dapr 的核心代码。

cmd - 可执行程序

Dapr 包含了若干个可执行程序,它们的代码在 cmd 这个路径下。其中最重要的就是下面 daprd。它就是 dapr 提供的运行时环境,也就是实际的 sidecar。

除此之外,还有以下几个不是特别核心的:

  1. placement:用于在“放置” actor,比如在适合的 pod 上运行 actor。
  2. injectoroperator:这是 dapr 在 K8s 环境中部署是使用的。
  3. sentry:TLS 的 CA。dapr 的 sidecar 之间的 TLS 通讯会使用到它。

daprd v.s. dapr

在看 dapr 文档的时候,相信大家也都使用了 dapr 这个命令行工具。要注意它和 daprd 是有区别的,并且它的代码在单独的 repo 中。
daprd 是实际的运行时环境。而 dapr 类似一个 devops 工具。在我们执行 dapr run ... 的时候,它会同时执行 daprd 和我们指定的应用程序。

pkg - 核心代码

这个目录包含了 dapr 的核心代码。其中 runtime 是核心中的核心。其他目录则包含了 dapr 的各个组件的代码。

总结

Dapr 的代码结构还是比较清晰的。之后我会从 runtime 开始,研究一下 dapr 大概的实现原理。