命名空间 Actor
了解命名空间 Actor
Dapr 中的命名空间提供隔离能力,从而实现多租户。通过 Actor 命名空间,相同的 Actor 类型可以部署到不同的命名空间中。你可以调用同一命名空间中的这些 Actor 实例。
注意
每个命名空间 Actor 部署必须使用各自独立的状态存储,尤其是当相同的 Actor 类型跨命名空间使用时。换言之,命名空间信息不会作为 Actor 记录的一部分写入,因此每个命名空间都需要独立的状态存储。有关示例,请参见为命名空间配置 Actor 状态存储章节。创建和配置命名空间
你可以在自托管模式或 Kubernetes 上使用命名空间。
在自托管模式下,你可以通过设置 NAMESPACE 环境变量来指定 Dapr 实例的命名空间。
在 Kubernetes 上,你可以在部署 Actor 应用程序时创建和配置命名空间。例如,从以下 kubectl 命令开始:
kubectl create namespace namespace-actorA
kubectl config set-context --current --namespace=namespace-actorA
然后,将你的 Actor 应用程序部署到此命名空间中(本例中为 namespace-actorA)。
为命名空间配置 Actor 状态存储
每个命名空间 Actor 部署必须使用各自独立的状态存储。虽然你可以为每个 Actor 命名空间使用不同的物理数据库,但某些状态存储组件提供了通过表、前缀、集合等方式进行逻辑隔离的方法。这允许你使用相同的物理数据库来支持多个命名空间,只要你在 Dapr 组件定义中提供逻辑隔离即可。
以下是一些示例。
示例 1:通过 etcd 中的前缀
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.etcd
version: v2
metadata:
- name: endpoints
value: localhost:2379
- name: keyPrefixPath
value: namespace-actorA
- name: actorStateStore
value: "true"
示例 2:通过 SQLite 中的表名
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.sqlite
version: v1
metadata:
- name: connectionString
value: "data.db"
- name: tableName
value: "namespace-actorA"
- name: actorStateStore
value: "true"
示例 3:通过 Redis 中的逻辑数据库编号
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
- name: redisDB
value: "1"
- name: redisPassword
secretKeyRef:
name: redis-secret
key: redis-password
- name: actorStateStore
value: "true"
- name: redisDB
value: "1"
auth:
secretStore: <SECRET_STORE_NAME>
请查看你的状态存储组件规范以了解其提供的功能。