首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >扩展Node.js

扩展Node.js
EN

Stack Overflow用户
提问于 2011-01-17 14:04:13
回答 1查看 27.8K关注 0票数 88

对于大规模服务器端开发,我还是个新手。我想使用Node.js编写一台服务器,但在继续之前,我想知道将节点扩展到每秒20个查询的一般原则是什么。

我正在编写的服务主要是一个数据库接口,外加输入数据的身份验证和验证。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-17 14:42:51

负载均衡

很可能对于最简单的站点,您根本不需要任何缩放。只需一个盒子就可以覆盖您的需求。在此之后,您应该像您提到的那样进行负载均衡,这对于每个架构几乎都是相同的(就像您所说的,您可以首先启动多个节点进程。但当你变得很大时,你需要更多的盒子)。

Nginx load balancing example

代码语言:javascript
复制
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时,甚至有一个用于节点的c库。

代码语言:javascript
复制
npm install hiredis redis

Hiredis能给你带来超强的性能,因为它能在node内部编译成C代码。以下是与hiredis一起使用时来自redis的一些基准测试。

代码语言:javascript
复制
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 :)。

身份验证

更新:

我已经说了很多,但是看在上帝的份上,请不要试图实现你自己的认证系统。这可能是不安全的(很多可能出错),有很多工作要做。对于身份验证,你应该使用facebook-connect,twitter单点登录,等等,使用优秀的connect-auth库。然后你就安全了,因为他们有专家在那里测试登录系统的漏洞,也不会通过纯文本传输密码,但谢天谢地,使用https。我还为一位想要使用facebook-connect的用户回答了一个主题。

输入数据的验证

要验证输入,可以使用node-validator

代码语言:javascript
复制
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>'

还有这个forms库可以帮助您创建表单。

票数 150
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4710420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档