2017-01-23 3 views
0

я нашел проблему случайно, когда я отправлял событие 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 

Запрос в секунду для массового падения, и я не знаю причин, почему.

Пожалуйста, помогите.

+0

Я не знаю, почему это замедлит ваш общий процесс, но я подозреваю, что GA будет ограничивать вас тем, что видит столько запросов, исходящих от одного IP-адреса, поскольку это, очевидно, не является реальным использованием их API в реальном мире , Вы могли бы выяснить, была ли проблема проблемой GA, заменив вызов GA вызовом другого простого сервера, который просто возвращает немедленный ответ. – jfriend00

+0

@ jfriend00 Спасибо за ваш ответ, я уже пытаюсь изменить конечную точку с помощью простого запроса GET, но результат будет таким же, как и раньше (но req/sec выше примерно на 20%). Я также пытаюсь сравнить этот фиктивный момент, чтобы он не был узким местом. – Stackle

+0

Имеет ли node.js что-то с NIO? – EJP

ответ

1

Я думаю, что проблема не в сети внутри Node.js, которую я также пробовал на другом языке (в моем случае, Go), который нашел ту же проблему с тем же ограничением производительности.

Это далеко за пределами моих текущих знаний. Я предполагаю, что проблема заключается в том, что внутри linux/unix TCP стека или даже на более низком уровне.

Я закрою это и сделаю больше исследований. Если я удалю дорожный блок, я отправлю еще один вопрос.

Спасибо всем.

 Смежные вопросы

  • Нет связанных вопросов^_^