线上服务要咋切换版本才不会影响用户?

2020-07-31 10:58:29 +08:00
 x97bgt

有若服务,每个服务都有集群,直接相互配合才能提供对外服务。假设若干服务要一起升级新版本,要咋起部署才能平滑升级,不影响线上?

面试时遇到的问题,没答出来。。。

8138 次点击
所在节点    程序员
52 条回复
zhangdashuan
2020-07-31 11:01:27 +08:00
蹲一个正确答案,我感觉是使用版本号,升级新版本保留老版本.
Rekkles
2020-07-31 11:01:36 +08:00
停机升级。
Ariver
2020-07-31 11:07:50 +08:00
比如有 a->b->c 这样的依赖关系,每个服务四个实例。
先 new c 2 个,然后 new b 两个,然后 new a 两个。然后把流量切到新的这边一部分。
没问题全切。然后干掉老的。
IMCA1024
2020-07-31 11:08:25 +08:00
只要手速够快 切换得够快
Tokiomi
2020-07-31 11:12:24 +08:00
半夜人少的时候发布,被依赖的先发,接口向前兼容,灰度发布,最好还有 AB 环境
wangxiaoaer
2020-07-31 11:19:30 +08:00
listenerri
2020-07-31 11:21:18 +08:00
部署策略对比:蓝绿部署、金丝雀发布及其他
https://www.infoq.cn/article/LEI4vSFPiw5A6eN-ASo4
wangritian
2020-07-31 11:22:52 +08:00
灰度发布,上新服务时保留老服务,并且设置一个特殊标记决定流量往哪走,比如 http header,要求测试用客户端带上标记,同时服务内互相调用时传递,所以这个客户端走的都是新版本服务,而线上版本仍然是老服务
sunziren
2020-07-31 11:25:07 +08:00
@wangxiaoaer hahahahaha
x97bgt
2020-07-31 11:26:54 +08:00
@Ariver @wangritian 控制流量往哪个机器上走,这个功能是负载均衡组件提供的么?
594duck
2020-07-31 11:33:03 +08:00
@x97bgt 负载均衡只提供非常粗的,要上 API GW 或者 ESB 才行。非常复杂 。

另外前端都好说,只要动数据库,那就搞了。

比如 100 万行的表,你加个字段试试。哈哈哈哈哈哈,特别酸爽。

我听人家说过 1 亿行的数据库,每周加字段改字段告诉我没事,都这么玩。秒级修改的。

你信么,我是不信的。
huobazi
2020-07-31 11:48:43 +08:00
iluhcm
2020-07-31 11:56:08 +08:00
@594duck #11 100 万行的表效率还好吧,并不一定会锁全表。
594duck
2020-07-31 12:00:59 +08:00
@iluhcm 并不一定这问题就来了。万一锁了呢,这库正好又是高负载库,那酸爽,那雪崩,那崩溃。所有经验都是被扣 KPI 得出来的教训。
Umenezumi
2020-07-31 12:02:41 +08:00
@594duck 高频读的库可以靠 rename 来切,,高频写就没办法了
sadfQED2
2020-07-31 12:24:02 +08:00
@594duck 根据修改表语录生成临时表,然后对老表,新表做双写,同时起一个脚本同步老表数据到新表,老表数据同步完成以后 rename 新表,删除老表

对业务代码来说确实是秒级修改
loophole12
2020-07-31 12:27:20 +08:00
每个服务划分 set,分 set 逐步发布
ChanKc
2020-07-31 12:59:45 +08:00
等用户都睡觉了起来搞
natsji
2020-07-31 14:24:37 +08:00
发红包就行了
Dabaicong
2020-07-31 14:32:36 +08:00
mysql 5.6 以后就支持 online ddl 了。我们正式线上,单表将近 1 亿数据,正常加字段。

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

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

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

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

© 2021 V2EX