Ask me anything
Ithy Logo
Sign in to save

強化Service Flow的系統架構設計與實施建議

完善兩階段操作與代理配置管理,提升系統穩定性與擴展性

service flow architecture

三大關鍵要點

  • 雙階段命令流程:確保更高的操作控制與錯誤處理能力,提升系統可靠性。
  • 代理配置層級管理:整合多個自訂流程配置,增強系統的可擴展性與管理便利性。
  • 軟刪除與控制命令機制:允許流程配置的安全復原,同時確保SF Engine的狀態一致性。

詳細架構建議

雙階段命令流程

實施兩階段命令流程能夠提供更嚴密的控制機制,確保所有變更在應用前都經過審核與確認。此機制包含以下步驟:

  1. 步驟#1:命令生成階段

    • 建立一個新的 custom_flow_config,並將其保存至 sf_builder_custom_flow 表中。
    • 同時生成一個相應的命令記錄,存入 agent_commands 表中,以待後續確認。
  2. 步驟#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頁面,管理員可以檢視所有待處理的命令,並選取需要確認的命令進行執行:

  1. 確認命令:管理員選取並確認命令後,系統會將命令狀態更新為 CONFIRMED。

  2. 執行轉換:經過確認的命令會觸發轉換器,將 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

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI