发布的过程中要求对业务无影响,也就是用户无感,如何才能做到这一点呢,其实上需要多个环境协同才能完成,首先在入口层(SLB|API网关)这一层做关联自动摘除|上线动作(这个实现谢军后面我们会有讲到), 再则在发布的时候每次操作都确保在整个操作的过程(编译后的包或代码分发)中对当前正在运行的服务不会受影响,接下来就是那些通过注册中心进行服务发现的服务调用时候的健康检测以及重试机制的配合,这些点每个拎出来都能聊上许久,今天我们来聊聊发布真正生效之前所做工作的实现。
•远程机器上有专门运行服务的账号切记不要用root跑业务,切记,切记
•上面所说的账号对服务运行的目录要有权限
•所有服务都是以软链的方式实现,为了减少应用新旧版本之间的切换时间•远程机器上默认保留3次发布版本,目的是为了实现秒级回滚操作•远程机器上应用的目录结构如下图所示
•首先生成时间戳并注册,后续会用到•等待编译后的代码或包传输完毕之后,这个时候可以校验md5
,然后切换软链,可以根据服务决定是否要进行服务reload
的动作。
部署过程中真正的做到用户无感要考虑的边界很多很多,另外一个层面就是研发侧的使用方式也有很大因素,为什么要如此说,我们简单的举个例子:
某业务线,只暴露了自己业务线的gateway
服务,作为跨语言服务的http
方式调用,业务线内部全部走服务发现机制,如果这个时候gateway
通过服务发现机制调用自己的服务,没有开启重试机制,那发布对生产的业务来说真的是灾难,不要笑说为啥这么傻逼,重试都不开启,真实的世界中,你会发现太多太多那个啥的问题。