2011-07-19 55 views
2

我正在將一個線性處理系統轉換爲Gearman,但我實際上並沒有在生產環境中部署Gearman。版本控制員工

對於推送源代碼的新版本(Staging,Dark launch,A/B),我們有一個部署鏈,但由於Gearman工作人員與主應用程序完全分離,我們如何升級它們?

有一對夫婦的浮現在腦海中的選項,他們都不是完美的:

  1. 版本控制源代碼,正常關機環境升級
  2. 在其功能上註冊的名稱版本的工人, ResizeFunction-v1.3
  3. 將版本號添加到工作人員中,並將其附加到工作中,以便如果工作人員不應處理該工作人員,則可以退出並讓其他人處理它。

理想的情況下,我可以處理工作代碼的更新,而不用擔心老客戶端代碼中的作業會被不兼容的工作人員拿走,從而順利進行版本升級。

我想語義版本將適用於此處(v1.0.0 - Major.minor.patch,主要將打破API的兼容性,輕微增加了新的功能,和補丁修復的bug)

+0

您是否需要運行「傳統」工作人員,還是僅僅讓他們升級而不麻煩? – Wrikken

+0

我必須仍然使用舊代碼運行這些工作人員,以便他們可以處理來自'尚未升級'的服務器的作業 –

+1

嗯,這不是我已經有過的解決方案:)。但是我想給'整個gearman服務器'版本。這意味着新版本會得到一個新的守護進程和一個新的端口。任何使用新版本的人都知道新的端口號。 – Wrikken

回答

0

不幸的是在您的使用情況下,最好的辦法是版本化函數名稱,這樣您就可以處理舊功能的維護以及實現這些相同功能的新版本。你可以做的是在工作者代碼中實現一些日誌記錄並監視它,一旦傳統工作者不再在預定義的時間段內接收到作業,就知道你可以將該工作者作爲遺留代碼退役。沒有必要對gearman守護進程本身進行版本化,因爲您不會更改gearman守護進程本身中的任何內容。