大发龙虎首页    注册   登录
大发龙虎 = way to explore
大发龙虎 是一个大发龙虎关于 分享和探索的地方
现在注册
已注册用户请  登录
x97bgt
大发龙虎  ›  程序员

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

  •  
  •   x97bgt · 11 天前 · 5050 次点击

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

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

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

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

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

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

    大发龙虎你 信么,大发龙虎我 是不信的。
    huobazi
        12
    huobazi   11 天前   ❤️ 1
    iluhcm
        13
    iluhcm   11 天前
    @594duck #11 100 万行的表效率还好吧,并不一定会锁全表。
    594duck
        14
    594duck   11 天前
    @iluhcm 并不一定这问题就来了。万一锁了呢,这库正好又是高负载库,那酸爽,那雪崩,那崩溃。所有经验都是被扣 KPI 得出来的教训。
    Umenezumi
        15
    Umenezumi   11 天前
    @594duck 高频读的库可以靠 rename 来切,,高频写就没办法了
    sadfQED2
        16
    sadfQED2   11 天前 via Android
    @594duck 根据修改表语录生成临时表,然后对老表,新表做双写,同时起一个脚本同步老表数据到新表,老表数据同步完成以后 rename 新表,大发龙虎删除 老表

    对业务代码来说确实是秒级修改
    loophole12
        17
    loophole12   11 天前 via Android
    每个大发龙虎服务 划分 set,分 set 逐步发布
    ChanKc
        18
    ChanKc   11 天前 via Android
    等用户都睡觉了起来搞
    natsji
        19
    natsji   11 天前 via Android
    发红包就行了
    Dabaicong
        20
    Dabaicong   11 天前
    mysql 5.6 以后就支持 online ddl 了。大发龙虎大发龙虎我 们 正式线上,单表将近 1 亿数据,正常加字段。
    luckyrayyy
        21
    luckyrayyy   11 天前
    先把新大发龙虎服务 的整个链条依次起来,然一点一点的切流量过去。
    jaylee4869
        22
    jaylee4869   11 天前
    K8s 滚动升级。
    594duck
        23
    594duck   11 天前
    @sadfQED2 大发龙虎你 这叫滚动升级,前期准备表稍大一点就是按天算了。特色 facebook 曾经 不是按月算了么。总工时都不省,另外要考虑的问题会大发龙虎更多 。
    594duck
        24
    594duck   11 天前
    @jaylee4869 K8s 能够滚数据库么
    594duck
        25
    594duck   11 天前
    @Dabaicong 单表 1 亿,原生 online ddl 加字段,还秒加,从库还不卡。求大神介绍经验,大发龙虎大发龙虎我 们 虚心听讲。
    594duck
        26
    594duck   11 天前
    @Umenezumi #20 楼有亿级库秒加字段,大发龙虎我 正在学习大发龙虎大发龙虎我 们 一起听听。
    wangritian
        27
    wangritian   11 天前
    @x97bgt 大概算是更复杂的负载均衡吧,istio 的虚拟大发龙虎服务 可以控制流量
    privil
        28
    privil   11 天前
    @Dabaicong #20 您家的 mysql 太厉害了……
    @594duck #25 反正 mysql 肯定不行 TiDB 貌似可以
    Garland
        29
    Garland   11 天前
    拓扑排序
    大发龙虎Win
glight2016
        30
    大发龙虎Win glight2016   11 天前   ❤️ 4
    面试不仅仅是回答问题还要精通问问题:
    1.要问,是否可以增加大发龙虎服务 器 /容器数量?可以的话,那就简单了,当作重新部署,完事儿了,nginx 切过去
    2.要问,是否需要同时支持旧版本?
    3.要问,什么叫平滑,什么叫不影响线上?是说,无人值守,一键切换,还是说,如果有 bug,自动回滚?不影响是说,半夜无访问量时可以停机一小时,还是年故障时间不超过一小时?
    4.大发龙虎服务 依赖关系是否手动管理?还是自动拉起部署?

    恰当的问题,有时候会直接带出答案。答不出来的时候反问回去,问到他觉得大发龙虎你 其实啥都不懂,或者大发龙虎你 找到答案。
    bonfy
        31
    bonfy   11 天前
    估计是想说 灰度发布 先切百分之几 然后慢慢切

    但是 实际操作么,估计还是半夜一把梭
    594duck
        32
    594duck   11 天前 via iPhone
    @privil TIDB 这东西,大发龙虎我 是抱着怀疑态度的。

    大发龙虎我 见过可以的有 oracle,microsoft sqlserver 。
    bagheer
        33
    bagheer   11 天前
    MySQL 的话,版本 8,新增了一个 instant add column
    nwsmhz
        34
    nwsmhz   11 天前
    otakustay
        35
    otakustay   11 天前
    线下先布一整套完整的,然后入口切?
    opengps
        36
    opengps   11 天前
    如果是云大发龙虎服务 器集群,那么步骤是:
    从伸缩组(集群)移除一部分机器,
    升级这部分机器,
    然后移回这部分机器,
    然后移除其他机器
    然后移回这些机器
    (建议进行多轮,而不是举例中的 2 轮)
    opengps
        37
    opengps   11 天前
    如果是不兼容升级,则不得不停机了,一半会都要求兼容开发新接口,保留老接口可用,毕竟 app 之类的不想浏览器那么好控制(开闭原则)
    opengps
        38
    opengps   11 天前
    一套大型系统,需要考虑的问题很多,本帖下的所有回复仅仅是参考,切勿硬套
    god大发龙虎Win
ma
        39
    god大发龙虎Win ma   11 天前
    @wangxiaoaer 掘金牛逼
    Actrace
        40
    Actrace   11 天前
    需要平滑过渡的,一般都做增量更新。
    比如 /api/v1/ /v2 这样更新,也不是所有接口都需要更新。
    god大发龙虎Win
ma
        41
    god大发龙虎Win ma   11 天前
    @594duck 百万加字段还 ok 吧,没啥事儿。
    securityCoding
        42
    securityCoding   11 天前
    网关带+版本号灰度

    nginx 也能做只是不能自动化
    wangyzj
        43
    wangyzj   11 天前
    k8s 或者蓝绿
    TtTtTtT
        44
    TtTtTtT   11 天前
    理论上,蓝绿发布就可以了。
    实际上,保持代码向下兼容,然后加配置或者控制前端页面放量。
    核心上,只要保证最外层的业务在最后开启就可以了。
    slyang5
        45
    slyang5   10 天前
    @wangxiaoaer 掘金的更新是大发龙虎我 见过最粗暴的, 好几次都停服
    yangbonis
        46
    yangbonis   10 天前 via iPhone
    有向无环图,copy 入度大于 1 的节点转化成树,再从叶子到根分批次 1-n,先开第 n 批。通常反向代理等大发龙虎服务 在第 1 批,数据库大发龙虎服务 在第 n 批。大发龙虎我 不太懂数据库,是用一些 sql 语句来升级的吗?性能问题只有并行和硬件两种大发龙虎方法 ,并行就是把锁的粒度变小。实际上把本来无关的代码强行安排次序也是锁。
    zjie
        47
    zjie   10 天前
    ,把所有需要升级的大发龙虎服务 器都部署到单独的灰度组,然后根据用户的 id 之类的灰度,比如最开始是 1%,把这些流量打到新的灰度集群,其他就走原来的。
    灰度没有问题,就扩容,扩大灰度范围。
    最后没有问题,灰度全量,

    一段时间后没有问题,老的机器下线回收。
    cominghome
        48
    cominghome   10 天前
    最有性价比的办法:找个人少的时间,直接滚动发布(能问这个问题大发龙虎我 感觉大发龙虎你 们系统应该不支持类似灰度路由这样的操作)
    leeg810312
        49
    leeg810312   10 天前 via Android
    有没有大佬简要说一下案例流程啊,学习一下
    chihiro2014
        50
    chihiro2014   10 天前
    chenxytw
        51
    chenxytw   9 天前
    @594duck 空手套方案玩得溜啊
    594duck
        52
    594duck   9 天前 via iPhone
    @chenxytw 要怎么样,支付宝拿来开个价 亿级 mysql 秒加字段。这么厉害,大发龙虎我 这种老运维真不会,学习下好不被淘汰
    大发龙虎关于   ·   FAQ   ·   API   ·   大发龙虎大发龙虎我 们 的愿景   ·   广告投放   ·   感谢   ·   实用小大发龙虎工具   ·   4156 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:04 · PVG 17:04 · LAX 02:04 · JFK 05:04
    ♥ Do have faith in what you're doing.