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

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 线上服务要咋切换版本才不会影响用户?

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

8705 次点击
所在节点    程序员
52 条回复
519718366
2021-03-05 16:45:11 +08:00
阿里云 有个 云效,里面有个流水线可以帮你解决人肉发布…

前面挂个阿里云的 负载均衡服务,经典型就行。

感觉应该够你用了,不需要对你应用进行容器化。
coderxy
2021-03-05 17:00:58 +08:00
k8s
chenqh
2021-03-05 17:02:51 +08:00
@zhuweiyou 不修改 nginx upstream,直接重启服务会有什么坏的结果?
zhuweiyou
2021-03-05 17:09:46 +08:00
@chenqh 你的服务启动不要时间的吗, 如果这个时候有用户来, 你怎么处理
jxlwqq
2021-03-05 17:09:59 +08:00
k8s
redtea
2021-03-05 17:13:54 +08:00
有些时候停机发布更好,比如上次中币交易所热部署出事了,客户都以为他们跑路了,过了好多天才恢复,数据都回滚了,损失惨重。
chenqh
2021-03-05 17:24:01 +08:00
@zhuweiyou 明白了,难怪我总感觉没用,因为我写的是小程序,一个进程启动不需要 1S 中,难怪总感觉不需要移除那个进程
chenqh
2021-03-05 17:36:11 +08:00
@wakzz nginx upstream 修改,ansible 有什么脚本没有?
Lemeng
2021-03-05 17:39:50 +08:00
小公司控制成本嘛!运维需求
chairuosen
2021-03-05 17:41:01 +08:00
上面所有方案的前提是新旧版本可以兼容,瞬间切。如果要改数据库字段,还是停机靠谱
ward56
2021-03-05 17:54:30 +08:00
用的什么系统?我一般用 linux 操作系统
最基础的就是 pssh+superviserd+shell=你的需求轻松实现

方案一、
采用发版方法是: shell 脚本+expect 交互式+superviserd 实现。
具体:shell 脚本+expect 批量上传同步
superviserd 控制 jar 或者 tomcat 后台管理程序

方案二、可以在上述基础上改进 saltstack 或者采用 jenkins 发版。

方案三、再高级一点就是 k8s + jenkins
dailiha01sy
2021-03-05 17:55:56 +08:00
@chairuosen 数据库字段可以随便改? 一般搞了就不改的吧
C603H6r18Q1mSP9N
2021-03-05 18:08:20 +08:00
我们有套小系统,对接了阿里云负载均衡 api,设置虚拟组;自动切换,点一点就行很是方便
简单点先虚拟组 A 对外(老版本),更新虚拟 B (新版本),虚拟 B 测试确定;虚拟 B 对外,更新 A,测试确定
balckjoker
2021-03-05 19:10:17 +08:00
简单点弄个负载均衡,应该别搞太复杂,太复杂了维护也烦
gitlab runner 也很方便。
SjwNo1
2021-03-05 21:54:16 +08:00
hook build 替换 k8s 镜像源
chenqh
2021-03-05 22:49:42 +08:00
@ward56 不用 ansible+supervisord ?
chenqh
2021-03-05 22:50:10 +08:00
@dailiha01sy 加了需求总要加字段的吧
kaokao123
2021-03-06 00:15:25 +08:00
开始用 serverless 吧,只要代码提交到 github,云会自动帮你部署。部署完成后会自动切换到新代码。
young1lin
2021-03-06 00:32:04 +08:00
《 Kubernetes 微服务实战》- 吉吉·赛凡,我简单看了下目录(确实没用到这些),感觉挺适合你这种情况的。
灰度发布,金丝雀发布什么的,都有说。
sampeng
2021-03-06 01:02:10 +08:00
对小规模公司推 k8s ?我缓缓打出个…?
lz 看样子需求很小。业务规模不大,非常简单。阿里云负载均衡按道理肯定用了。本质上不停机都是围绕这个来的。要复杂可以复杂。要简单可以简单。

不是负载均衡本身能这样。要做一些工作的。我的 v0.1 版自动部署就非常简单。我的例子适用 lz 。我到这家公司的时候启动模式也是 nohup 。更新模式跟你一摸一样。
我做的第一件事是不要手动去 nohup 启动。先不考虑滚动更新。这是一件很简单的事,1-2 个工作日就改造玩完了。jenkins 一个 job 的事。
第二件事,开始考虑挂了拉起来。既然这样。我换个思路,系统启动要做到自动拉当前的 jar 包。启动。这也很简单,程序启动本来就有逻辑了。只要解决在系统启动得时候如何拉包的问题就解决了。
第三件事,滚动更新。我是 aws,研究一下负载均衡和弹性伸缩。
首先负载均衡会自动检查节点是否健康,如果不健康,摘除并且关闭节点,其次,弹性伸缩会保护一定要到一个数额。那这个问题就简单了。因为第一件和第二件事我已经做了,只要配置好了弹性伸缩和负载均衡。效果就出来了。那如何滚动更新讷?一台一台关掉就是了,关一台检查是否启动成功,再关下一台。其他都不用考虑。到此,负载均衡和弹性伸缩就都 work 了…接下来就是要解决日志的问题…

顺便说一下…我们有 80+微服务。这套逻辑跑了小半年,最后当然我可以踏踏实实的切刀 k8s 里。废话…200 多实例多浪费钱啊…

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

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

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

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

© 2021 V2EX