2011-07-19 30 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守护进程本身中的任何内容。