Skip to main content

Chi tiết các chức năng trên Magistrala

Hệ thống Magistrala (SuperMQ) được thiết kế theo mô hình microservices chặt chẽ, tập trung vào khả năng mở rộng và bảo mật đa tầng. Dưới đây là các thành phần lõi và cách chúng vận hành.

1. User

Trong hệ thống Magistrala, khi một người dùng mới đăng ký, họ không mặc định có quyền truy cập vào các domain. Quy trình quản lý quyền truy cập như sau:

  • Lời mời tham gia: Quản trị viên domain (Domain Administrator) phải gửi lời mời và chỉ định vai trò cho người dùng trong domain đó. Các vai trò phổ biến gồm: Administrator, Editor, Viewer hoặc Member.
  • Đối tượng mời: Quản trị viên có thể mời những người đã có tài khoản trên Magistrala hoặc mời người dùng mới thông qua email.
  • Chấp nhận lời mời: Sau khi đăng ký tài khoản thành công, người dùng có thể chấp nhận lời mời tham gia domain.
  • Quyền tạo domain: Tất cả người dùng trong Magistrala đều có quyền tự tạo domain mới.
  • Quyền hạn mặc định: Người tạo domain sẽ nghiễm nhiên trở thành Administrator của domain đó.

Note: Không có cách mặc định để hạn chế user tự tạo nhiều domain, channel và client. Hiện tại, billing service có thể giới hạn số channel và client trong một domain, nhưng phần này vẫn chưa hoàn thiện và chưa có API.

2. Domain

Domain là cấp độ cao nhất trong kiến trúc đa người dùng (multi-tenancy). Nó tạo ra một ranh giới biệt lập cho dữ liệu và tài nguyên.

  • Chức năng: Tách biệt khách hàng hoặc các dự án lớn. Mọi tài nguyên bên trong domain như client, channel, group đều thuộc quyền sở hữu riêng của domain đó.
  • Đặc điểm: Một hệ thống SuperMQ có thể chạy hàng nghìn domain cùng lúc mà không chồng chéo dữ liệu.

3. Member & Role

Đây là lớp quản lý người dùng trong hệ thống.

  • Member Domain: Là một user được gán vào một domain cụ thể. Một user có thể là thành viên của nhiều domain.
  • Role: Định nghĩa quyền hạn thông qua SpiceDB theo mô hình Relationship-based Access Control.
    • Administrator: Toàn quyền quản lý domain.
    • Editor/Viewer: Quyền hạn chế hơn, chỉ được thao tác hoặc xem dữ liệu. Hiện tại hệ thống mặc định chủ yếu có role admin, còn editor và viewer cần custom thêm.

Note: Trong một domain, có thể điều chỉnh quyền ở cả Domain role và Group role. Domain role có quyền cao nhất để điều chỉnh thiết bị phía dưới. Vai trò của Group role hiện còn khá mơ hồ vì Domain role đã bao phủ hầu hết các action.

4. Invitation

Đây là cơ chế mở rộng thành viên trong domain một cách bảo mật.

  • Chức năng: Admin gửi lời mời, thường qua email hoặc token, cho một user khác.
  • Quy trình: Lời mời có các trạng thái như Pending, Accepted, Rescinded. Khi user chấp nhận, hệ thống tự động tạo relationship trong SpiceDB để cấp quyền vào domain.

5. Group

Group dùng để tổ chức các client và channel theo cấu trúc thư mục hoặc logic nghiệp vụ.

  • Chức năng: Gom nhóm thiết bị theo vị trí như tầng 1, tầng 2 hoặc theo chức năng như nhóm cảm biến, nhóm cơ cấu chấp hành.
  • Phân quyền: Có thể gán quyền cho một user chỉ được quản lý một group nhất định thay vì toàn bộ domain.

Note: Một group có thể chứa nhiều client và channel, nhưng một client hoặc channel không thể thuộc nhiều group cùng lúc. Không có chức năng share trực tiếp client hoặc channel từ group này sang group khác, nhưng có thể chia sẻ gián tiếp thông qua rule engine.

6. Client

Trong Magistrala, Client (trước đây gọi là Thing) đại diện cho bất kỳ thực thể nào kết nối vào hệ thống.

  • Chức năng: Có thể là thiết bị phần cứng như cảm biến hoặc một ứng dụng phần mềm.
  • Danh tính: Mỗi client có một bộ IDKey duy nhất để xác thực khi kết nối qua MQTT, HTTP hoặc CoAP.

7. Channel

Channel là "đường ống" để dữ liệu đi qua.

  • Chức năng: Kết nối các client với nhau. Một client muốn gửi tin nhắn cho client khác hoặc lên server thì cả hai phải cùng được connect vào một channel.
  • Bảo mật: Đây là lớp bảo mật thứ hai. Ngay cả khi client có key đúng, nhưng nếu không được connect vào channel thì tin nhắn vẫn bị chặn.

8. Message

Message là dữ liệu thô di chuyển trong hệ thống.

  • Định dạng: Thường tuân theo chuẩn SenML để đồng nhất dữ liệu từ nhiều loại cảm biến khác nhau.
  • Luồng đi: Client -> Adapter (MQTT/HTTP) -> Message Broker (NATS/RabbitMQ) -> Writer (Postgres/InfluxDB).

Note: Để có thể lưu và truy vấn dữ liệu message, cần tạo rule để dữ liệu từ channel được đưa vào internal DB. Có thể query theo từng field, từng mốc thời gian, từng thiết bị, protocol, data name, v.v.

9. Alarm & Report

Đây là lớp xử lý dữ liệu sau khi đã được lưu trữ.

  • Alarm: Theo dõi dữ liệu thời gian thực. Ví dụ, nếu nhiệt độ lớn hơn 50°C, hệ thống sẽ tạo trạng thái alarm.
  • Report: Tổng hợp dữ liệu từ Postgres hoặc InfluxDB theo thời gian như ngày, tuần, tháng để xuất biểu đồ hoặc file PDF/CSV phục vụ phân tích xu hướng.

10. Rule Engine

Đây là "bộ não" tự động hóa của hệ thống.

  • Chức năng: Cho phép thiết lập logic kiểu "Nếu - Thì" (If-This-Then-That).
  • Ví dụ: Nếu cảm biến nhiệt độ lớn hơn 30°C thì gửi tin nhắn bật điều hòa tới channel điều khiển.
  • Cấu trúc: Thường bao gồm Source (nguồn tin), Filter/Logic (điều kiện) và Action (hành động như gửi email, gọi webhook hoặc gửi lại tin nhắn MQTT).