я нашел проблему случайно, когда я отправлял событие Google Analytics, не дожидаясь ответ, поэтому я построил пример кода здесь: https://github.com/tanapoln/node_perf_testNode.js: Почему запросы зажигательных и забыл это может привести к падению производительности массивного
код очень прост , всего 2 конечных точки, отправка OK в ответ на медленном, который будет срабатывать просмотры страниц события GA (с запросом HTTP), за исключением, как вы можете увидеть ниже:
let express = require('express')
let ua = require('universal-analytics')
let app = express()
let visitor = ua('UA-34321454-1', 'user1', {strictCidFormat: false, https: false});
app.get('/fast', function(req ,res) {
res.send('OK')
})
app.get('/slow', function(req, res) {
//This line will simply fire HTTP request to Google Analytics
visitor.pageview('/slow').send()
res.send('OK')
})
app.listen(3000, function() {
console.log("Server started at port 3000")
})
Когда бенчмаркинг этих 2 конечных точек, вы можете увидеть resule здесь :
Running 10s test @ http://localhost:3000/fast
10 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 103.83ms 59.20ms 698.91ms 85.15%
Req/Sec 201.36 113.56 750.00 79.63%
19531 requests in 10.06s, 3.73MB read
Socket errors: connect 0, read 659, write 0, timeout 0
Requests/sec: 1941.10
Transfer/sec: 379.12KB
Running 10s test @ http://localhost:3000/slow
10 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 407.06ms 228.33ms 1.23s 74.15%
Req/Sec 37.18 29.17 136.00 70.59%
2847 requests in 10.09s, 556.05KB read
Socket errors: connect 0, read 2900, write 1, timeout 0
Requests/sec: 282.10
Transfer/sec: 55.10KB
Запрос в секунду для массового падения, и я не знаю причин, почему.
Пожалуйста, помогите.
Я не знаю, почему это замедлит ваш общий процесс, но я подозреваю, что GA будет ограничивать вас тем, что видит столько запросов, исходящих от одного IP-адреса, поскольку это, очевидно, не является реальным использованием их API в реальном мире , Вы могли бы выяснить, была ли проблема проблемой GA, заменив вызов GA вызовом другого простого сервера, который просто возвращает немедленный ответ. – jfriend00
@ jfriend00 Спасибо за ваш ответ, я уже пытаюсь изменить конечную точку с помощью простого запроса GET, но результат будет таким же, как и раньше (но req/sec выше примерно на 20%). Я также пытаюсь сравнить этот фиктивный момент, чтобы он не был узким местом. – Stackle
Имеет ли node.js что-то с NIO? – EJP