多区域高可用性

高可用性部署

在 us 多区域中使用智能体检索服务时,您将受益于更强大的服务可用性 SLA,即使在区域级服务中断的情况下也能持续正常运行。

us 多区域提供与 Agent Retrieval 的其余部分相同的 API,但有一些限制。us 多区域位置中的数据会复制到美国大陆各区域,并且 us 多区域中的所有活跃索引都会在每个区域中预配冗余服务器。在正常运行条件下,系统会从网络客户端延迟时间最短的区域传送查询。如果发生服务中断或服务容量不足,Google 的负载均衡器会将您的查询重定向到最近的可用区域。负载均衡和复制的设置和维护完全由 Agent Retrieval 管理。

注意:鉴于支持高可用性智能体检索所需的硬件和工程资源投入,客户项目可能需要经过专门审核并列入许可名单后,才能加入高可用性多区域。如需申请高可用性多区域的访问权限,请填写链接的申请表单。

初始配置

您必须申请加入许可名单,才能访问高可用性多区域。

收到确认您的项目已列入访问高可用性多区域的许可名单后,您可以在 us 多区域位置中创建新的集合、数据对象和索引。按照标准 Agent Retrieval API 文档中的说明操作,在通常指定单个区域(例如 us-central1 或 europe-central2)的位置替换为 us。

在 us 多区域中上传的所有数据和执行的所有操作都受益于增强的复制、冗余和更高的可用性。

结算

多区域位置的结算费率高于标准单区域,这反映了复制成本的增加和更高的运营优先级。

如需了解详情,请参阅价格。

限制

未实现存储优化。只有性能优化层级索引可以部署在多区域位置。

在多区域位置,对非标准化嵌入向量的索引进行 SearchDataObjects 调用可能会报告意外的距离指标。从这些索引中检索和排名数据点将是正确的(在近似最近邻索引的限制范围内)。我们建议您始终提供归一化嵌入向量,或依赖自动嵌入生成。

在多区域位置,仅支持 DOT_PRODUCT_DISTANCE。

多区域位置不支持稀疏嵌入。对于特定令牌必须存在于特定字段中的向量搜索请求,可以在请求的过滤表达式中使用 $search 运算符。

在多区域位置中,CreateIndex 和 UpdateIndex 请求中的 Index.dedicated_infrastructure.autoscaling_spec 字段不会被使用。

在多区域位置中,SearchDataObjectsRequests 中的 SearchHint.IndexHint.dense_scann_params 字段不会被使用。多区域 ANN 索引经过调整,可提供大约 95% 的召回率,但召回率可能会因数据的具体情况而异。

从区域部署迁移

如果您的数据位于区域级智能体检索集合中,则可以使用以下简要工作流将这些数据克隆到 us 位置:

  • 将集合数据导出到托管该集合的区域中的存储桶,并移除 etag;
  • 从存储桶导入到托管在 us 位置的集合中。

前期准备

请确保做好以下准备:

  • 源区域中的存储桶,用作导出暂存区域。
  • 已安装 gcloud CLI。
  • 对源集合的 IAM 读取权限、对目标集合的 IAM 写入权限,以及对存储桶的 IAM 读取和写入权限。
  • 已在 us 中创建的目标集合,其架构与来源相同。

PROJECT_ID:包含要迁移的集合的项目。以下命令假定来源项目和目标项目相同。

SOURCE_LOCATION:来源集合的位置,例如 us-central1。

SOURCE_COLLECTION:要迁移的集合的名称。

STAGING_BUCKET:存储桶中要将集合数据导出到的目录的路径,例如 gs://your-bucket-id。

步骤

每个代码段都可以复制粘贴。将每个代码块顶部的占位符替换为特定于您的项目、来源位置、集合和存储桶的值。

1. 从来源区域导出

cat > request.json <<EOF
{
  "gcsDestination": {
    "exportUri": "STAGING_BUCKET/export/",
    "format": "JSONL"
  },
  "field_filter": {
    "excluded_fields": {
      "fields": ["etag"]
    }
  }
}
EOF

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d @request.json \
  "https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_LOCATION/collections/SOURCE_COLLECTION:exportDataObjects"

响应包含操作名称,例如 projects/.../locations/us-central1/operations/operation-...。轮询该操作,直到 "done": true。

EXPORT_OPERATION_NAME

gcloud vector-search operations describe "EXPORT_OPERATION_NAME" \
  --location="SOURCE_LOCATION"

2. 导入到美国

DEST_COLLECTION:迁移后的集合名称(可以与原始名称相同)。

gcloud vector-search collections import-data-objects "DEST_COLLECTION" \
  --location="us" \
  --project="PROJECT_ID" \
  --gcs-import-contents-uri="STAGING_BUCKET/export/" \
  --gcs-import-error-uri="STAGING_BUCKET/import-errors/" \
  --gcs-import-output-uri="STAGING_BUCKET/import-output/" \
  --async

以与导出相同的方式轮询返回的操作:

IMPORT_OPERATION_NAME

gcloud vector-search operations describe "IMPORT_OPERATION_NAME" \
  --location="us"

3. 验证导入

  • 检查 gs://your-bucket-uscentral1/import-errors/ 中是否有任何被拒绝的记录。
  • 比较来源和目标之间的记录数。
  • 对两者运行一些已知查询并比较结果。