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 请求
GET http://localhost:<healthzPort>/placement/state
HTTP 响应码
响应码 | 说明 |
---|---|
200 | 返回的 Placement 表信息 |
500 | 无法返回 Placement 表信息 |
HTTP 响应正文
Placement 表 API 响应对象
名称 | 类型 | 说明 |
---|---|---|
tableVersion | int | Placement 表版本 |
hostList | Actor Host Info[] | 已注册 Actors 主机信息的 Json 数组。 |
Actor 主机信息
名称 | 类型 | 说明 |
---|---|---|
name | string | 执行组件的 host:port 地址。 |
appId | string | app id. |
actorTypes | json字符串数组 | 托管的 actor 类型列表。 |
updatedAt | timestamp | Actor 注册/更新的时间戳。 |
示例
curl localhost:8080/placement/state
{
"hostList": [{
"name": "198.18.0.1:49347",
"appId": "actor1",
"actorTypes": ["testActorType1", "testActorType3"],
"updatedAt": 1690274322325260000
},
{
"name": "198.18.0.2:49347",
"appId": "actor2",
"actorTypes": ["testActorType2"],
"updatedAt": 1690274322325260000
},
{
"name": "198.18.0.3:49347",
"appId": "actor2",
"actorTypes": ["testActorType2"],
"updatedAt": 1690274322325260000
}
],
"tableVersion": 1
}