请教下大佬, 小公司怎么不停机更新服务,更舒服地部署(不用熬夜)

2021-03-05 15:10:48 +08:00
 wuzhizuiguo

我们现在用的还是 在阿里云, 复制粘贴 tomcat ( war 包),nohup 启动 jar,用的是 spring cloud,多台服务器起多个同服务。 用户每天活跃也有一定量了。 遇到更新时,我们只能粗暴的选择人少的时候更新。一般是夜间。。很累。

论坛里也看了些帖子,https://www.v2ex.com/t/705776 像某宝、狗东这样的网站怎么发布(更新)项目的; https://www.v2ex.com/t/694561 线上服务要咋切换版本才不会影响用户?

(没有用过,感觉很高端..我们很多东西都没有) 想请教下大佬,我们这种 /类似的 该怎么做

8707 次点击
所在节点    程序员
52 条回复
xuanbg
2021-03-06 07:57:29 +08:00
jenkins 一个 job 里面,先 build 好镜像推送到仓库,然后挨个通过 ssh 执行 docker run 。控制好时间间隔,保证在前一个服务可用后再去更新下一个就行了。还 k8s 、负载均衡,搞辣么复杂做咩?
rootmaster
2021-03-06 09:12:20 +08:00
Jenkins 自由风格啊
calmzhu
2021-03-06 10:10:10 +08:00
蓝绿部署或者滚动发布。

但是重点不在部署。部署完成后配套的可靠的自动化测试以及有效的心跳检测才是上面方案有效的关键。
bfme
2021-03-06 10:28:40 +08:00
问一下楼上说用阿里云负载均衡,不停机,滚动部署的,怎么做版本测试?会不会影响正常用户的使用?
baoshuai33
2021-03-06 11:13:06 +08:00
@xarthur 运维也问怎么做,运维默认会这个吗
notejava
2021-03-06 13:50:28 +08:00
nginx 切流量
wakzz
2021-03-06 14:26:09 +08:00
@chenqh 我们公司的 ansible 脚本是自己写的,没有开源
chenqh
2021-03-06 14:29:31 +08:00
@wakzz 不开心
wakzz
2021-03-06 14:29:35 +08:00
我以前还调研了另一种适合小公司的部署方案,如下图所示
wakzz
2021-03-06 14:32:31 +08:00
我以前还调研了另一种适合小公司的部署方案,如下图所示

https://img.wakzz.cn/202102/pQ8yeTK2if.png

用开源框架 Kong 网关替代 Nginx(Kong 就是对 Nginx 做了一层封装),然后自行代码开发实现一个节点监听服务,通过对接注册中心的 API 来实时监听各个服务节点的状态。当某服务节点上下线后,注册中心将节点上下线事件推送给监听服务,然后监听服务通过 Kong 的开放 API 修改 Kong 中的 upstream 。

通过上述方案从而实现一个注册中心同时管理微服务之间的服务发现和网关到服务的服务发现。此时应用发布流程例如对某服务的 a 、b 两节点发版时具体逻辑如下:
1. 请求注册中心下线该服务的 a 节点
2. 监听服务监听到 a 节点下线后自动将 Kong 中的 a 节点下线
3. 等待 a 节点无流量请求后发布重启 a 节点的新版本,等待策略简单方案就是等待 1 分钟,复杂点就是监控带宽
4. a 节点启动成功后自动将自己重新注册到注册中心
5. 监听服务监听到 a 节点上线后自动将 Kong 中的 a 节点上线
6. 接着同样的逻辑操作 b 节点
ward56
2021-03-08 08:39:28 +08:00
@chenqh 各人习惯,我不太精通 ansible,所以未写。
tq0fqeu
2021-03-19 16:09:23 +08:00
阿里云云效有个主机分批发布的功能可能对你有帮助 https://thoughts.aliyun.com/sharespace/5e86a419546fd9001aee81f2/docs/5e86a416546fd9001aee81b8#5e847eca0aba01ecdbc57cd2

不过摘流量的逻辑肯定要在你应用启动脚本里定制的,除非你用 k8..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/758816

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX