git部署docker容器热更新代码架构

内网集群热更新:
所谓热更新是相对于用户的热更新,用户在无感条件下达到的项目更新

业务框架

业务结构

热更新流程图

参考图:热更新流程图。

  • 用户访问:

    • 用户通过蓝色的箭头的流程进行后端服务的业务访问。在Nginx中进行权重轮询。

      1
      2
      3
      4
      5
      upstream test {
      server 10.0.10.1:80 weight=4; # A
      server 10.0.10.2:80 weight=3; # B
      server 10.0.10.3:80 weight=3; # C
      }
  • php热更新:

    • 代码更新到仓库之后,发送一条包含代码更新指令的webhook请求至hook服务中,hook服务进行解析。如图 紫色箭头①
    • 解析得到是代码更新的操作,配置Nginx代理,在轮询中去掉Master服务器。如图 紫色箭头②
    • 分析Nginx服务重启指令的日志,判断Master服务器是否已经脱离轮询。如图 紫色箭头③
    • 已经脱离,则进行代码pull操作。如图 紫色箭头④
    • pull代码完成后,反馈给hook服务器。由hook服务器配置Nginx代理,把Master服务器加入到轮询中去。如图 紫色箭头⑤
    • Hook服务将Salves(B、C)从Nginx代理轮询中一次性移除,进行同步pull。pull完毕,添加到轮询中去。
  • Docker环境热更新:
    同php热更新。

  • docker可以挂载宿主机目录,把php的工作路径设置为外部挂载路径,php代码的修改就不需要重新部署docker的环境的。所以,每次同步代码的时候只需要把代码同步到宿主机的目录上,就可以实现代码的更新。

  • 其他关于数据库的部署,单独部署到一台服务器。最好也做主从同步,Master只写,Salves只读,这样可以减轻单台服务器或者共享服务器的服务器压力。合理控制到主从同步时间,就不会出现数据不显示问题。
  • 关于轮询,用ip_hash保持同一用户的请求可以始终落在同一台服务器上。
  • Redis,如果服务器的配置不高就用apc加速。配置可以,可以在每台服务器上安装redis。redis需求很大就需要在集群内网专门配置一台以上的redis服务器。具体还看服务器配置如何。

推荐文章