Dapr Placement 控制平面服务概述

Dapr Placement 服务概述

Dapr Placement服务用于计算和分发在自托管模式下或在Kubernetes上运行的Dapr Actor的位置的分布式哈希表。 这个哈希表将 actor ID 映射到 pod 或进程,这样 Dapr 应用程序就可以与 actor 进行通信。每当 Dapr 应用程序激活一个 Dapr actor 时,placement 服务就会用最新的 actor 位置更新哈希表。

自托管模式

Placement服务的Docker容器会作为dapr init的一部分自动启动。 如果你以 slim-init mode 模式运行,它也可以作为进程手动运行。

Kubernetes 模式

Placement 服务作为 dapr init -k 的一部分部署,或通过 Dapr Helm chart 部署。 有关在 Kubernetes 上运行 Dapr 的更多信息,请访问 Kubernetes 托管页面

Placement 表

有一个HTTP API /placement/state用于公布 Placement 表信息的 Placement 服务。 API 在与 healthz 相同的端口上通过 sidecar 暴露。 这是一个未经身份验证的端点,默认情况下被禁用。 您需要将 DAPR_PLACEMENT_METADATA_ENABLED 环境或 metadata-enabled 命令行参数设置为true以启用它。 如果您正在使用helm,则只需将 dapr_placement.metadataEnabled 设置为true。

使用案例:

可以使用放置表API来检索当前的 Placement 表,其中包含所有已注册的 Actors。 这对于调试非常有帮助,并且允许工具提取和展示有关演员的信息。

HTTP 请求

  1. GET http://localhost:<healthzPort>/placement/state

HTTP 响应码

响应码说明
200返回的 Placement 表信息
500无法返回 Placement 表信息

HTTP 响应正文

Placement 表 API 响应对象

名称类型说明
tableVersionintPlacement 表版本
hostListActor Host Info[]已注册 Actors 主机信息的 Json 数组。

Actor 主机信息

名称类型说明
namestring执行组件的 host:port 地址。
appIdstringapp id.
actorTypesjson字符串数组托管的 actor 类型列表。
updatedAttimestampActor 注册/更新的时间戳。

示例

  1. curl localhost:8080/placement/state
  1. {
  2. "hostList": [{
  3. "name": "198.18.0.1:49347",
  4. "appId": "actor1",
  5. "actorTypes": ["testActorType1", "testActorType3"],
  6. "updatedAt": 1690274322325260000
  7. },
  8. {
  9. "name": "198.18.0.2:49347",
  10. "appId": "actor2",
  11. "actorTypes": ["testActorType2"],
  12. "updatedAt": 1690274322325260000
  13. },
  14. {
  15. "name": "198.18.0.3:49347",
  16. "appId": "actor2",
  17. "actorTypes": ["testActorType2"],
  18. "updatedAt": 1690274322325260000
  19. }
  20. ],
  21. "tableVersion": 1
  22. }

相关链接

了解有关 Placement API 的更多信息。