0

Dựng hệ thống Message Queue trong 1 phút với Docker: Giải mã image schickling/beanstalkd

Chào anh em trên Viblo!

Khi nhắc đến hệ thống hàng đợi (Message Queue) để xử lý các tác vụ chạy ngầm (background jobs) như gửi email, xử lý ảnh hay đồng bộ dữ liệu, nhiều anh em sẽ nghĩ ngay đến những cái tên "hạng nặng" như Kafka, RabbitMQ hay dùng tạm Redis.

Nhưng nếu dự án của bạn ở mức vừa và nhỏ, cần một giải pháp cực kỳ nhẹ, không tốn RAM và cấu hình đơn giản thì sao? Chân ái chính là Beanstalkd.

Dựa vào bức ảnh chụp từ Docker Hub của repository schickling/beanstalkd, hôm nay mình sẽ hướng dẫn anh em cách "lên đồ" cho hệ thống hàng đợi này một cách chuẩn bài và nhanh gọn nhất nhé!

1. Kéo Image về máy: "Bé hạt tiêu" chỉ 2MB

Nhìn vào phần thông tin (Tag summary) bên phải bức ảnh image_eaddfa.png, anh em sẽ thấy một thông số cực kỳ ấn tượng: Size 2 MB. Đây là một mức dung lượng siêu nhỏ, giúp việc pull image về máy và khởi động container diễn ra chỉ trong cái chớp mắt, không làm nặng server của bạn.

Để tải image này về, anh em mở Terminal lên và gõ lệnh:

docker pull schickling/beanstalkd
  1. Chạy Beanstalkd cơ bản (Dành cho môi trường Dev/Test) Ngay trong phần "Overview" của ảnh, tác giả đã cung cấp cho chúng ta câu lệnh chạy cơ bản nhất. Cách này phù hợp khi anh em đang code ở máy local và cần một hàng đợi để test ngay lập tức:
docker run -d -p 11300:11300 schickling/beanstalkd

Giải ngố câu lệnh:

  • -d (detach): Chạy container ngầm ở chế độ background, trả lại terminal cho bạn gõ lệnh khác.
  • -p 11300:11300: Mapping port (ánh xạ cổng). Beanstalkd mặc định chạy ở cổng 11300. Lệnh này mở cổng 11300 trên máy host của bạn và nối thẳng vào cổng 11300 của container. Sau khi chạy, ở code Backend (Node.js, PHP, Go...), bạn chỉ cần kết nối Queue tới localhost:11300 là xong.

3. Chạy Beanstalkd nâng cao: Bật tính năng Persistence (Chống mất dữ liệu)

Bản chất của Beanstalkd là in-memory queue (lưu trữ trên RAM để đảm bảo tốc độ). Nếu bạn dùng lệnh ở bước 2, khi container bị tắt hoặc server sập nguồn, toàn bộ job đang chờ trong hàng đợi sẽ bay màu.

Để giải quyết vấn đề này, ảnh hướng dẫn có cung cấp một tham số cấu hình nâng cao (Add configuration parameters like this):

docker run -d -p 11300:11300 schickling/beanstalkd -b /some/dir

Cờ -b /some/dir yêu cầu Beanstalkd bật tính năng binlog (ghi log nhị phân) và lưu các bản ghi dữ liệu vào thư mục /some/dir bên trong container. Nếu có sự cố, khi bật lại, Beanstalkd sẽ đọc file ở đây để khôi phục lại các job chưa chạy.

Kinh nghiệm xương máu: Lệnh trên của tác giả vẫn còn thiếu một bước thực tế. Nếu bạn chỉ ghi vào /some/dir bên trong container, thì khi xóa container, file đó cũng mất. Để an toàn 100%, bạn phải dùng thêm cờ -v để mount cái thư mục đó ra ngoài ổ cứng của máy chủ host:

docker run -d -p 11300:11300 -v /my/host/beanstalkd-data:/some/dir schickling/beanstalkd -b /some/dir

(Thay /my/host/beanstalkd-data bằng đường dẫn thực tế trên máy bạn).

4. Góc cảnh báo từ người từng trải: Chú ý thời gian cập nhật!

Nếu anh em là một lập trình viên cẩn thận, hãy nhìn vào dòng chữ mờ mờ ở góc dưới bên phải ảnh: Last updated: about 8 years ago (Cập nhật lần cuối cách đây khoảng 8 năm).

Đây là một thực tế khá phổ biến trong thế giới mã nguồn mở. Beanstalkd là một công cụ cực kỳ hoàn thiện và ổn định, nó gần như không có tính năng mới nào trong nhiều năm qua, dẫn đến việc các Docker Image cũng không được tác giả cập nhật.

Lời khuyên:


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí