ThingWorx Flow > ThingWorx Flow 安裝與管理 > 管理 ThingWorx Flow > 調整與擴充 ThingWorx Flow Engine
調整與擴充 ThingWorx Flow Engine
ThingWorx Flow Engine 服務包含一些組態選項,可對 ThingWorx Flow 的效能及其工作流程的執行造成特別大的影響。您可在引擎模組的 deploymentConfig.json 檔案中找到這些選項。如果其中的任何組態選項發生變更,則必須使用適用於您作業系統的原生服務控制工具 (適用於 Windows 的服務或 sc,適用於 Red Hat 的 sysctl) 重新啟動 ThingWorxFlow 服務。接下來的內容說明每個相關設定,並提供有關如何根據您的環境與系統資源進行配置的建議。
執行傳輸量 (CHANNEL_MAX_FETCH)
類型 - 整數
預設 - 10
單位 - 總訊息數
可控制 Engine 服務將處理的工作流程執行訊息數上限。每當執行「工作流程」服務 (包括手動執行或使用觸發器的獨立工作流程) 時,ThingWorx Foundation 都會傳輸這些訊息。降低此數將限制 Engine 可以同時執行的工作流程數。
開發環境應將此值配置為與您系統的核心數相符。生產系統應根據在相同電腦執行的其他服務數,將此值配置為介於核心數的 50% 到 200% 之間。
Worker 記憶體分配 (ENGINE_SIZE)
類型 - 整數
預設 - 1802
單位 - MB (10242 個位元組)
這表示 Engine Worker 流程可以為物件配置的記憶體量上限 (以 MB 為單位)。配置此值時,應考慮下列因素:
工作流程中的活動數
內嵌運算式或 Node.js 動作的複雜度
每個動作擷取或處理的資料量
部署建議 - 建議在開發環境中將該值保留為預設。對於生產環境,您應將 ENGINE_SIZE 配置為約等於系統 RAM 量上限除以用於 CHANNEL_MAX_FETCH 的設定。
最大執行時間 (MAX_FLOW_RUN_TIME)
類型 - 整數
預設 - 300000
單位 - 毫秒
可控制允許工作流程在每次執行時,以毫秒為單位的執行時間總數。此設定將阻止 Engine Worker 執行工作流程過長的一段時間。這個值將根據部署及所在網路環境而有所不同;但是,建議您將其保留為較低值,以免 Worker 長時間保持在無法使用的狀態,因為這可能會造成 Flow 的整體效能降低。在提供足夠的時間讓工作流程完成執行,以及保持足夠低的值以便讓 Engine Worker 盡快變為可用之間,您必須保持適當的平衡。
部署建議 - 建議針對開發環境將該值保留為預設,或者根據偵錯目的的需要,設定為較長的值。針對生產環境,建議將此值設定為您最長的執行工作流程長度加上 15%。
Worker 復原期間 (SLEEP_BETWEEN_FLOW_EXECUTION)
類型 - 整數
預設 - 3000
單位 - 毫秒
可在 Engine Worker 能夠執行工作流程之前,插入其他以毫秒為單位的延遲。這主要是用來允許作業系統重新取得已經取消的 Engine Worker 記憶體,進而允許不需要在工作流程執行之間共用記憶體空間便可提高環境安全性。
部署建議 - 針對開發與大多數生產環境,建議將此值設定為 0。針對擁有無法混合之敏感資訊的多用戶環境,建議將此值保留為預設,或根據需要予以增加。所有值都無法保證作業系統已正確回收記憶體。
在 Flow 執行之後結束 Engine Worker (KILL_WORKER_AFTER_RUN)
類型 - 布林值
預設 - false
當執行工作流程時,Engine 服務會建立 Worker 流程來處理工作流程的實際執行 (取決於 CHANNEL_MAX_FETCH 設定的值)。依預設,Worker 流程會保持使用中狀態來為其他執行請求提供服務。此設定可修改該行為,讓 Worker 流程在工作流程執行完成後立即終止。
部署建議 - 針對開發與大多數生產環境,建議將此值保留為預設。針對擁有無法混合之敏感資訊的多用戶環境,建議將此值設定為 true。
Worker 可用性重試次數 (AVAILABLE_WORKER_CHECK_TRIES)
類型 - 整數
預設 - 10
單位 - 重試次數
如果所有 Worker 流程目前都在使用中,但工作流程請求為待處理,Engine 服務將會繼續嘗試保留 Worker 流程配置的次數。如果嘗試次數達到重試次數上限,Engine 的執行請求將會失敗。
部署建議 - 基於開發的目的,將此值保留為預設便已足夠。針對生產環境,建議將此值設定為合理的值;與 AVAILABLE_WORKER_CHECK_INTERVAL 設定搭配使用時,您不會想讓總延遲超過約一半的總請求服務時間。
Worker 可用性重試延遲 (AVAILABLE_WORKER_CHECK_INTERVAL)
類型 - 整數
預設 - 3000
單位 - 毫秒
可在假設第一次嘗試失敗的情況下,決定 Engine 服務在嘗試保留工作流程執行的 Worker 流程之前等待的時間。
部署建議 - 基於開發的目的,將此值保留為預設便已足夠。針對生產環境,建議將此值設定為合理的值;與 AVAILABLE_WORKER_CHECK_TRIES 設定搭配使用時,您不會想讓總延遲超過約一半的總請求服務時間。
Worker 流程減速延遲 (WORKER_DISMISS_INTERVAL)
類型 - 整數
預設 - 1800
單位 - 秒
指定 Engine 服務在開始終止 Worker 流程之前,等待其他工作的時間。如果將 KILL_WORKER_AFTER_RUN 設定為 true,則此值沒有任何意義。
部署建議 - 在內部部署環境中,通常將此值保留為預設便已足夠。針對雲端部署或記憶體受限制的環境,可能需要降低此值,在只會偶爾使用工作流程的情況下尤其如此。
引擎組態範例
引擎 deploymentConfig.json 檔案範例如下所示:
{
"MAX_FLOW_RUN_TIME": 180000, // Only allows a workflow to run for up to 3 minutes.
"EXCHANGE_STATUS_CHECK_INTERVAL": 120000, // Checks if it can communicate with the Exchange service every 2 minutes.
"REFRESH_ON_INTERVAL_MINUTES": 60,
"ENGINE_PORT": 2006, // The port Engine will reserve for health check purposes
"ENGINE_HOST": "localhost", // The hostname Engine will reserve the port against
"SLEEP_BETWEEN_FLOW_EXECUTION": 3000, // Waits 3 seconds before a worker can execute the next workflow
"ENGINE_DATA_PATH": "C:/ThingWorxOrchestration/modules/cache", // Location where files are stored during workflow execution
"EXCHANGE": { // The host and port for the Exchange service that this Engine should communicate with
"HOST": "localhost",
"PORT": "7822"
},
"logLevel":"error", // valid levels are 'trace', 'debug', 'info', 'warn', and 'error'; default is 'error'
"QUEUE": {
"MAX_SOCKET": 100,
"QUEUE_CONSUMPTION_UNIT": {
"256": 1
},
"DEFAULT_FLOW_QUEUE": "256",
"ACTIVE_ADAPTER_DEFAULT": "amqp",
"ACTIVE_ADAPTER_FLOW": "amqp",
"ACTIVE_ADAPTER_STOP": "amqp",
"ACTIVE_ADAPTER_WEBHOOK": "amqp",
"ADAPTERS": {
"AMQP": {
"CONFIG": { // The host and port for the RabbitMQ server
"port": "5672",
"protocol": "amqp",
"host": "localhost",
"vhost": "orchestration",
"CHANNEL_MAX_FETCH": "5" // The maximum number of messages this Engine will fetch from the queue
},
"FLOW_QUEUE": {
"QUEUE_NAMES": {
"256m": "256mb"
},
"QUEUE_NAME": "256mb"
}
}
}
}
}