docker 如何解决上线对用户的影响

docker大家如何解决代码上线
目前我的服务器架构
目前每台服务器一个docker,全部用80和443端口
线上使用docker容器,每次更新版本都需要先stop旧容器然后再run新容器,中间会影响线上几秒钟,大家是如何解决这个问题的?如何让用户无感知?如何平滑过渡?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

哈哈,可以参考 Bule/Green 的解决方案。

location / {
    proxy_pass http://Bule:9000;
}

location / {
    proxy_pass http://Green:9000;
}

service nginx reload

一个基于 Nginx 的蓝绿思路,切流量的做法比较粗糙。

6个月前 评论
Icy 6个月前
白纸 (楼主) 6个月前
lxping (作者) 6个月前
Wi1dcard 6个月前
白纸 (楼主) 6个月前
lxping (作者) 6个月前
lxping (作者) 6个月前
讨论数量: 12

k8s scale. 平滑扩展

6个月前 评论

@蜗牛 有没成本小一点的方案,一个小团队

6个月前 评论

公司项目用的jenkis + rancher 我觉得方便是方便,确实也挺大了,同蹲一个

6个月前 评论
piupiu

3台机,刚好可以做 Docker Swarm,允许挂一台

6个月前 评论

@piupiu :smile:假设我只有2台呢,哈哈

6个月前 评论
piupiu

@白纸 可以做,就是 manager 节点挂了就 gg 了 :satisfied:

6个月前 评论

哈哈,可以参考 Bule/Green 的解决方案。

location / {
    proxy_pass http://Bule:9000;
}

location / {
    proxy_pass http://Green:9000;
}

service nginx reload

一个基于 Nginx 的蓝绿思路,切流量的做法比较粗糙。

6个月前 评论
Icy 6个月前
白纸 (楼主) 6个月前
lxping (作者) 6个月前
Wi1dcard 6个月前
白纸 (楼主) 6个月前
lxping (作者) 6个月前
lxping (作者) 6个月前

docker swarm 滚动更新

6个月前 评论

利用 HAProxy 配置好 Healthcheck,Down 之后自动把流量导到其他容器。不过这个方案是「被动」的,需要等待 HAProxy 的 Healthcheck 检测,做不到理论上的无感知(其实可以把 Healthcheck 的 Interval 配置到很小,比如几百毫秒)。

像 Docker Swarm,Kubernetes,包括 Rancher 之类的方案都是「主动」的,由一个「管理者」控制滚动更新,大致流程抽象如下:

  1. 「管理者」通知入口,把某台机器(容器)从反向代理撤下。
  2. 「管理者」修改容器配置,升级版本,随后重启。
  3. 「管理者」将该容器加入到反向代理内。
  4. 重复以上步骤直到所有容器保持最新版本。

可以看出,整个过程需要有「管理者」角色存在,且由它主导。所以复杂度是避免不了的。

最后,说说我自己的看法:

我个人更倾向于老派的 Nginx 和虚拟机的部署方式,可以通过 Linux 软链接实现快速切换线上版本;或者使用带有「管理」和「编排」功能的系统,例如 Kubernetes 是更优解。利用被动探测实现故障切换的机制更适用于「管理者」出现故障、无法恢复时的一个保底选项(比如配置多地域多集群时,某个集群整体宕机,Amazon Route53 Failover 切到 Disaster Recovery Backup)。希望你,以及其它团队不要走入误区,为了容器而容器 —— 放弃了稳定可靠的技术,却又没有足够的时间研究真正能够消灭问题的解决方案。

6个月前 评论

@Wi1dcard 感谢你码那么多字,我个人觉得应该抱着拥抱新技术的心态,花足够的时间研究真正能够消灭问题的解决方案.

6个月前 评论
Wi1dcard 6个月前

继续看看有没更好的答案

6个月前 评论

@白纸 没有了,@Wi1dcard 的方案就是了。

6个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!