В этом быстром мире каждая операция и функция связаны с огромным объемом данных вне зависимости от области интересов. Например, если мы рассматриваем банк, будут происходить огромные денежные переводы, сбережения, транзакции с помощью дебетовых или кредитных карт и снятие средств. Один клиент может подключиться к нескольким транзакциям или финансовой деятельности. В этом смысле каждый инцидент, который будет способствовать работе банка, можно рассматривать как событие. На следующем изображении показана сеть с датчиками, шлюз для работы с датчиками и другими компонентами. Здесь также можно связать события. Датчики могут собирать данные о трафике или сторонах доступа и могут отправлять поставщикам услуг через соответствующий шлюз. Эти наборы данных можно назвать событиями.

Можно привести другой пример. Рассмотрим матч по крикету, рядом с полем будет несколько датчиков. Каждый из них будет отправлять данные о положении игроков, скорости и направлении мяча и т. Д. Такие данные можно рассматривать как события и обрабатывать для генерации некоторых событий высокого уровня, таких как определение выхода. Несколько событий более низкого уровня могут способствовать генерации событий высокого уровня.

Какие события выходят из строя?

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

Здесь событие 5 имеет значение метки времени - четыре и наступило после события 4, имеющего значение метки времени пять. То же, что и событие-9, также прибыло позже, возможно, из-за задержек в сетях.

Какие проблемы возникают при событиях, не связанных с порядком действий?

При обработке событий могут быть получены неправильные результаты из-за этого неупорядоченного события. Мы можем увидеть это на примере. Рядом с полем размещены три датчика, которые отслеживают скорость, направление и ускорение мяча. Можно сделать вывод, что игрок с битой отбивает мяч, на основании следующих событий:

  • Увеличение скорости мяча
  • Внезапное изменение направления мяча
  • Пиковое ускорение

Но вышеупомянутые события должны приниматься последовательно, чтобы сгенерировать событие более высокого уровня. Это обеспечивает необходимость упорядочивания событий в обработке. Есть четыре основных подхода к обработке этих сбоев в работе.

  1. Буферный подход
  2. Подход, основанный на пунктуации
  3. Подход, основанный на предположениях
  4. Аппроксимационный подход

Буферный подход

Как следует из названия, подход на основе буфера предполагает использование буфера для хранения событий в течение некоторого времени и их переупорядочения в соответствии с их временной меткой и отправкой. Например, предположим, что датчик S1 генерирует A, а датчик S2 генерирует B. Существует генератор событий G, который генерирует событие C, если он последовательно получает «A, B, A».

В конкретном случае события генерируются в порядке - A, B, A, A, B, B. Но он был получен как A, A, B, A, A, A, что приводит к неправильному времени генерации события. C. Это приведет к неточным результатам при дальнейшей обработке. Здесь мы можем использовать буфер, чтобы сохранить эти 6 событий и отсортировать их по их временной отметке, а затем отпустить.

Подход, основанный на пунктуации

В этом подходе поток данных будет иметь специальные знаки препинания для обработки нарушений. Используя знаки препинания в качестве индикатора, можно определить, что в будущем не прибудет больше событий, имеющих меньшее значение метки времени, чем метка времени пунктуации. Это означает, что после получения знаков препинания события с меньшими отметками времени, чем знаки пунктуации, будут отброшены получателем.

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

Подход, основанный на предположениях

Это немного отличается от предыдущих случаев. Результаты запроса выдаются при получении событий, предполагая, что прибыли только упорядоченные события. При получении события выхода из строя ранее рассчитанные результаты будут отброшены и будут созданы новые результаты запроса.

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

Аппроксимационный подход

Подход, основанный на приближении, связан с вычислением приблизительного агрегата по потокам данных. Поток необработанных данных суммируется с использованием специальной структуры данных (например, гистограммы), а затем вычисляется приблизительная агрегированная операция.

Во всех подходах может использоваться метод, основанный на качестве, на основе требований пользователя. Учет пользовательских спецификаций (относительно времени ожидания и точности) при обработке нарушений технически называется обработкой нарушений, обусловленных качеством (QDDH).