Оптимизация сериализации в узле - PullRequest
0 голосов
/ 09 января 2019

Итак, я пытаюсь оптимизировать кодирование / декодирование между микросервисами

Если я отправляю несколько обновлений с сервера A на серверы B, C и D, но B, C и D не нужны все обновления с сервера A

Я пишу это в Node.js и в настоящее время сериализуюсь с JSON.stringify () и JSON.parse (), но собираюсь использовать msgpack и для некоторых вещей.

Было бы лучше сделать что-то вроде

for each UPDATE in server A
    for each receiving_server (B, C, D)
        if receiving_server needs UPDATE from A
             receiving_server.updates.push(UPDATE)

затем вы снова проходите через принимающие серверы, кодируете и отправляете

for each receiving_server (B, C, D)
     receiving_server.send(encode(receiving_server.updates))

Так что проблема в том, что вы дважды перекодируете одни и те же данные. Теперь мне интересно, будет ли следующее оптимизация производительности или снижение

имеет обновления, каждый из которых закодирован ОДИН РАЗ, затем добавляет их в массив и затем кодирует массив

for each UPDATE in server A
    ENCODED_UPDATE = encode(UPDATE)
    for each receiving_server (B, C, D)
        if receiving_server needs UPDATE from A
             receiving_server.encoded_updates.push(ENCODED_UPDATE)

теперь вы делаете то же самое, что и раньше, но на этот раз вы кодируете массив уже закодированных обновлений .. Я не совсем уверен, что эффект низкого уровня того, что здесь происходит. Поскольку элементы в массиве уже закодированы, это экономит время кодирования при кодировании всего массива? или это вообще не имеет никакого эффекта, и его кодирование так же, как если бы оно было исходной строкой?

for each receiving_server (B, C, D)
     receiving_server.send(encoded_updates(receiving_server.updates))

Тогда мне также любопытно, насколько сильно это влияет на декодирование, меня это не так беспокоит, так как я скорее оптимизирую сторону кодирования, чем декодирование

...