Kiến trúc Nền tảng
VENI-AI là một Hệ điều hành Doanh nghiệp (Agentic Enterprise OS) được thiết kế dưới dạng liên minh của các Hệ thống Tự trị (Self-Contained Systems - SCS). Nền tảng rời bỏ kiến trúc monolithic hoặc phân tầng ngang truyền thống để hướng tới các dịch vụ tích hợp theo lát cắt dọc độc lập, được điều phối bởi một bộ khung Shell trung tâm.
1. Mô hình Shell-and-Satellite
Nền tảng được cấu trúc thành hai vai trò riêng biệt:
Shell (Bộ điều phối)
Shell là điểm tích hợp duy nhất và là "Cổng vào" cho toàn bộ nền tảng. Nó sở hữu:
- Định danh Toàn cầu: Tích hợp Keycloak và cơ chế SSO ký bằng RSA.
- Danh mục Dịch vụ (App Registry): Danh sách động các ứng dụng có sẵn.
- Điều hướng Hợp nhất: Launchpad và thanh điều hướng toàn cục.
- Quản trị Doanh nghiệp: Onboarding B2B, thanh toán và các chính sách RBAC toàn hệ thống.
Satellites (Chủ sở hữu Domain)
Satellites là các ứng dụng độc lập (ví dụ: Drive, HRM, Documents) sở hữu một domain nghiệp vụ cụ thể. Theo triết lý SCS, mỗi satellite là một stack hoàn chỉnh:
- UI Độc lập: Được tải vào Shell thông qua Module Federation lúc runtime.
- Logic Độc lập: Có API, quy tắc nghiệp vụ và các tác vụ nền riêng.
- Dữ liệu Độc lập: Có schema cơ sở dữ liệu tách biệt hoàn toàn.
2. Hệ thống Tự trị (SCS)
Khác với microservices thường chia sẻ database hoặc UI, một Satellite của VENI-AI hoàn toàn tự chủ.
group: drive-api
group: hrm-api
user.updated
user.deleted
org.updated
org.deleted
3. Kiến trúc Định danh & Xác thực
VENI-AI sử dụng mô hình Trao đổi Token Lai (Hybrid Token Exchange) để đảm bảo bảo mật mà không gây ra sự phụ thuộc chặt chẽ giữa các dịch vụ.
- Identity Hub: Người dùng xác thực với Shell (thông qua Keycloak).
- Ký RSA: Shell cấp một RS256 JWT được ký bằng khóa riêng (private key) của mình.
- Công khai JWKS: Shell công khai các khóa công khai tại
/.well-known/jwks.json. - Trao đổi tại Satellite: Khi người dùng truy cập một Satellite, Satellite API sẽ xác thực Shell JWT dựa trên JWKS và cấp một JWT riêng cho Service (Service-Scoped JWT).
- Cách ly: Tất cả các lệnh gọi API sau đó đến Satellite đều sử dụng token riêng này, đảm bảo một dịch vụ không thể giả mạo dịch vụ khác.
4. Các Mô hình Tích hợp
Module Federation (UI)
Các remote UI được tải tại thời điểm thực thi. Shell truy vấn App Registry để tìm URL remoteEntry.js của từng ứng dụng và nhúng vào không gian làm việc.
Kiến trúc Hướng sự kiện / Redis Streams (Đồng bộ dữ liệu bất đồng bộ)
Shell là nguồn dữ liệu duy nhất (single source of truth) cho user và tổ chức. Thay vì satellite gọi Shell đồng bộ, Shell publish domain event lên Platform Event Bus (Redis Streams). Mỗi SCS tiêu thụ độc lập từ consumer group của riêng mình.
Nguyên tắc SCS: Redis Streams là hạ tầng cấp nền tảng (platform-level infrastructure) — tương tự load balancer hay service mesh. Không thuộc sở hữu của Shell hay bất kỳ satellite nào. Mỗi SCS kết nối vào bus độc lập; không có dữ liệu ứng dụng hay logic nghiệp vụ nào được chia sẻ.
- Drive SCS — subscribe
shell:stream:users(lưushell_user_idcục bộ) - HRM SCS — subscribe
shell:stream:users+shell:stream:organizations(lưuref_idcục bộ)
Mỗi satellite duy trì read model cục bộ trong DB tách biệt của mình. Sau khi đã sync, không bao giờ cần gọi Shell để tra cứu dữ liệu user hay org.
→ Xem Kiến trúc Hướng sự kiện để tham khảo đầy đủ.
Connect / gRPC (Nội bộ)
Đối với giao tiếp server-to-server hiệu năng cao (ví dụ: Shell kiểm tra sức khỏe của Satellite hoặc đồng bộ quyền), nền tảng sử dụng Connect RPC (Protobuf trên nền HTTP/2).
REST & Zod (Bên ngoài)
Tất cả các API công khai đều là dịch vụ RESTful tiêu chuẩn, sử dụng Zod để thực thi hợp đồng dữ liệu nghiêm ngặt và đảm bảo an toàn kiểu (TypeScript) từ DB đến UI.
5. Framework Triển khai: Ignis v2
Mặc dù kiến trúc ở cấp độ nền tảng, chúng tôi sử dụng framework Ignis v2 để triển khai các mô hình này một cách thống nhất.
- Dependency Injection: Tách biệt logic nghiệp vụ khỏi hạ tầng.
- Base Controllers/Services: Cung cấp các pattern tiêu chuẩn cho health check, logging và xử lý lỗi.
- Drizzle ORM: Đảm bảo các bản cập nhật DB (migrations) an toàn và có kiểm soát phiên bản cho từng SCS.
Các bước tiếp theo
- Dữ liệu & Lưu trữ — Tìm hiểu cách dữ liệu SCS được quản lý.
- Định danh & Bảo mật — Tìm hiểu sâu về quá trình bắt tay RSA.
- Kiến trúc Hướng sự kiện — Redis Streams pub/sub giữa Shell và satellite.
- Tạo Remote App — Xây dựng Satellite đầu tiên của bạn.