Balanceo de carga
Lo más probable es que para los sitios más simples no necesite escalar en absoluto. Solo una caja lo cubrirá. Después de eso, debe hacer el balanceo de carga como lo está mencionando, que es casi lo mismo para todas las arquitecturas (como si estuviera diciendo que podría iniciar varios procesos de nodos primero. Pero cuando se vuelve realmente grande, necesita más cajas).
Ejemplo de equilibrio de carga de 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:
}
}
}
Redis
20 consultas por segundo
No se preocupe por node.js. Deberías usar redis como tu almacén de datos porque es increíblemente rápido :). Incluso hay una biblioteca de CA para el nodo cuando usa node_redis .
npm install hiredis redis
Hiredis es lo que le brinda un rendimiento excelente porque se compila en código C dentro del nodo. Aquí hay algunos puntos de referencia de redis cuando se usa con 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
Cuando miras esos números, 20 / s NO ES NADA :).
Autenticación
Actualizar:
Estoy diciendo esto mucho, pero por el amor de Dios, no intente implementar su propio sistema de autenticación. Probablemente no sea seguro (muchas cosas pueden salir mal), mucho trabajo. Para la autenticación, debe usar facebook-connect, twitter single sign-in, etc. usando la excelente biblioteca connect-auth . Entonces está seguro porque tienen expertos que prueban sus sistemas de inicio de sesión en busca de agujeros y tampoco transmiten contraseñas a través de texto plano, pero gracias a Dios, use https. También respondí un tema para un usuario que quería usar facebook-connect .
validación de datos de entrada
Para validar la entrada, puede usar node-validator .
var check = require('validator').check,
sanitize = require('validator').sanitize
check('test@email.com').len(6, 64).isEmail();
check('abc').isInt();
check('abc', 'Please enter a number').isInt();
check('abcdefghijklmnopzrtsuvqxyz').is(/^[a-z]+$/);
var int = sanitize('0123').toInt();
var bool = sanitize('true').toBoolean();
var str = sanitize(' \s\t\r hello \n').trim();
var str = sanitize('aaaaaaaaab').ltrim('a');
var str = sanitize(large_input_str).xss();
var str = sanitize('<a>').entityDecode();
También existe esta biblioteca de formularios para ayudarlo a crear formularios.