У меня есть экземпляр EC2 с потоком данных, который использует генератор событий для обработки данных. Например.
stream.on('new event', function doSomething(event){ do more stuff...})
Этот поток данных может иметь десятки тысяч событий в секунду, и я хотел бы эффективно регистрировать обработку этих событий. Другими словами, я не хочу отправлять запись в журнал каждый раз, когда приходит новое событие.
Следовательно, я решил, что буду отправлять журналы пакетно. Например.
let logArray = [];
function sendToLogs(logs) {\** send stuff *\}
stream.on('new event', function doSomething(event){
\\do some stuff
logArray.push({newLog: event})
if (logArray.length >= 500) {
sendToLogs(logArray)
logArray = [];
}
})
Однако я боюсь, что с таким количеством событий, происходящих одновременно, приведенный выше код может привести к ошибочному поведению. Я видел это в локальном журналировании: длина этого массива довольно сильно прыгает и может иметь одно и то же значение для разных событий одновременно.
Кроме того, использование журналов cloudwatch требует от меня передачи «sequenceTokens» между различными вызовами функции ведения журнала. Если два события вызывают условие регистрации одновременно, все может стать странным. (Эта проблема существовала бы, даже если бы я регистрировал каждое событие отдельно.)
Как я должен вести журнал для этого типа потока данных?