leeton
V2EX  ›  程序员

像某宝、狗东这样的网站怎么发布(更新)项目的

By leeton at 2020 年 9 月 10 日 · 9168 次点击

像某宝、狗东这样的网站怎么发布(更新)项目的,平时也没见过他们提示系统升级中 稍后访问之类的

44 条回复  •  2021-03-01 14:32:05 +08:00
pc10201
   1
pc10201  
   2020 年 9 月 10 日
滚动升级啊
crclz
   2
crclz  
   2020 年 9 月 10 日
(瞎猜的) api 保留历史的一些版本;服务端一次升级一台,一台升级完了再升级下一台。(这样服务能力保留为原来的 N-1/N )
chaleaoch
   3
chaleaoch  
   2020 年 9 月 10 日
应该和王者荣耀的不停机更新一个道理 不过 不停机更新是如何实现的我不清楚(狗头.jpg)
MinQ
   4
MinQ  
   2020 年 9 月 10 日   ❤️ 5
@chaleaoch 滚动发布,先将几台机器从集群中隔离,将流量打到其它机器上。然后升级隔离的机器,进行发布和验证,验证通过后将流量接回。然后循环这个过程,直到集群中所有机器都升级完毕
huihui0615
   5
huihui0615  
   2020 年 9 月 10 日
@chaleaoch 热更新嘛
PopRain
   6
PopRain  
   2020 年 9 月 10 日   ❤️ 1
我只是好奇,为啥不是“狗宝” ?
leeton
   7
leeton  
OP
   2020 年 9 月 10 日
@PopRain 因为京东的头像是狗头啊
wellsc
   8
wellsc  
   2020 年 9 月 10 日
devops
LifStge
   9
LifStge  
   2020 年 9 月 10 日
@leeton 我在想 他的意思是不是 把两个词直接合并呢 = = 哈哈
Jooooooooo
   10
Jooooooooo  
   2020 年 9 月 10 日
都是集群

发布就是先把比如 10% 的机器摘掉, 然后上新版本, 发起来了再放回去, 然后这么发 10 次新版本就上线了

这里一般要注意兼容性的问题, 因为是新旧版本同时在线上可以被访问到
ewBuyVmLZMZE
   12
ewBuyVmLZMZE  
   2020 年 9 月 10 日
研发三板斧做好,想怎么发就怎么发。
yolee599
   13
yolee599  
   2020 年 9 月 10 日
用两台以上服务器,升级这一台的时候流量全部转到另外的服务器,以此类推
zealinux
   14
zealinux  
   2020 年 9 月 10 日
@syhily 哪三板斧?
jmk92
   15
jmk92  
   2020 年 9 月 10 日
有负载均衡就能实现,一台机器也无妨,也用它的镜像生成一台临时的机器,加入负载均衡,把流量都切到新的上面,
更新之前的机器,更新完了之后,流量再切回来,释放新实例
liujan
   16
liujan  
   2020 年 9 月 10 日 via iPhone
分批发布,先发布一批,没问题再发布另外一批
adoula
   17
adoula  
   2020 年 9 月 10 日
你们说的都是负载均衡之类的吧,如果数据库字段有删减,改怎么搞?
MinQ
   18
MinQ  
   2020 年 9 月 10 日
@adoula 为了保证兼容性一般都是加,非得搞就得准备新的库和表,然后用不同版本的接口做划分
oscer
   19
oscer  
   2020 年 9 月 10 日
负载均衡啊,无感知更新
oscer
   20
oscer  
   2020 年 9 月 10 日
@adoula 有缓存啊,全部更完之后,清除掉缓存就行了
firefox12
   21
firefox12  
   2020 年 9 月 10 日
负载均衡就是 nginx + upstream 吗?。 有更好一点的方案吗?
cominghome
   22
cominghome  
   2020 年 9 月 10 日
@firefox12 核心思路和 nginx + upstream 差不多,但是各家多多少少都会有自己二次开发的产品
lynan
   23
lynan  
   2020 年 9 月 10 日
有在半夜 12 点的时候遇见狗东过几次接口超时,报错
当时在想哈哈哈被我逮到了把,偷偷更新
null2018
   24
null2018  
   2020 年 9 月 10 日
很简单啊,先从域名下摘一台机器,然后发布到机器上,测试在这台机器回归,没问题的话,摘机器,发布,挂机器,再摘再挂,或者晚上到凌晨再上线,最主要的话是发布其实没你想象那么慢
knightdf
   25
knightdf  
   2020 年 9 月 10 日
类似灰度发布?
opengps
   26
opengps  
   2020 年 9 月 10 日
zc1249274251
   27
zc1249274251  
   2020 年 9 月 10 日
多轮测试,备份、灰度发布 当然后边还有一些数据同步
owenliang
   28
owenliang  
   2020 年 9 月 10 日
灰度部署几台不就好了嘛
azh7138m
   29
azh7138m  
   2020 年 9 月 10 日
@lynan 半夜可能不是更新,可能是线上压测,故障演练
maichael
   30
maichael  
   2020 年 9 月 10 日
滚动、灰度、蓝绿,只要设计良好,不停服更新不会很难。
LudwigWS
   31
LudwigWS  
   2020 年 9 月 10 日
太复杂了
dizun
   32
dizun  
   2020 年 9 月 10 日 via Android
摘下一部分更新好再挂上呗。这种商城类的支付应该是单独的接口,所以灰度只要保证接口兼容性就没问题了。
tingfang
   33
tingfang  
   2020 年 9 月 10 日
滚动发布,新旧版本共存。发布不难,难的是开发要考虑新旧版本兼容,数据迁移,数据兼容等。老版本只修 bug,不改功能,所有新功能都要提供新版本接口。
zhgg0
   34
zhgg0  
   2020 年 9 月 10 日
@lynan 大厂一般不会在半夜发布的,半夜发布出问题了,如果解决问题有可能很多人不在比较麻烦,所以都选择在白天发布,你说的半夜遇到超时问题,可能是压测导致的,压测一般下半夜开始。

大厂机器都很多,负载均衡机器加上探测应用机器是不是活的这种功能,就能解决发布时不影响功能的问题了。
alexsunxl
   35
alexsunxl  
   2020 年 9 月 10 日
核心思路基本都是注册中心+upstream 。
比如说 100 台机器(实例)串行 10%更新, 对 1-10 做更新,同时把这 10%摘出来,不打流量进去。
更新完成后打流量,看监控一下,看下拨测,看下告警和日志,没问题就到下一组 11-20 。有问题就回滚,取消整个发布,解决了重新再来。

整个发布过程要做到可观测,可监控,可回滚。
Auster
   36
Auster  
   2020 年 9 月 10 日 via iPhone
分批部署
MinQ
   37
MinQ  
   2020 年 9 月 11 日 via Android
@zhgg0 我司都是半夜发,第二天回家睡觉……
leeton
   38
leeton  
OP
   2020 年 9 月 11 日
@lynan 优秀
monkeyWie
   39
monkeyWie  
   2020 年 9 月 11 日 via Android
k8s 滚动升级就完事
zhilincom
   40
zhilincom  
   2020 年 9 月 11 日 via Android
应用部署能理解,我想知道他们数据库是如何更新的?就是修改表结构的操作。
pkoukk
   41
pkoukk  
   2020 年 9 月 11 日
@zhilincom 个人理解应该是靠中间件,应用服务不直连数据库
killergun
   42
killergun  
   2020 年 9 月 11 日
版本控制
不是所有服务器一下更新,而是逐步更新
dbpe
   43
dbpe  
   2021 年 3 月 1 日
我很好奇..数据是如何做到滚动发布的....
dbpe
   44
dbpe  
   2021 年 3 月 1 日
先 Copy 一个表,然后新的表结构改掉,然后数据库中间件进行新老表双写?没问题了..就切换到过去..有问题就回滚?
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 98ms · 3.9.8.5