Как мы прослеживаем наш выход, используя Event-Tracing

Трассировка событий — это одна из тех тем, эффективность которых мы осознаем, но всегда уделяем ей низкий приоритет. Добавление трассировки к вашим потокам и архитектуре (в основном эффективно в экосистеме микросервисов) чрезвычайно важно, чтобы найти свои руки и ноги, когда нужно отлаживать или управлять кризисными происшествиями.

Сценарий: у нас есть несколько потоков в нашей системе микросервисов. Каждый поток имеет начальную и несколько конечных точек в зависимости от потока.

К сожалению, одна из наших служб вышла из строя, и поток не завершился, как ожидалось -> Boom -> Оповещения поднимаются, во всех журналах выполняются исключения, с чего нам начать? Что вызвало проблемы или какой запрос вызвал эту проблему? Итак, что мы делаем в первую очередь?

Вероятно, вы используете фреймворк агрегатора логов (стек ELK и т.д.). Мы сортируем логи по сервисам и времени и теперь начинаем выяснять, что произошло. На данный момент мы все еще изо всех сил пытаемся увидеть какую-либо ясность. Когда у вас есть несколько сложных потоков и путей, мы не можем точно сказать, какая цепочка событий привела к этой проблеме. Да, мы можем начать использовать временные метки и да, мы можем начать рисовать сценарии архитектуры (я помню те обсуждения: «Эй, вы помните, что у нас был поток A, который запускался, когда поток B заканчивался, но в качестве альтернативы он мог запускать поток C, если эти условия выполнялись??») выяснить, чтобы найти наш путь. Не обращая внимания, вы начинаете вести себя как «Гензель и Гретель», пытаясь найти свои хлебные крошки в лесу.

Отслеживание может облегчить вашу жизнь. Особенно в кризисные времена, когда моменты находятся под давлением. Итак.. «Сохраняйте спокойствие и смотрите на свой след»

Если бы вы могли нарисовать свой маршрут движения (как это делает GPS в самолете), вы могли бы легко отслеживать и решать проблемы.

Добавить систему трассировки к вашим компонентам несложно, но она должна быть последовательной и методологической. Чем раньше вы примените его стандарт, тем легче будет его внедрить.

Трассировка становится все более и более популярной по мере того, как сложные системы обнаруживают свою эффективность. Сегодняшняя проблема заключается в том, что у нас разные поставщики фреймворков трассировки, и у нас нет настоящего стандарта. Однако в настоящее время у W3C есть постоянный кандидат на стандарты трассировки:

Я буду держать это простым для вас.

Трассировка объединяет 3 основных ключевых значения:

Идентификатор корреляции:
параметр, указывающий полный поток трассировки (будет передаваться от одного сервиса к другому) — создается после запуска потока
Родительский идентификатор:
параметр, указывающий, откуда пришел запрос (кто мне звонил?) — передан предыдущим процессом
Идентификатор события:
параметр, который используется внутри области службы/процесса — создается как подзапрос
Эти параметры должны использоваться и/или создаваться для каждой вашей «точки входа» в рамках вашего сервиса/процесса.

Преимущество отката:

Трассировка позволяет вашей архитектуре откатить кросс-сервисную операцию.

Я упомянул параметр Correlation-Id. Поскольку идентификатор корреляции передается между одним процессом другому, вы можете использовать его как уникальный идентификатор агрегатора для «транзакции». Если вам нужно откатить состояние/транзакцию во всех ваших службах, просто укажите корреляцию, и ваши службы должны быть достаточно умны, чтобы откатить операцию (в следующем посте я подробно покажу возможные способы, как это сделать)

Преимущество повторной попытки:

Трассировка даст вам возможность повторить определенные события. Предположим, у вас есть транзакция, проходящая через все ваши сервисы. Но, к сожалению, одна из служб прекратила работу (по какой-то причине). Теперь ваша система находится в состоянии, которое я называю «половина готового состояния», когда часть ваших служб применяет транзакцию, а другие нет. Поскольку трассировка получила идентификатор события (упомянутый выше), вы можете указать конкретной службе повторить попытку (после восстановления) неудачной транзакции и выполнить выравнивание.

Другие преимущества отслеживания:

Различайте разные пути в вашем потоке (без использования временных меток или архитектурного мышления)
Трассировка источника данных: если вы используете уникальный идентификатор для записи транзакции источника данных, вы можете использовать идентификатор события. Это расширит ваш общий путь к вашим записям источников данных (позже корреляцияId будет отображать все связанные идентификаторы событий, которые в конечном итоге будут отображать все затронутые записи в разных источниках данных
Контролируйте компоненты в целом. Поскольку у вас есть CorrelationId, который является тем же значением, которое используется во всех участвующих компонентах, вы можете отслеживать и устранять нежелательные действия.
Ориентированной на клиента. Вы всегда можете вернуть своему клиенту идентификатор корреляции и использовать его позже, если возникнут какие-либо проблемы, связанные с бизнесом или не связанные с бизнесом. Будет легче отслеживать поток, оглядываясь на присвоенный идентификатор корреляции.
Как вы можете заметить, преимущества огромны.

Мой совет: применяйте трассировку как можно раньше. Это может быть настоящей болью, когда ваша система становится сложной и широкой.

В следующем посте я рассмотрю пару поставщиков трассировки и объясню, как мы применяем трассировку в наших компонентах и ​​какие фреймворки мы использовали для их визуализации.

взято из моего блога по адресу:

Ваше здоровье,

Если

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *