Узел Масштабирования.js


Я довольно новичок в крупномасштабной серверной разработке. Я хочу написать сервер с помощью узла.js, но прежде чем я продолжу, я хотел бы знать, каковы общие принципы масштабирования узла до, скажем, 20 запросов в секунду.

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

1 85

1 ответ:

балансировки нагрузки

скорее всего, для самых простых сайтов вам вообще не нужно масштабирование. Только одна коробка поможет вам покрыть. После этого вы должны выполнить балансировку нагрузки, как вы упоминаете, что почти одинаково для каждой архитектуры(например, вы говорите, что сначала можете запустить несколько процессов узла. Но когда вы становитесь действительно большими, вам нужно больше коробок).

балансировка нагрузки Nginx пример:

http {
  upstream myproject {
    server 127.0.0.1:8000 weight=3;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;    
    server 127.0.0.1:8003;
  }

  server {
    listen 80;
    server_name www.domain.com;
    location / {
      proxy_pass http://myproject;
    }
  }
}

Рэдис

20 запросов в секунду

нет пота для узла.js. Вы должны использовать redis в качестве хранилища данных, потому что это безумно быстро :). Есть даже библиотека C для узла, когда вы используете node_redis.

npm install hiredis redis

Hiredis-это то, что дает вам высокую производительность, потому что он компилируется в код C внутри узла. Вот некоторые ориентиры от redis при использовании с hiredis.

PING: 20000 ops 46189.38 ops/sec 1/4/1.082
SET: 20000 ops 41237.11 ops/sec 0/6/1.210
GET: 20000 ops 39682.54 ops/sec 1/7/1.257
INCR: 20000 ops 40080.16 ops/sec 0/8/1.242
LPUSH: 20000 ops 41152.26 ops/sec 0/3/1.212
LRANGE (10 elements): 20000 ops 36563.07 ops/sec 1/8/1.363
LRANGE (100 elements): 20000 ops 21834.06 ops/sec 0/9/2.287

когда вы смотрите на эти цифры, то 20/х ничего :).

проверка подлинности


обновление:


Я говорю это много, но ради любви к Богу, пожалуйста, не пытайтесь реализовать свою собственную систему аутентификации. Это, вероятно, будет быть небезопасным (многое может пойти не так), много работы. Для аутентификации вы должны использовать facebook-connect, twitter single sign-in и т. д. С помощью excellent connect-auth библиотека. Тогда вы в безопасности, потому что у них есть эксперты, тестирующие там логин-системы для дыр, а также не передают пароли через обычный текст, но благодарят Бога за использование https. Я также ответил на тему для пользователя, который хотел использовать facebook-connect.

проверка ввода данные

для проверки ввода вы можете использовать узел-валидатор.

var check = require('validator').check,
    sanitize = require('validator').sanitize

//Validate
check('test@email.com').len(6, 64).isEmail();       //Methods are chainable
check('abc').isInt();                               //Throws 'Invalid integer'
check('abc', 'Please enter a number').isInt();      //Throws 'Please enter a number'
check('abcdefghijklmnopzrtsuvqxyz').is(/^[a-z]+$/);

//Sanitize / Filter
var int = sanitize('0123').toInt();                  //123
var bool = sanitize('true').toBoolean();             //true
var str = sanitize(' \s\t\r hello \n').trim();      //'hello'
var str = sanitize('aaaaaaaaab').ltrim('a');        //'b'
var str = sanitize(large_input_str).xss();
var str = sanitize('&lt;a&gt;').entityDecode();     //'<a>'

есть и такое формы библиотеки, чтобы помочь вам создавать формы.