n8n 主從架構,解放n8n效能,進行更多任務

n8n 主從架構,解放n8n效能,進行更多任務

n8n 有提供主從架構,讓多個 n8n 程式一起為你工作。

他們會懂得調派任務。
比如你把任務給主管,主管收到任務,就會把任務分配給底下的員工。而你身為老闆的你,只要面對主管。
這主管就是 Master, 員工就是 Slave (奴隸,真貼切)

透過多個程式,讓效率大幅提高。同時間能進行的任務更多。

那實際怎麼做呢?

設定 N8N_ENCRYPTION_KEY

這是用來加密資料庫資料的密鑰,在原本單一 n8n ,不是那麼需要,啟動時就會幫你建立。

會存在 .n8n/config 中,長得就像這樣

{
	"encryptionKey": "cjw5GKuWL6eoqaC0MOnHdBNWOfxAzXsn"
}

今天你要跑多個 n8n ,每個 n8n 都要讀資料庫,那些加密的資料就需要同樣的 encryptionKey 才能讀取。

所以需要直接在環境變數中直接設定 N8N_ENCRYPTION_KEY ,讓每個 n8n 程式,都用相同的 encryptionKey。

像是 N8N_ENCRYPTION_KEY=cjw5GKuWL6eoqaC0MOnHdBNWOfxAzXsn

設定相同的 PostgreSQL DB

這沒什麼好說的

你會需要設定 6 個 環境變數,用於指定 PostgreSQL DB

DB_POSTGRESDB_DATABASE
DB_POSTGRESDB_HOST
DB_POSTGRESDB_PASSWORD
DB_POSTGRESDB_PORT
DB_POSTGRESDB_USER
DB_TYPE

設定執行模式 Queue

原本執行任務的模式是 regular ,就是常規的意思。

但今天你要用主從架構,會要改用 Queue ,任務要先排隊,等待被指派給哪個 n8n 。

所以要設定 EXECUTIONS_MODE=queue

設定 Redis 作為 Queue 存放的地方

你可以想像,任務一疊放在桌上,工人從桌上的任務,從上面一張一張的拿。這桌子就是 Redis 。

和 Postgre SQL 一樣要設定主機、PORT、密碼

QUEUE_BULL_REDIS_HOST
QUEUE_BULL_REDIS_PASSWORD
QUEUE_BULL_REDIS_PORT

執行 n8n 程式

以上全部設定完了,就是執行 n8n

啟動 main

main 程式,就是你可登進去 Web 的,和之前一樣 n8n 就可以啟動。
main 會同時擔任 master 和 slave ,主管跳下來和員工一起工作。

如果希望主管別那麼累,可以增加 N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true ,讓 main n8n 不接收 webhook 。

n8n

啟動 worker

對於 worker 程式,他只會在背後默默等待任務

concurrency 是一次最多能攬下幾件任務做,至於是不是能同時做,取決於使用的機器。

n8n worker --concurrency=10 # 預設就是 10

啟動 webhook (option)

如果你把 main 的 N8N_DISABLE_PRODUCTION_MAIN_PROCESS 打開的話。就不能收 webhook

那可能就需要有 n8n 專門收 webhook。

n8n webhook

效能比較 Latency

以下全部都是在 Zeabur 的 Japan Tokey 地區進行測試,使用 JMeter 進行壓力測試。 100 threads * 30 次 Request。

其中 Code Node 只回傳一個 0~100 隨機數。

Webhook When Last Node Finishes :等待最後一個節點的結束,並回傳最後一個節點結果。

方式AverageMedian90% LineReceived KB/secSend KB/sec
1.main + worker3586357440798.5850059913.547030892
2.沒有 worker5876580262945.2767037632.196450152
3.concurrency = 203235324634419.5237969383.964394452
4.main + 2 個 worker 24192317267212.679518295.277864604
5.main+worker+webhook17271754186818.57257227.3312785

Webhook Immediately :被調用即刻返回 {"message":"Workflow was started"}

方式AverageMedian90% LineReceived KB/secSend KB/sec
1.main + worker15121569162921.150745698.225289992
2.沒有 worker5349568962536.0584902952.373794443
3.concurrency = 2016511708181119.382012287.594121772
4.main + 2 個 worker 15701598169920.653291398.09222528
5.main+worker+webhook16431674181219.58201827.729744024

可以看到,會 care response ,一次3000個 request,可以看到 沒有 worker 真的有顯著差異。
增加 worker 會有明顯的提升效率,設定 concurrency 則不太明顯。
並且使用 webhook 的 n8n ,有更顯著提升效能。(這也是官方推薦的)

但官方並不推薦無腦增加 worker ,而是優先提高 concurrency ,避免 PostgreSQL 連線數過多。

如果不 care response,另我超意外的是,沒有 worker 的情況,都已經直接回傳 response 效能還那麼差。
其他方法則沒有顯著提升,畢竟 webhook node 處理完就返回了,但背後其實還在繼續執行任務。

即刻使用

看得霧傻傻嗎?現在 Zeabur 上已經有人,把 main + 1 worker 做成公開模板,可以立刻使用。

Read more

n8n怎麼做防抖debounce?

n8n怎麼做防抖debounce?

防抖 debounce, 是程式設計重要的概念之一。 用意是短時間有多個訊息進來,只處理一次。 處理哪一次呢?只處理最後一次。 就比如,有人點擊習慣什麼都按兩下, 你就要每次都處理兩次嗎? 又比如,你做 Line 機器人。講一句回一句。 那如果使用者一次傳好幾句呢? 像是打錯字,習慣的修正,再送一次。或是使用者分段講完。 你要跑一次一起處理,還是跑多次? 現在你知道使用情境了,那在 n8n 怎麼做呢? 就比如 Line 訊息好了,你其實可以把Webhook 來的訊息存到 db 裡。 另外做一個 短時間(ex:10s) 就跑一次的 schedule, 去檢查新訊息,並休息一下(ex:5s)。再檢查新訊息。 如果兩次新訊息,筆數都一樣,就表示沒有新訊息進來了。就可以開始處理。 最後再把新訊息標記成舊訊息。 讓

By Mason Tang
n8n 做個計數器,保存變數到下一次執行

n8n 做個計數器,保存變數到下一次執行

n8n 可能有人會好奇,怎麼做計數器,例如一天只能使用 200次。 但是 Node 裡,似乎沒看到這功能。 但其實這功能就藏在 Code 裡 獲取靜態資料 其實這功能就藏在 $getWorkflowStaticData 使用這個函數,拿到的物件,其實是能持久化的,即使 n8n 關掉再開,資料也還在。 整個 n8n 共用這變數 使用 $getWorkflowStaticData('global') 這邊可以看到,這個 count 已經被使用 9 次了,並且在其他 Code 也可以獲得這個 count 單一 Node 使用,不能跨 Node 使用 使用 $getWorkflowStaticData('node&

By Mason Tang
n8n 教學,匯出/匯入所有憑證,輕鬆搞定 n8n 搬家

n8n 教學,匯出/匯入所有憑證,輕鬆搞定 n8n 搬家

上次介紹了如何在 Zeabur, Docker, Node.js 部署自動化工具 n8n。 n8n教學-搭建自動化工具 n8n 的三個方案近幾年隨著 AI 發展,AI Agent 和自動化也成為企業轉型和提升效率的重要工具。這些技術不僅能夠處理大量的數據分析,還能自動完成重複性高、耗時的任務,讓員工能夠專注於更具創造性和戰略性的工作。 今天就教你,搭建自動化工具 n8n 的三個方案。 三種搭建n8n的方案 1. 使用 Zeabur 的 Saas 服務 2. 使用 Docker 部署在自家機器上 3. 使用 Node.js 直接啟動在自家機器上 使用 Zeabur 的 Saas 服務 這我也是看雷蒙才知道有 Zeabur 這平台,的確是新手很適合的入門。也推薦給大家使用 優點:

By Mason Tang
n8n教學-搭建自動化工具 n8n 的三個方案

n8n教學-搭建自動化工具 n8n 的三個方案

近幾年隨著 AI 發展,AI Agent 和自動化也成為企業轉型和提升效率的重要工具。這些技術不僅能夠處理大量的數據分析,還能自動完成重複性高、耗時的任務,讓員工能夠專注於更具創造性和戰略性的工作。 今天就教你,搭建自動化工具 n8n 的三個方案。 三種搭建n8n的方案 1. 使用 Zeabur 的 Saas 服務 2. 使用 Docker 部署在自家機器上 3. 使用 Node.js 直接啟動在自家機器上 使用 Zeabur 的 Saas 服務 這我也是看雷蒙才知道有 Zeabur 這平台,的確是新手很適合的入門。也推薦給大家使用 優點:新手友善,0 基礎上手。以足矣面對 80% 的使用者需求。 缺點:更改設定麻煩,會遇到平台賦予的限制。

By Mason Tang