本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
KCL 的单表格式
从 KCL 3.5 开始,您可以使用单表格式将所有 DynamoDB 元数据合并到一个租用表中。默认情况下,KCL 3.x 为每个应用程序创建三个 DynamoDB 表:租用表、工作器指标表和协调器状态表。单表格式将这三个表缩减为一个,这有助于您避免 DynamoDB 账户级别的表限制。
单表格式的工作原理
KCL 采用单表格式,将工作人员指标和协调器状态条目与租约条目一起存储在租用表中。每个项目都包含一个entityType用于区分不同记录类型的属性。
工作人员指标和协调器状态项使用与租用表相同的主键结构,但包含不同的entityType值。此属性允许 KCL 在表格扫描期间识别每个项目的用途。
KCL 的每个组件都会根据该entityType属性筛选出其业务逻辑所需的条目。例如,租赁分配管理器 (LAM) 筛选租赁和员工指标条目以执行租赁分配。
配置单表格式
如何启用单表格式取决于您当前的 KCL 版本:
-
如果您使用的是 KCL 2.x:按照更新的迁移指南升级到 KCL 3.5。默认情况下,从 2.x 到 3.5 的新迁移使用单表格式。
-
如果您使用的是 KCL 3.0—3.4:必须执行两阶段部署才能迁移到单表格式。请参阅以下配置和迁移步骤。
对于现有的 KCL 3.x 客户,请在中设置migrateAllEntitiesToLeaseTable配置选项。CoordinatorConfig此选项控制 KCL 是否将所有元数据实体类型存储在租赁表中。
| 值 | 默认 | 效果 |
|---|---|---|
false |
是 |
KCL 使用单独的表来显示工作人员指标和协调器状态。应用程序代码支持单表格式,但不激活它。 |
true |
否 |
KCL 开始将工作人员指标和协调器状态数据写入租用表。在 |
从 KCL 3.x 迁移到单表格式需要两个阶段的部署:
-
第 1 阶段:部署更新后的 KCL 3.5 代码,将其
migrateAllEntitiesToLeaseTable设置为false(默认)。这将安装支持单表格式但不会激活迁移的新代码。 -
第 2 阶段:在所有工作人员运行新代码并完成访问后
DEPLOYED,并且您已确认没有回归问题,请在migrateAllEntitiesToLeaseTableset 为 to 的情况下再次部署true以开始迁移。TableMigrationStatus
移民州
TableMigrationStateMachine管理从多表格式到单表格式的过渡。KCL 在协调器状态表中调用的单独协调器状态条目TableMigration3.5中跟踪当前迁移状态。有关状态、过渡和描述的完整列表,请参阅 KCL 单表迁移状态
| 州 | 说明 | 过渡条件 |
|---|---|---|
INIT |
初始状态。所有工作人员都在工作人员指标统计数据中发出最低支持代码。工作人员继续将工作人员指标发送到传统表中,并从旧表和租赁表中读取工作人员指标和协调器状态。从功能上讲,INIT 和 DEPLOYED 之间没有区别。 |
所有工作人员都会在烘焙时间内稳定地发出最低支持代码。该应用程序已准备好进入第 2 阶段部署。 |
DEPLOYED |
所有工作人员均已使用新代码部署(第 1 阶段已完成)。该应用程序支持单一表格格式,但尚未将其激活。 |
第 2 阶段部署从 |
PENDING |
所有工作人员都在运行新代码。KCL 将数据从工作人员指标和协调器状态表迁移到租用表中。 |
迁移完成后,将过去 24 小时的默认烘焙时间。 |
COMPLETE |
迁移已完成。KCL 将租用表专门用于所有读取和写入。不再使用旧的工作人员指标和协调器状态表。 |
终端状态。不会发生进一步的过渡。 |
有关每种状态、过渡条件和完整状态机行为的详细信息,请参见 KCL 单表迁移状态机
注意
在 “待处理” 和 “完成” 状态之间的默认烘焙时间为 24 小时,但您最多可以将其配置为一周。在此期间,KCL 使用租用表进行所有读取和写入,但不删除旧表。确认迁移成功后,必须手动删除旧的工作器指标和协调器状态表。KCL 不会自动删除这些表。
迁移指标
使用 KCL,您可以使用 CloudWatch 指标监控单表迁移的进度和运行状况。使用这些指标来确认工作人员是否采用了新代码,并在迁移过程中跟踪迁移情况。您还可以在迁移期间检测 DynamoDB 读取、写入或删除错误。下表按发出指标的 KCL 操作(指标维度)以及每个指标的发布时间对指标进行分组。
无论迁移是否在进行中,当选的领导工作人员都会持续发布以下指标:
操作 |
指标 |
单位 |
说明 |
|---|---|---|---|
|
|
无 |
当前 DynamoDB 迁移状态的序数: |
|
|
无 |
车队中所有拥有租赁的工人的最低支持代码。 |
只有在迁移进行时,当选的领导工作人员才会发布以下指标:
操作 |
指标 |
单位 |
说明 |
|---|---|---|---|
|
|
计数 |
支持使用单个 DynamoDB 表进行操作但尚未迁移到使用单一表的工作人员数量。 |
|
|
计数 |
已迁移到写入单个表的工作人员人数。在表迁移完成之前,这些工作人员可能仍会从多个表中读取。 |
|
|
计数 |
在 3.5 之前的版本上无法支持对单个 DynamoDB 表进行操作的工作器数量。 |
|
|
计数 |
|
|
|
计数 |
|
|
|
计数 |
|
|
|
计数 |
|
|
|
毫秒 |
异步移动操作的持续时间。 |
|
|
计数 |
成功移动的批次数。 |
迁移进行时,所有工作人员都会发出以下指标:
操作 |
指标 |
单位 |
说明 |
|---|---|---|---|
|
|
计数 |
|
|
|
毫秒 |
状态机运行的持续时间。 |
|
|
计数 |
|
|
|
毫秒 |
初始化操作的持续时间。 |
使用这些指标来决定何时推进迁移。当StatusOrdinal始终如一2(已部署)时0,所有工作人员都支持单表格式,您可以进入表迁移部署的第 2 阶段。PrePhase1WorkerStatusOrdinal到达4(完成)后,您可以安全地删除旧表。
回滚注意事项
回滚支持取决于当前:TableMigrationStatus
-
在第 1 阶段(
TableMigrationStatus已设置DEPLOYED或尚未设置):您可以安全地回滚到以前的版本。新代码在向后兼容模式下运行,没有向租赁表中的非租赁条目写入任何数据。 -
在第 2 阶段(
TableMigrationStatusDEPLOYED是PENDING)期间:您可以回滚到第 1 阶段。工作人员恢复使用旧表(多表格式)来衡量工作人员指标和协调器状态。迁移已撤消。 -
完成状态后:不支持回滚。KCL 仅使用所有实体的租赁表。即使代码回滚到第 1 阶段,工作人员仍会继续使用所有实体的租赁表,配置将被忽略。
警告
迁移达到 COMPLETE 状态后,应用程序只能在单表模式下运行。migrateAllEntitiesToLeaseTable配置被忽略,KCL 不会恢复为使用单独的表。确保移至 COMPLETE 之前的烘焙时间足够了,因为在此之后,即使是代码回滚也不会切换回多个表。
最佳实践
采用单一表格格式时,请遵循以下最佳实践:
-
在第 1 阶段部署后,验证协调器状态条目是否
TableMigration3.5达到DEPLOYED状态。在进入第 2 阶段之前,请确保没有回归。 -
监视处于
TableMigration3.5协调器状态条目,跟踪已部署、待处理和完成状态的进度。TableMigrationStatus状态作为单独的条目存储在协调器状态表中(不在租用表中),直到迁移完成。 -
确保移至 COMPLETE 之前的烘焙时间足够了,因为在此之后,即使是代码回滚也不会切换回多个表。该应用程序仅在单表模式下运行。
-
迁移完成后,手动删除旧的工作器指标和协调器状态表。KCL 不会自动删除这些表,它只会停止使用它们。
-
如果您已配置
CoordinatorConfig.coordinatorStateTableConfig或LeaseManagementConfig.workerUtilizationAwareAssignmentConfig.workerMetricsTableConfig,则可以在迁移完成后删除这些配置。这些配置在 KCL 3.5 及更高版本中已弃用。