Я исследую возможность использования узла в качестве обратного прокси. Одна из основных целей моего проекта - ОЧЕНЬ высокая производительность. Итак, я настроил сервер узла для прокси-запросов к серверу целевого узла, который будет отвечать «привет, мир» независимо от запроса.
Используя Apache Bench, я провел некоторое сравнение количества запросов, обрабатываемых в секунду. Прокси-сервер, цель и вызывающая сторона находятся в отдельных экземплярах M1 Large в AWS. Мои результаты разочаровывают и сбивают с толку.
Напрямую от вызывающего к цели:
ab -c 100 -n 10000 http://target-instance/
= ~ 2600 запросов в секунду
От вызывающего абонента через прокси к цели
ab -c 100 -n 10000 http://proxy-instance/
= ~ 1100 запросов в секунду
Используя lighttpd, я смог получить ~ 3500 запросов / во-вторых, прокси и цель
Я разочарован тем, что прокси-сервер менее эффективен, чем целевой сервер. Сравнивая другие продукты, такие как lighttpd, я видел, что прокси-сервер дает сопоставимые результаты с целевым, поэтому я не понимаю, когда Node (который должен быть молниеносным) не достигает того же.
Вот мой прокси-код в Node v0.5.9: Я что-то упустил?
var server =
http.createServer(function(req, res){
var opts = { host: 'target-instance',
port: 80,
path: '/',
method: 'GET'};
var proxyRequest = http.get(opts, function(response){
response.on('data', function(chunk){
res.write(chunk);
});
response.on('end', function(){
res.end()
});
});
});
server.listen(80);