Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Làm cách nào để sử dụng các cụm Node.js với ứng dụng Express đơn giản của tôi?

Trên thực tế, khối lượng công việc của bạn không thực sự bị ràng buộc I / O:nó bị ràng buộc bởi CPU do chi phí tạo trang động dựa trên ngọc bích. Tôi không thể đoán được độ phức tạp của mẫu ngọc bích của bạn, nhưng ngay cả với các mẫu đơn giản, việc tạo các trang HTML rất tốn kém.

Đối với các thử nghiệm của tôi, tôi đã sử dụng mẫu này:

html(lang="en")
  head
    title Example
  body
    h1 Jade - node template engine
    #container
      ul#users
        each user in items
          li User:#{user}

Tôi đã thêm 100 chuỗi giả vào khóa mục trong Redis.

Trên hộp của tôi, tôi nhận được 475 req / s với CPU node.js ở mức 100% (có nghĩa là mức tiêu thụ CPU 50% trên hộp lõi kép này). Hãy thay thế:

res.render( 'index', { items: items } );

bởi:

res.send( '<html lang="en"><head><title>Example</title></head><body><h1>Jade - node template engine</h1><div id="container"><ul id="users"><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li></ul></div></body></html>' );

Bây giờ, kết quả của điểm chuẩn là gần 2700 req / s. Vì vậy, nút cổ chai rõ ràng là do định dạng của trang HTML.

Sử dụng gói cụm trong tình huống này là một ý tưởng hay và nó rất đơn giản. Mã có thể được sửa đổi như sau:

var cluster = require('cluster')

if ( cluster.isMaster ) {
  for ( var i=0; i<2; ++i )
    cluster.fork();
} else {
  var
      express = require( 'express' ),
      app     = express.createServer(),
      redis   = require( 'redis' ).createClient();

  app.configure( function() {
      app.set( 'view options', { layout: false } );
      app.set( 'view engine', 'jade' );
      app.set( 'views', __dirname + '/views' );
      app.use( express.bodyParser() );
  });

  function log( what ) { console.log( what ); }

  app.get( '/', function( req, res ) {
      redis.lrange( 'items', 0, 50, function( err, items ) {
            if( err ) { log( err ); } else {
              res.render( 'index', { items: items } );
            }
      });
  });

  app.listen( 8080 );
}

Bây giờ kết quả của điểm chuẩn là gần 750 req / s với mức tiêu thụ CPU 100% (so với 475 req / s ban đầu).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Không thể tìm thấy mô-đun 'socket.io/node_modules/redis'

  2. Kết nối vùng chứa Redis với vùng chứa khác (Docker)

  3. Lỗi nghiêm trọng:Không có ngoại lệ 'RedisException' với thông báo 'Máy chủ Redis đã biến mất'

  4. Khắc phục sự cố

  5. nhiều khách hàng có thể truy cập đồng thời vào cùng một danh sách mà không bị chặn trong Redis không?