Hệ thống Tự trị (Self-Contained Systems - SCS)
Nền tảng VENI-AI được xây dựng trên mô hình kiến trúc Self-Contained Systems (SCS). Khác với các microservices truyền thống thường chỉ tập trung vào backend, một SCS là một ứng dụng web tự trị bao gồm cả giao diện người dùng, logic nghiệp vụ và lưu trữ dữ liệu riêng.
💎 Triết lý Cốt lõi
Mục tiêu chính của SCS là phi tập trung (decoupling). Hầu hết các nền tảng áp đặt các lớp ngang (horizontal layers), nơi một tính năng duy nhất yêu cầu sự phối hợp giữa các nhóm UI, Backend và Database. Tại VENI-AI, chúng tôi sử dụng lát cắt dọc (vertical slices):
- Tính tự trị: Mỗi module satellite có thể được phát triển, kiểm thử và triển khai mà không ảnh hưởng đến các module khác.
- Quyền sở hữu: Một nhóm sở hữu toàn bộ stack của một tính năng, từ schema cơ sở dữ liệu đến các component UI.
- Khả năng phục hồi: Sự cố ở một satellite (ví dụ: HRM) không làm sập satellite khác (ví dụ: Drive).
🏗️ Ba Trụ cột của một Satellite
Mỗi satellite trong hệ sinh thái VENI-AI phải đáp ứng ba yêu cầu để được coi là một SCS hợp lệ:
1. Giao diện Người dùng riêng (Federated UI)
Các satellite không chỉ cung cấp API; chúng cung cấp các trang (pages). Sử dụng Module Federation, Shell tải UI của satellite tại thời điểm runtime.
- Chế độ Độc lập (Standalone): Mỗi UI có thể chạy độc lập trên cổng riêng (ví dụ:
:4175). - Chế độ Tích hợp (Integrated): Shell gắn kết remote UI vào vùng nội dung chính, cung cấp trải nghiệm điều hướng liền mạch.
2. Logic Nghiệp vụ riêng (Independent API)
Mỗi satellite vận hành máy chủ API riêng (tiêu chuẩn hóa trên Bun + Hono + Ignis v2).
- Phạm vi Dịch vụ (Service Scoping): Satellite cấp JWT riêng được giới hạn phạm vi cụ thể cho domain của nó.
- Ưu tiên Hợp đồng (Contract-First): Giao tiếp giữa các dịch vụ diễn ra qua gRPC (Connect) hoặc REST, không bao giờ truy cập trực tiếp vào cơ sở dữ liệu của nhau.
3. Dữ liệu riêng (Isolated Storage)
Mỗi satellite sở hữu schema cơ sở dữ liệu riêng.
- Không chia sẻ bảng: Không satellite nào được phép đọc hoặc ghi vào cơ sở dữ liệu của satellite khác.
- Tự chủ Migration: Các satellite tự quản lý Drizzle migrations, cho phép chúng phát triển mô hình dữ liệu theo nhịp độ riêng.
🔗 Tích hợp với Shell
Nếu các satellite là độc lập, thì Shell đóng vai trò là "chất keo" gắn kết chúng thành một trải nghiệm doanh nghiệp duy nhất:
- Trung tâm Định danh: Shell xử lý xác thực Keycloak và phát sóng JWT ký RSA đến tất cả các satellite.
- Danh mục Ứng dụng: Một danh bạ động cho Shell biết satellite nào đang khả dụng và điểm truy cập của chúng ở đâu.
- Điều hướng & Layout: Header, sidebar và menu người dùng tiêu chuẩn giúp 50 satellite độc lập có cảm giác như một ứng dụng thống nhất.
- Audit Tổng thể: Một dịch vụ tập trung nơi các satellite báo cáo các sự kiện nghiệp vụ quan trọng.
🚀 So sánh: Monolith vs. SCS
| Đặc tính | Monolith Truyền thống | VENI-AI (SCS) |
|---|---|---|
| Triển khai | "Big Bang" (Tất cả hoặc không) | Từng phần (Từng dịch vụ) |
| Cơ sở dữ liệu | DB chia sẻ khổng lồ | Cô lập theo từng module |
| Giao diện (UI) | Template gắn kết chặt chẽ | Micro-frontends liên hợp |
| Tốc độ đội ngũ | Bị chặn bởi phụ thuộc chéo | Làm việc độc lập song song |
| Tác động lỗi | Ngừng hoạt động toàn cục | Giảm cấp dịch vụ cục bộ |
🛠️ Tiêu chuẩn Triển khai
Khi xây dựng một SCS mới trên VENI-AI, chúng tôi tuân thủ các công nghệ sau:
- Backend: Ignis v2 Framework (Bun/Hono)
- Database: PostgreSQL với Drizzle ORM
- Frontend: React + Vite + Tailwind CSS
- Giao tiếp: Module Federation (UI) & Connect RPC (gRPC)