Статьи

Node.js против ASP.NET Web API

образМного было сказано о превосходной производительности Node.js, поэтому я хотел проверить, как она сравнивается с серверной частью ASP.NET Web Api. Я создал простой сервер для обеих платформ, который принимает POST-запрос, а затем отвечает телом запроса.

Реализации Node.js и ASP.NET Web Api

Вот код Node.js:

var express = require('express')
    , app = express.createServer();
 
app.use(express.bodyParser());
 
app.post('/', function(req, res){
    res.send(req.body);
});
 
app.listen(3000);

А вот контроллер ASP.NET Web Api:

public class ValuesController : ApiController
{
    // POST /api/values
    public Task<string> Post()
    {
        return this.ControllerContext.Request.Content.ReadAsStringAsync();
    }
}

эталонный тест

Я использовал инструмент Apache ab для тестирования производительности платформ. Тест был выполнен со следующими настройками:

  • Общее количество запросов: 100 000
  • Параллелизм: 100

Тест (test.dat) содержал простой JSON, взятый из Википедии.

{
     "firstName": "John",
     "lastName" : "Smith",
     "age"      : 25,
     "address"  :
     {
         "streetAddress": "21 2nd Street",
         "city"         : "New York",
         "state"        : "NY",
         "postalCode"   : "10021"
     },
     "phoneNumber":
     [
         {
           "type"  : "home",
           "number": "212 555-1234"
         },
         {
           "type"  : "fax",
           "number": "646 555-4567"
         }
     ]
 }

Вот вся команда, которая использовалась для запуска теста производительности:

ab -n 100000 -c 100 -p .\test.dat -T 'application/json; charset=utf-8' http://localhost/

Тест производительности был выполнен 3 раза, и был выбран лучший результат для каждой платформы. Разница в производительности между тестами была минимальной.

Тестовая среда

Тест был выполнен на Windows Server 2008 R2, размещенном на c1.medium Amazon EC2, например:

образ

Характеристики экземпляра

  • 1,7 ГБ памяти
  • 5 вычислительных блоков EC2 (2 виртуальных ядра)

Версии

  • Node.js: 0.6.17
  • ASP.NET Web Api: текущий выпуск (12.5.2012)
  • IIS: 7

И Node, и IIS-серверы были запущены с готовыми настройками.

Результаты тестов

образ

  Веб-интерфейс Node.js
Время взято (в с) 89,95 41,65
Запросов в секунду 1111,69 2400,89
Время на запрос (в мс) 89,95 41,65
Неудачные запросы 0 0

Вывод

Производительность Node.js из коробки выше, чем у ASP.NET Web Api + IIS7. Изменение настроек IIS7 может повысить производительность ASP.NET Web Api, но для этого теста использовались настройки IIS7 по умолчанию.