強化Service Flow的系統架構設計與實施建議
完善兩階段操作與代理配置管理,提升系統穩定性與擴展性
三大關鍵要點
- 雙階段命令流程:確保更高的操作控制與錯誤處理能力,提升系統可靠性。
- 代理配置層級管理:整合多個自訂流程配置,增強系統的可擴展性與管理便利性。
- 軟刪除與控制命令機制:允許流程配置的安全復原,同時確保SF Engine的狀態一致性。
詳細架構建議
雙階段命令流程
實施兩階段命令流程能夠提供更嚴密的控制機制,確保所有變更在應用前都經過審核與確認。此機制包含以下步驟:
-
步驟#1:命令生成階段
- 建立一個新的
custom_flow_config,並將其保存至sf_builder_custom_flow表中。 - 同時生成一個相應的命令記錄,存入
agent_commands表中,以待後續確認。
- 建立一個新的
-
步驟#2:命令確認與執行階段
- 在SF Management頁面檢視所有待處理的命令,選取並確認執行。
- 經過確認後,利用轉換器將
custom_flow_config轉換成三個獨立的表:sf_design_config、sf_action_config、sf_appl_config。
代理配置層級管理
新增一個 agent_config 表,以管理多個 custom_flow_config,實現更高層次的流程配置管理。主要功能包括:
- 在Agent Builder畫面中,允許選擇並管理已編輯好的
custom_flow_config。 - 提供一個清單,顯示所屬的
agent_config及其所包含的所有custom_flow_config。 - 允許對個別的
custom_flow_config進行查看與編輯,確保配置的一致性與完整性。
軟刪除與控制命令機制
實施軟刪除機制,確保流程配置在刪除後仍可復原,並通過控制命令通知SF Engine進行相應的消息隊列刪除操作:
- 在
sf_builder_custom_flow表中新增is_deleted欄位,用於標記流程配置的刪除狀態。 - 在
agent_commands表中新增control_command欄位,存儲發送給SF Engine的控制命令。 - 確保在刪除流程配置時,相關的
sf_design_config、sf_action_config、sf_appl_config同時發送控制命令,以刪除對應的消息隊列主題。
建議的資料庫結構變更
新增表格
`agent_config` 表
管理多個 custom_flow_config,提供代理層級的配置管理。
CREATE TABLE `agent_config` (
`id` varchar(36) NOT NULL,
`name` varchar(100) NOT NULL,
`version` varchar(50) NOT NULL,
`description` text,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`is_deleted` tinyint(1) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
`agent_custom_flow_mapping` 表
處理 agent_config 與 custom_flow_config 之間的多對多關係。
CREATE TABLE `agent_custom_flow_mapping` (
`id` varchar(36) NOT NULL,
`agent_config_id` varchar(36) NOT NULL,
`custom_flow_id` varchar(36) NOT NULL,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
FOREIGN KEY (`agent_config_id`) REFERENCES `agent_config` (`id`),
FOREIGN KEY (`custom_flow_id`) REFERENCES `sf_builder_custom_flow` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
`agent_commands` 表
管理代理層級的命令,支援兩階段操作。
CREATE TABLE `agent_commands` (
`id` varchar(36) NOT NULL,
`agent_config_id` varchar(36) NOT NULL,
`command_type` enum('CREATE', 'UPDATE', 'DELETE') NOT NULL,
`status` enum('PENDING', 'CONFIRMED', 'EXECUTED') NOT NULL,
`control_command` json DEFAULT NULL,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
FOREIGN KEY (`agent_config_id`) REFERENCES `agent_config` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
`command_queue` 表
存儲所有待處理的命令,以支援兩階段的命令操作。
CREATE TABLE `command_queue` (
`id` varchar(36) NOT NULL,
`command_type` enum('CREATE','UPDATE','DELETE') NOT NULL,
`entity_type` enum('AGENT','CUSTOM_FLOW') NOT NULL,
`entity_id` varchar(36) NOT NULL,
`status` enum('PENDING','PROCESSING','COMPLETED','FAILED') NOT NULL DEFAULT 'PENDING',
`payload` json DEFAULT NULL,
`error_message` text,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
`executed_at` timestamp DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
`control_command` 表
用於發送控制命令給SF Engine,以管理消息隊列主題的刪除操作。
CREATE TABLE `control_command` (
`id` varchar(36) NOT NULL,
`type` enum('DELETE_TOPIC') NOT NULL,
`status` enum('PENDING','PROCESSING','COMPLETED','FAILED') NOT NULL,
`data` json DEFAULT NULL,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
`audit_log` 表
記錄所有重要操作的日誌,增強系統的可追溯性與安全性。
CREATE TABLE `audit_log` (
`id` varchar(36) NOT NULL,
`action` varchar(50) NOT NULL,
`user_id` varchar(36) NOT NULL,
`details` json DEFAULT NULL,
`timestamp` timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
修改現有表格
`sf_builder_custom_flow` 表
新增軟刪除與代理配置關聯。
ALTER TABLE `sf_builder_custom_flow`
ADD COLUMN `agent_config_id` varchar(36) DEFAULT NULL AFTER `edges_props`,
ADD COLUMN `is_deleted` tinyint(1) DEFAULT 0 AFTER `agent_config_id`,
ADD COLUMN `deleted_at` timestamp NULL DEFAULT NULL AFTER `is_deleted`,
ADD FOREIGN KEY (`agent_config_id`) REFERENCES `agent_config` (`id`);
`sf_design_config` 表
保持現有結構無需修改,因為新關聯已在其他表處理。
`sf_appl_config` 表
確保與 sf_design_config 的關聯正確。
ALTER TABLE `sf_appl_config`
ADD COLUMN `agent_config_id` varchar(36) DEFAULT NULL AFTER `sf_design_config_id`,
ADD FOREIGN KEY (`agent_config_id`) REFERENCES `agent_config` (`id`);
命令處理與執行流程
命令生成與執行
當進行新增、修改或刪除操作時,系統會先在 command_queue 表中生成一條待處理命令記錄:
- 系統會創建相應的
custom_flow_config並在sf_builder_custom_flow表中保存。 - 同時,生成一條新的命令記錄,存入
agent_commands表,標記為PENDING狀態。
命令確認與轉換
在SF Management頁面,管理員可以檢視所有待處理的命令,並選取需要確認的命令進行執行:
-
確認命令:管理員選取並確認命令後,系統會將命令狀態更新為
CONFIRMED。 -
執行轉換:經過確認的命令會觸發轉換器,將
custom_flow_config轉換成sf_design_config、sf_action_config、sf_appl_config,並存入相應的表中。
刪除處理與控制命令
當需要刪除 custom_flow_config 時,系統會進行軟刪除並生成一條刪除命令:
- 將
sf_builder_custom_flow表中的is_deleted欄位設置為1,以標記為已刪除。 - 生成一條控制命令,存入
control_command表,指示SF Engine刪除對應的消息隊列主題。
這樣可確保即使在刪除後,系統仍能保持數據的一致性與完整性,並允許後續的復原操作。
管理與用戶界面(UI/UX)建議
代理建構器增強
- 在代理建構器界面左側清單中,顯示所有相關的
custom_flow_config及其狀態(如is_deleted、版本號)。 - 提供版本審計功能,允許管理員查看歷史版本並進行回溯。
- 確保在查看模式下,
custom_flow_config不可被修改,以保持配置的一致性。
SF Management頁面優化
- 在SF Management頁面新增一個代理命令表格,顯示所有待處理的命令及其狀態。
- 提供篩選功能,允許管理員根據命令狀態(如
PENDING、CONFIRMED)篩選命令。 - 提供批量操作功能,允許一次確認多個命令,提升管理效率。
用戶體驗(UX)改進
- 在命令生成與確認過程中,提供明確的操作反饋,確保用戶了解當前系統狀態。
- 實現操作日誌查看功能,方便用戶追蹤歷史操作與變更。
- 設計友好的錯誤處理機制,提供清晰的錯誤訊息,協助用戶快速解決問題。
擴展性與效能考量
資料庫效能優化
- 為常用查詢欄位建立索引,如
agent_config_id、custom_flow_id等,以提升查詢效率。 - 實施快取機制,對頻繁訪問的配置數據進行快取,減少資料庫讀取壓力。
系統擴展性
- 設計代理配置層級時,考慮未來擴展需求,確保系統能夠輕鬆地新增更多代理與流程配置。
- 使用模組化設計,將不同功能模組獨立管理,減少各模組間的耦合度,提升系統的靈活性與可維護性。
安全性與一致性
-
實施權限控制,確保只有授權用戶才能進行配置變更與命令操作。
-
使用事務機制,確保兩階段操作的一致性,防止部分操作失敗導致數據不一致。
-
定期清理已完成或失敗的命令與控制命令,保持資料庫的整潔與高效運行。
結論
通過實施雙階段命令流程、代理配置層級管理,以及軟刪除與控制命令機制,您的Service Flow系統將在控制精細度、管理效率與系統擴展性上獲得顯著提升。此外,結合資料庫效能優化與安全性措施,將確保系統的穩定運行與數據一致性。這些改進不僅滿足當前的需求,也為未來的擴展與維護奠定堅實基礎。
參考資料
Last updated January 23, 2025