负载均衡
很可能对于最简单的网站,您根本不需要任何扩展。只需一个盒子即可满足您的需求。之后你应该像你提到的那样进行负载平衡,这对于每个架构几乎都是相同的(就像你说你可以先启动多个节点进程。但是当你变得非常大时,你需要更多的盒子)。
Nginx load balancing example:
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;
}
}
}
Redis
每秒 20 次查询
node.js 不费吹灰之力。你应该使用 redis 作为你的数据存储,因为它非常快:)。当您使用 node_redis 时,甚至还有一个用于 node 的 c 库。
npm install hiredis redis
Hiredis 可以为您提供出色的性能,因为它可以在节点内编译为 C 代码。以下是与hiredis一起使用时redis的一些基准。
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/s 是 NOTHING :)。
认证
更新:
我说了很多,但看在上帝的份上,请不要尝试实现自己的身份验证系统。这可能是不安全的(很多可能会出错),需要做很多工作。对于身份验证,您应该使用出色的connect-auth 库使用 facebook-connect、twitter 单点登录等。然后你就安全了,因为他们有专家在那里测试登录系统的漏洞,而且也不通过纯文本传输密码,但感谢上帝使用 https。我还为想使用facebook-connect的用户回答了一个话题。
输入数据的验证
要验证输入,您可以使用node-validator。
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('<a>').entityDecode(); //'<a>'
还有这个forms 库可以帮助您创建表单。