缩放node.js

我对于大规模的服务器端开发相当陌生。 我想用node.js编写一个服务器,但是在我进一步开发之前,我想知道将节点扩展到每秒20个查询的一般原则。

我正在写的服务将主要是一个数据库的接口,加上input数据的validation和validation。

负载均衡

最可能的最简单的网站,你根本不需要任何缩放。 只有一个盒子会让你覆盖。 之后,你应该像你所提到的那样进行负载平衡,对于每一个架构来说都是一样的(比如你说你可以先启动多个节点进程,但是当你变得非常大时,你需要更多的盒子)。

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; } } } 

Redis的

每秒20个查询

没有为node.jsstream汗 你应该使用redis作为你的数据存储,因为它是疯狂的快:)。 当使用node_redis时,甚至还有一个用于节点的ac库。

 npm install hiredis redis 

Hiredis是什么让你kickass性能,因为它编译到节点内的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 /秒是没有什么 :)。

authentication


更新:

  • everyauth

  • OpenID的


我说了很多,但是为了上帝的爱,请不要试图实现你自己的authentication系统。 这可能是不安全的(很多可能会出错),很多工作。 对于身份validation,您应该使用优秀的connect-auth库来使用facebook-connect,twitter单一login等。 那么你是安全的,因为他们有专家testing那里的login系统的漏洞,也不通过纯文本传输密码,但感谢上帝使用https。 我也回答了一个想要使用Facebook连接的用户的话题。

input数据的validation

要validationinput,你可以使用节点validation器 。

 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(/^[az]+$/); //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>' 

还有这个forms库来帮助你创build表单。