Architecture

Ordo 整體架構

Studio 是可視化工作台,Platform 是控制面,ordo-server 是執行引擎。三層透過 NATS JetStream 做規則同步,PostgreSQL 保存全部控制面狀態。

系統層級概覽

基於 compose.yml 的真實部署拓撲

UI
Studio
:3002 · Vue 3 · @xyflow
Flow EditorDecision TableTraceTemplates
Vite /api proxy
CP
ordo-platform
:3001 · Rust · Axum · SQLx
Org/RBACReleasesServer RegistryTemplates
BG
platform-worker
internal · Rust · Tokio
Release TasksRule SyncNotifications
PG
PostgreSQL
:5432 · ordo_platform DB
OrgsReleasesApprovalsSnapshots
MQ
NATS JetStream
:4222 · ordo.rules.*
RegistrationHeartbeatRule SyncEvents
/engine proxy · NATS rule sync
JIT
ordo-server
:8080 · Rust · Cranelift JIT · Axum + tonic
HTTPgRPCWASMCLI50-80ns JIT54k QPS

元件詳解

ST
Studio
:3002
Vue 3 · @xyflow/react · Vite

可視化規則編輯器。拖拽式流程圖、決策表編輯、模板實例化、執行追蹤與測試。所有 API 請求透過 Vite proxy 轉發到 ordo-platform。

Flow 編輯器(xyflow)決策表編輯器執行 Trace 除錯模板市場版本歷史
OR
ordo-platform
:3001
Rust · Axum · SQLx · NATS

控制面。管理組織、專案、成員、RBAC、模板、Fact Catalog、契約、發布單與 Server 註冊表。透過 NATS 訂閱 Server 心跳,維護即時註冊表。

Org / Project / RBACFact Catalog & ContractsRelease CenterServer RegistryGitHub OAuth
PL
platform-worker
internal
Rust · Tokio · NATS

後台非同步工作程序。處理發布執行任務、規則同步排程、通知推送等耗時操作,與主程序共享資料庫但獨立運行。

發布任務執行規則同步排程實例狀態輪詢通知推送
OR
ordo-server
:8080
Rust · Axum · Cranelift JIT · gRPC

規則執行引擎。支援 HTTP / gRPC / WASM / CLI 四種接入方式。JIT 編譯(Cranelift)執行延遲 50-80 ns,解譯器 1.63 µs,HTTP 單線程 54k QPS。啟動後自動向 Platform 註冊並透過 NATS 持續發送心跳。

Cranelift JIT 編譯器HTTP + gRPC + WASM多租戶隔離WAL 崩潰恢復NATS 熱重載
NA
NATS JetStream
:4222
NATS 2.10 · JetStream

控制面訊息匯流排。承載 Server 註冊(ordo.rules.*)、心跳、規則內容同步事件。Platform 和 ordo-server 均訂閱此匯流排,實現解耦的節點發現與規則推送。

節點註冊與心跳規則內容同步控制事件廣播JetStream 持久化
PO
PostgreSQL
:5432
PostgreSQL 16 · SQLx migrations

控制面唯一持久化儲存(ordo_platform 資料庫)。保存組織、專案、角色、Fact、契約、發布單、審批記錄、Server 元資料與規則快照。

組織 / 專案 / 角色發布單與審批記錄Server 元資料規則版本快照自動遷移 (sqlx)
Flow

請求執行路徑

Studio → Platform → ordo-server 的完整請求鏈路

flowchart LR classDef studio fill:#fdf3ea,stroke:#D4874D,color:#2D2A26 classDef platform fill:#f5f0eb,stroke:#7C6B5A,color:#2D2A26 classDef engine fill:#ecf5f1,stroke:#4A9E6B,color:#2D2A26 classDef infra fill:#f0ebe3,stroke:#9C9590,color:#2D2A26 Studio["Studio :3002\n(Vue 3 + xyflow)"]:::studio Platform["ordo-platform :3001\n(Rust · Axum)"]:::platform Worker["platform-worker\n(Rust · Tokio)"]:::platform Server["ordo-server :8080\n(Rust · Cranelift JIT)"]:::engine NATS[("NATS JetStream\n:4222")]:::infra PG[("PostgreSQL\nordo_platform")]:::infra Client(["Client\nHTTP / gRPC / WASM"]):::infra Studio -->|"Vite /api proxy"| Platform Platform -->|"/engine proxy"| Server Server -->|"register + heartbeat"| Platform Platform <-->|"ordo.rules.*\nrule sync / events"| NATS Server <-->|"subscribe rule updates"| NATS Platform --> PG Worker --> PG Worker <-->|"consume tasks"| NATS Client -->|"execute rules"| Server
Release

發布與審批路徑

規則發布不是單次按鈕,而是一個完整的治理流程

sequenceDiagram actor U as 使用者 (Studio) participant P as ordo-platform participant W as platform-worker participant N as NATS JetStream participant S as ordo-server U->>P: 建立發布單 (POST /releases) P->>P: 校驗規則版本 + 建立審批流 P-->>U: 待審批狀態 U->>P: 審批通過 (PATCH /releases/:id/approve) P->>W: 入隊執行任務 W->>N: 發布規則同步事件 (ordo.rules.sync) N->>S: 推送規則更新 S->>S: 熱載入新規則版本 S->>P: 回報實例狀態 + 心跳 P-->>U: 發布完成

掌控你的決策邏輯。

不要讓業務規則散落在程式碼庫和試算表裡。Ordo 讓團隊在同一個地方編寫、測試、治理它們。已在 GitHub 開源。