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

Cách trực quan hóa việc sử dụng Resque với Node.js, WebSockets và Redis

Bạn đã bao giờ muốn hình dung hàng đợi Resque, công nhân và công việc của mình đang hoạt động như thế nào chưa? Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo một số đồ thị đơn giản xung quanh các thành phần Resque.

Ủy quyền công việc vào hàng đợi nền

Việc ủy ​​quyền các công việc chạy dài, tốn kém về mặt tính toán và độ trễ cao vào hàng đợi nhân viên chạy nền là một mẫu phổ biến được sử dụng để tạo các ứng dụng web có thể mở rộng. Mục tiêu là phục vụ các yêu cầu của người dùng cuối với phản hồi nhanh nhất có thể bằng cách đảm bảo rằng tất cả các công việc tốn kém đều được xử lý bên ngoài chu kỳ yêu cầu / phản hồi.

Yêu cầu lại

Resque là một thư viện Ruby được Redis hỗ trợ để tạo các công việc nền, đặt chúng trên nhiều hàng đợi và xử lý chúng sau này. Nó được thiết kế để sử dụng trong các tình huống yêu cầu khối lượng lớn các mục nhập công việc vì Resque cung cấp các cơ chế để đảm bảo khả năng hiển thị và độ tin cậy của hành vi trong khi chuyển tiếp số liệu thống kê thông qua trang tổng quan web.

Redis

Redis là một mã nguồn mở (được cấp phép BSD), lưu trữ cấu trúc dữ liệu trong bộ nhớ, được sử dụng làm cơ sở dữ liệu, bộ nhớ cache và môi giới thông báo. Nó hỗ trợ các cấu trúc dữ liệu như chuỗi, băm, danh sách, tập hợp, tập hợp được sắp xếp với truy vấn phạm vi, bitmap, siêu nhật ký và chỉ mục không gian địa lý với truy vấn bán kính.

Node.js

Node.js là nền tảng được xây dựng dựa trên thời gian chạy JavaScript của Chrome để dễ dàng tạo các ứng dụng mạng nhanh và có thể mở rộng. Node.js sử dụng mô hình I / O hướng sự kiện, không chặn, giúp nó nhẹ và hiệu quả, đồng thời hoàn hảo cho các ứng dụng thời gian thực sử dụng nhiều dữ liệu chạy trên các thiết bị phân tán.

Express.js

Express.js là một khung công tác Node.js. Node.js là một nền tảng cho phép JavaScript được sử dụng bên ngoài trình duyệt web, để tạo các ứng dụng web và mạng. Điều này có nghĩa là bạn có thể tạo mã phía máy chủ và máy chủ cho một ứng dụng giống như hầu hết các ngôn ngữ web khác, nhưng sử dụng JavaScript.

Socket.IO

Socket.IO là một thư viện JavaScript dành cho các ứng dụng web thời gian thực. Nó cho phép giao tiếp theo thời gian thực, hai chiều giữa các máy khách và máy chủ web. Nó có hai phần:thư viện phía máy khách chạy trên trình duyệt và thư viện phía máy chủ cho Node.js. Cả hai thành phần đều có các API gần giống nhau.

Heroku

Heroku là một nền tảng đám mây cho phép các công ty xây dựng, phân phối, giám sát và mở rộng ứng dụng - đây là cách nhanh nhất để chuyển từ ý tưởng đến URL, vượt qua tất cả những vấn đề đau đầu về cơ sở hạ tầng.

Bài viết này giả định rằng bạn đã cài đặt Redis, Node.js và Heroku Toolbelt trên máy tính của mình.

Thiết lập:

  1. Tải xuống mã từ kho lưu trữ của ScaleGrid.
  2. Chạy npm install để cài đặt các thành phần cần thiết.
  3. Cuối cùng, bạn có thể khởi động máy chủ nút bằng cách thực hiện “node index.js”. Bạn cũng có thể chạy "gật đầu" để theo dõi các thay đổi của tệp.

Bạn cũng có thể truy cập phiên bản được lưu trữ trên máy chủ của ứng dụng này tại đây.

Ứng dụng của chúng tôi sử dụng một cổng Resque được gọi là node-resque cho phép chúng tôi xem hàng đợi, công nhân và công việc đang chạy trên một cụm Redis.

Hiểu những điều cơ bản

Ngay sau khi khởi động ứng dụng, bạn được yêu cầu nhập thông tin đăng nhập cụm Redis của mình. Xin lưu ý rằng bạn phải cài đặt lại và chạy trên cụm của bạn để điều này hoạt động chính xác.

May mắn thay, ScaleGrid được quản lý hoàn toàn cho Redis ™ * cung cấp giải pháp lưu trữ một lần nhấp với hiệu suất cao cho Redis ™. Nếu bạn chưa phải là thành viên, bạn có thể đăng ký bản dùng thử miễn phí 30 ngày tại đây để bắt đầu.

Nếu không, hãy đăng nhập vào trang tổng quan của bạn và tạo một cụm Redis ™ mới trong phần Redis ™. Khi cụm của bạn đã bắt đầu và đang chạy, bạn có thể lấy các chi tiết cần thiết từ Trang chi tiết cụm. Bạn sẽ cần những thông tin sau:

  1. Máy chủ lưu trữ
  2. Cổng
  3. Mật khẩu

Nếu kết nối thành công, bạn sẽ thấy các biểu đồ như sau:

Hãy thảo luận chi tiết về từng biểu đồ này. Xin lưu ý rằng tất cả các biểu đồ đều tự cập nhật, vì vậy nếu nhân viên đang xử lý công việc trên cụm của bạn, các biểu đồ sẽ tự động cập nhật.

Tổng số nhiệm vụ trên tất cả các hàng đợi

Các biểu đồ trên hiển thị tổng số lượng Xếp lại hàng đợi trên cụm của bạn và số lượng công việc có trong mỗi hàng đợi. Resque lưu trữ một hàng đợi công việc trong danh sách Redis có tên “resque:queue:name” và mỗi phần tử trong danh sách là một hàm băm được tuần tự hóa dưới dạng chuỗi JSON. Redis cũng có cấu trúc quản lý của riêng mình, bao gồm danh sách công việc “thất bại”. Đặt lại không gian tên cho dữ liệu của nó trong Redis với tiền tố “resque:”, vì vậy nó có thể được chia sẻ với những người dùng khác.

Biểu đồ công nhân / công việc

Một nhân viên Resque xử lý công việc. Trên các nền tảng hỗ trợ fork (2), worker sẽ phân tách một con để xử lý từng công việc. Điều này đảm bảo một phương tiện chặn sạch sẽ khi bắt đầu công việc tiếp theo và giảm tốc độ tăng trưởng bộ nhớ dần dần cũng như các lỗi cấp thấp.

Nó cũng đảm bảo rằng nhân viên luôn lắng nghe các tín hiệu từ bạn, chủ của họ và có thể phản ứng tương ứng.

Biểu đồ trên cho thấy tất cả các công nhân trên Redis cluster. Trạng thái 1 cho biết rằng công việc đã được giao cho công nhân và đang được thực hiện, còn trạng thái 0 cho biết công nhân đang rảnh / rỗi.

Tình trạng công việc

Resque job đại diện cho một đơn vị công việc. Mỗi công việc nằm trên một hàng đợi duy nhất và có một đối tượng trọng tải liên quan. Trọng tải là một hàm băm có hai thuộc tính:`class` và` args`. `Class` là tên của lớp Ruby sẽ được sử dụng để chạy công việc. `Args` là một mảng các đối số sẽ được chuyển cho phương thức cấp lớp` performance` của lớp Ruby.

Biểu đồ trên cho thấy trạng thái của công việc là đã xử lý hoặc không thực hiện được. Một công việc được thêm vào trạng thái không thành công nếu công nhân không thực hiện được. Dưới đây là một ví dụ về Đối tượng công việc đơn giản.

var jobs = {
  "add": {
    plugins: [ 'jobLock', 'retry' ],
    pluginOptions: {
      jobLock: {},
      retry: {
        retryLimit: 3,
        retryDelay: (1000 * 5),
      }
    },
    perform: function(a,b,callback){
      var answer = a + b;
      callback(null, answer);
    },
  },
  "subtract": {
    perform: function(a,b,callback){
      var answer = a - b;
      callback(null, answer);
    },
  },
};

  • Một phiên bản được lưu trữ sẵn có tại đây.
  • Để triển khai ứng dụng này trên Heroku, hãy xem tài liệu của họ.
  • Toàn bộ mã nguồn cũng có sẵn trên GitHub để bạn phân tách và làm việc tại đây.

Như mọi khi, nếu bạn xây dựng một thứ gì đó tuyệt vời, hãy tweet cho chúng tôi về nó @scalegridio.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để trả lại flask render_template sau khi hoàn tất công việc nền Redis?

  2. Python - Cách kiểm tra xem máy chủ Redis có khả dụng không

  3. Cách hiệu quả để ánh xạ dữ liệu từ Redis

  4. Làm thế nào để sử dụng lại kết nối redis trong socket.io?

  5. Khởi động redis-server với tệp cấu hình