Người ta thường quan tâm đến các hệ thống xử lý cả triệu records / giây và nói về Big Data.
Hôm nay xin share một case để hạ phàm nha.
Công ty mình có một lượng kha khá các website với vài chức năng cơ bản:
Mọi chuyện vẫn êm xui cho đến một ngày mình chán ngấy cảnh phải xử lý lặp lại các tác vụ của những chức năng này. Nghiệp vụ thay đổi thường xuyên, có khi submit cái form phải gửi mail (với các nội dug khác nhau), gửi thông báo qua slack, CRM, telegram, nhập vào google sheet, ….
Zappier là một lựa chọn dễ thấy, trừ phần chi phí của nó.
Thế thì thôi, nhà thiếu điều kiện thì mình “liệu cơm gắp mắm” (nói cho vần chứ mình không ăn mắm).
Trước hết, mình thấy là các nghiệp vụ sẽ còn thay đổi nhiều và sẽ kết hợp với nhau theo cái cách mình không đoán trước được; thế nên mình dựng một em worker chuyên nhận việc về làm.
Ý tưởng là gửi 1 đoạn text cấu hình đến em worker này và em ấy làm một số việc được chỉ định (gửi mail, gửi thông báo, nhập google sheet,…)
Ban đầu mình cũng định xây UI cho em nó để cấu hình các actions xảy ra sau khi submit form các loại nhưng cái này tốn công quá, mình đi thẳng vào phần lõi giá trị luôn. Phần cấu hình mình…. dùng JSON :v
Em worker này cơ bản là một hàng đợi các job cần thực hiện, các job tổ chức theo dạng template có thể cấu hình thông số.
– Mình đặt tên em nó là Monday (well, just the day most of people hate)
Chọn cái gì để làm hàng đợi đây? Kafka? Redis? RabbitMQ? SQS?… hmmm, không cần phức tạp vậy.
Dùng Laravel 🙂 Nghe hơi lạ đúng không? Uhm, nhưng mà nhanh và gọn. Laravel đã có sẵn cơ chế queue với các driver (database, file, redis,…). Dùng thôi.
Thấm thoát đến nay mình đã hướng dẫn em ấy các job template:
À mà phải nói, Bitrix có hỗ trợ workflow design đủ mạnh để làm thêm khối việc, phụ thuộc sức sáng tạo thôi (chơi vui lắm nha).
Giờ đây, khi dựng một site / landing page mới và cần thực hiện các nghiệp vụ, chỉ cần gửi config data về em worker này, em ấy lo hết, tự recover job fail và báo cáo hàng ngày luôn. Em này đang xử lý trung bình khoảng 3.5k jobs mỗi ngày. Nhà của em ấy chỉ là một con lightsail $10/tháng.
Cuộc đời đẹp tươi lần nữa.
Về tracking, cơ bản là dùng Google Analytics (event tracked by configuring Google Tag Manager) và hệ thống short link bit.ly là đủ xài.
Sắp tới chắc phải triển khai hệ thống shortlink riêng để phục vụ thêm một số mục đích.
Bài này mình chỉ nói về flow nghĩ và làm thôi nha, không hướng dẫn cách làm, không demo code; vì cái này quá dễ, ai cũng làm được.