Недавно я играл с cls-rtracer , моей маленькой библиотекой для Express и Koa.Эта библиотека представляет собой просто набор облегченных промежуточных программ, построенных поверх cls-hooked .Таким образом, в основном я тестировал след cls-hooked (и Async Hooks API, поскольку я использовал версию 8 Node.js).
Я реализовал очень простое приложение Express и протестировал его на своем компьютере.с и без CLS.Сценарий с CLS был следующим:
- При каждом запросе идентификатор генерировался с помощью uuid / v4 и затем сохранялся в CLS.Это было сделано промежуточным программным обеспечением cls-rtracer.
- В промежуточном программном обеспечении маршрута было выполнено некоторое ведение журнала с помощью winston , библиотеки регистратора.Библиотека была настроена на получение идентификатора запроса от CLS и добавление его для каждой записи журнала.
Загрузка была сгенерирована утилитой ab .Я использовал Windows 10 и Node.js 10, но также тестировал на виртуальной машине Ubuntu с Node.js 8 и получил аналогичные результаты.
В результате я получил около 10-15% RPS (запрос в секунду)) ухудшение с включенными идентификаторами запросов и CLS.Что касается использования ЦП, я не увидел существенных различий, таких как внезапные всплески, между этими двумя сценариями.
Я опубликовал свое тестовое приложение в виде гистограммы: https://gist.github.com/puzpuzpuz/3c2a36ca0835906ad50dbd22c72df974
Looksкак поздний ответ, но это может помочь кому-то в будущем.Эти сценарии должны быть очень близки к реальным приложениям.