我有一個多線程的perl腳本執行以下操作:在外部服務器上通過文件夾結構同步項目列表,跨服務器
1)一位老闆線程搜索。對於找到的每個文件,它都會將其路徑/名稱添加到線程隊列中。如果路徑/文件已經在隊列中,或者正在被工作線程處理,則排隊被跳過。
2)十幾個工作線程從上述隊列中出列,處理這些文件並將它們從硬盤中刪除。
它運行在一臺物理服務器上,並且一切正常。
現在我想添加第二個服務器,它將與第一個服務器同時工作,搜索相同的文件夾結構,查找要排隊/處理的文件。我需要一種方法讓兩臺服務器知道每個人在做什麼,以便他們不會處理相同的文件。隊列最小,範圍從20到100個項目。該列表非常具有動態性,並且每秒都會發生多次更改。
我是否只需寫入/讀取常規文件以使其保持與當前項目列表同步?有任何想法嗎?
幸運的是,系統(Linux上的ffmpeg)似乎是「自我冪等」,因爲當兩個進程接管同一個文件時,它不會損害文件:它只是兩次相同的工作。 我非常喜歡套接字解決方案,可能偏向於我的網絡背景(我不是專業程序員)。我甚至可以看到它與UDP信令協同工作,其中一個服務器詢問是否有其他人持有下一個要入隊的文件,而不是TCP連接讀取整個列表。 無論如何,我會考慮一段時間,並報告回來,如果我得到這個工作(仍然是一個原型項目)。 –