Как я могу измерить задержку распространения потоков DynamoDB?
Я использую DynamoDB Streams + Kinesis Client Library (KCL). Как я могу измерить задержку между тем, когда событие было создано в потоке и когда оно было обработано на стороне KCL?
Как я знаю, KCL's MillisBehindLatest
метрика специфична для потоков Kinesis(не для потоков DynamoDB). approximateCreationDateTime
Атрибут record имеет приближение на уровне минут, что неприемлемо для мониторинга в системах с задержкой менее секунды.
Не могли бы вы помочь с некоторыми полезными показателями для мониторинга задержки DynamoDB Streams?
1 ответ
Вы можете изменить способ записи в приложении, чтобы приложение могло отслеживать задержку распространения мутаций в потоке таблицы. Например, вы всегда можете обновить атрибут timestamp 'last_updated=' при создании и обновлении элементов. Таким образом, когда ваши творения и обновления появляются в потоке, вы можете оценить задержку распространения, вычитая текущее время из last_updated в NEW_IMAGE записи потока.
Поскольку удаления не содержат NEW_IMAGE в записях потока, удаление должно быть выполнено в два этапа:
- логическое удаление, где вы записываете метку времени 'logically_deleted=' и
- физическое удаление, когда вы фактически вызываете DeleteItem сразу после 1.
Затем вы должны использовать ту же математику, что и для созданий и обновлений, только с той разницей, что вы будете использовать OLD_IMAGE при обработке удалений, и вам потребуется вычесть как минимум около 10 мс, чтобы учесть время, необходимое для выполнения логического удаления (шаг 1).