互联网公司上线问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
renshuxian
V2EX    Java

互联网公司上线问题

  •  1
     
  •   renshuxian 2016-09-20 16:07:15 +08:00 8245 次点击
    这是一个创建于 3315 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟新去了一家互联网公司,每两周上线一次,每次都要凌晨发新的包,每次都要陪着通宵,总这样感觉身体要跨,想研究下怎么能白天发包然后热部署呢,公司现在已经是初步的分布式+集群 几十台服务器 几十个服务相互调用

    62 条回复    2017-02-06 00:44:55 +08:00
    kanchi240
        1
    kanchi240  
       2016-09-20 16:20:49 +08:00
    灰度
    renshuxian
        2
    renshuxian  
    OP
       2016-09-20 16:22:15 +08:00
    @kanchi240 大哥能在详细说说么
    LMkillme
        3
    LMkillme  
       2016-09-20 16:25:05 +08:00
    其实蛮享受以前凌晨更新的时候,两三个人半夜在办公室吃烧烤,啤酒,音乐,看看足球,吹求打屁
    renshuxian
        4
    renshuxian  
    OP
       2016-09-20 16:27:32 +08:00
    @LMkillme 那是建立在没出问题的情况下呀,可以看看电影,要是出问题了,后半夜写代码的感觉可不好
    clarkyi
        5
    clarkyi  
       2016-09-20 16:30:06 +08:00
    我们以前也是这种状态,不过现在切换了方式,用 jenkins 先把程序打好包,再用 rundeck 来发布到线上。虽然没有命令的方式方便,但是最起码不用半夜上线了
    LMkillme
        6
    LMkillme  
       2016-09-20 16:30:16 +08:00
    @renshuxian 测试做好来。
    renshuxian
        7
    renshuxian  
    OP
       2016-09-20 16:34:14 +08:00
    @clarkyi 我们也是 jenkins 但是如果如您说的用 rundeck 他会不影响生产的用户的使用么 比如我们的订单有 8 台集群,他能保证发布的时候不出问题么
    renshuxian
        8
    renshuxian  
    OP
       2016-09-20 16:34:53 +08:00   1
    @LMkillme 测试肯定是要的 但是很多环境只有生产有,只能最后才能测,很尴尬
    clarkyi
        9
    clarkyi  
       2016-09-20 16:39:41 +08:00
    @renshuxian 你手动发布的时候能保证发布不出问题么?
    这个跟你手动发布是一个道理,只是把命令什么的都统一起来了而已,再者发布的时候可以先发布一台机器暂且叫预发布机,环境跟线上完全一致,只是不对外开放访问。当你确认这一台机器跑起来是正常的再一次发布到外网。
    当然像你说的订单系统对数据一致性要求高的,肯定是要找一个访问量低的时间段来更新的。或者有对应的机制来处理正则处理的订单这都是外话了。
    renshuxian
        10
    renshuxian  
    OP
       2016-09-20 16:43:29 +08:00
    @clarkyi 感谢,那我懂了 还是要晚上上
    darkfireworld
        11
    darkfireworld  
       2016-09-20 18:49:46 +08:00 via Android
    核心业务无法中断的,那就只能晚上了。
    renshuxian
        12
    renshuxian  
    OP
       2016-09-20 18:59:13 +08:00
    @darkfireworld 主要是想理解下那些大公司到底用了什么黑科技实现的热部署
    dgsrz
        13
    dgsrz  
       2016-09-20 20:10:15 +08:00
    预发布+分批次发布线上,也没啥黑科技的……除了核心应用或数据库变更需要放在业务低峰期
    owt5008137
        14
    owt5008137  
       2016-09-20 20:13:06 +08:00 via Android
    把生产环境的数据定期导到开发环境测啊。
    生产环境部署可以试试采用 AB 组,更新前是 A 组,更新后是 B 组,切换环境就是路由切过去就行了。然后正式切换前先灰度一部分用户做预发布,如果预发布没问题了全部切 B 。就完了
    ri0day
        15
    ri0day  
       2016-09-20 20:56:06 +08:00
    楼上是对的。 2 组 ,先拿下来一组。发代码上去,测试。测试完了 放上去给外面使用。再弄第二组。第二组发完了,测试好了,就也放上去。
    renshuxian
        16
    renshuxian  
    OP
       2016-09-20 21:52:17 +08:00
    @dgsrz 嗯我们现在也是这样 开发环境 测试环境 预发布 生产 就是纠结 生产一定要晚上上
    renshuxian
        17
    renshuxian  
    OP
       2016-09-20 21:54:07 +08:00
    @owt5008137 但是切 B 的过程中 客户的使用会造成影响吧
    renshuxian
        18
    renshuxian  
    OP
       2016-09-20 21:55:24 +08:00
    @ri0day 还是刚才的问题 比如 8 台的负载 如果分两批上线,前端只有 4 台工作压力可能会很大
    xiaogui
        19
    xiaogui  
       2016-09-20 22:10:08 +08:00
    晚上受影响的用户相对会比较少,出问题有更多的时间解决。但是另一方面晚上易疲惫,所以有的时候反而容易范二。
    ywgx
        20
    ywgx  
       2016-09-20 22:23:05 +08:00
    信不信 来 xabcloud.com 给你完美解决方案
    sfwn
        21
    sfwn  
       2016-09-20 22:26:11 +08:00
    @ywgx 封面 logo 男是谁?
    renshuxian
        22
    renshuxian  
    OP
       2016-09-20 22:37:19 +08:00
    @xiaogui 就是呀,很困的 12 点才切生产出点问题一宿就没法睡觉了,都有点想离职了,两周同一次宵
    renshuxian
        23
    renshuxian  
    OP
       2016-09-20 22:41:50 +08:00
    @ywgx 要花多少钱
    Jakesoft
        24
    Jakesoft  
       2016-09-20 22:44:29 +08:00
    @ywgx 请问 community.xabcloud.com 这个社区站点使用的什么后台 /前端技术?感觉挺神奇的,所有的页面竟然都是请求的接口,然后这个社区看着简单,我注册了一下,内部还是比较复杂的。
    vela
        25
    vela  
       2016-09-20 22:51:04 +08:00
    本厂刚从一天两次改为一天一次……飘过。
    renshuxian
        26
    renshuxian  
    OP
       2016-09-20 23:06:43 +08:00
    @boywang004 围观架构师,看来大神已经习惯上线的感觉了
    xiaogui
        27
    xiaogui  
       2016-09-20 23:26:22 +08:00
    @renshuxian 听起来好像不是很经常,哈哈
    axb
        28
    axb  
       2016-09-21 00:04:43 +08:00
    每天上线十几次,每次上线就是点个按钮,从来不在晚上上线……

    编译型程序:
    1. 滚动上线,按一定步长批量执行
    2. 固定运行时环境+热部署,例子可以参考阿里放出的资料

    解释型程序:
    git pull 或者类似的姿势
    dgsrz
        29
    dgsrz  
       2016-09-21 01:36:25 +08:00
    @renshuxian 独立一个接入层出来,应用上下线的时候只要增删接入层路由规则就好了,避免客户端直连后端应用。另外控制好每批次的机器数量,发布流程及回滚方案,基本不会有问题的
    huntzhan
        30
    huntzhan  
       2016-09-21 01:47:03 +08:00
    搞持续交付,测试用例过了自动上线。不过做这一套对基础设施的要求比较高,包括整一套的 DevOps + 监控,数据指标除了问题要能自动回滚,还有就是你们的架构可能也要重新考虑。
    neoblackcap
        31
    neoblackcap  
       2016-09-21 02:21:23 +08:00
    互联网公司居然 2 周才更新一次!!!做好热升级的设计,不是大的改表不用深夜上啊。
    当然要狠的话,那么先用缓存层挡住数据,然后更新持久化层,
    ywgx
        32
    ywgx  
       2016-09-21 07:26:29 +08:00 via iPhone
    @renshuxian 阿里云市场已经上架 一个月 1000 左右
    ywgx
        33
    ywgx  
       2016-09-21 07:27:00 +08:00 via iPhone
    @Jakesoft nodebb
    owt5008137
        34
    owt5008137  
       2016-09-21 08:20:43 +08:00 via Android
    本来灰度就是先对一部分造成影响来看是否有问题啊
    chocotan
        35
    chocotan  
       2016-09-21 08:46:10 +08:00
    唉。。我们公司没有单元测试,没有灰度,一天能发布 n 次
    matrix67
        36
    matrix67  
       2016-09-21 08:47:34 +08:00 via Android
    不是 ha 后面挂个两个,先搞一个,跑借口测试,再搞一个额
    renshuxian
        37
    renshuxian  
    OP
       2016-09-21 08:58:47 +08:00
    @axb 好的去研究下
    renshuxian
        38
    renshuxian  
    OP
       2016-09-21 09:01:03 +08:00
    @dgsrz 好像很复杂先谢过
    renshuxian
        39
    renshuxian  
    OP
       2016-09-21 09:01:39 +08:00
    @huntzhan 这个感觉要把项目删了重写才行的样子
    renshuxian
        40
    renshuxian  
    OP
       2016-09-21 09:02:09 +08:00
    @neoblackcap 我们做 B2B 每天都有好多订单,就晚上用的人少
    renshuxian
        41
    renshuxian  
    OP
       2016-09-21 09:02:54 +08:00
    @ywgx 阿里云真的比自己买服务器雇运维强么
    renshuxian
        42
    renshuxian  
    OP
       2016-09-21 09:03:56 +08:00
    @owt5008137 好的 研究下
    renshuxian
        43
    renshuxian  
    OP
       2016-09-21 09:04:56 +08:00
    @chocotan 那不是要搞死人
    renshuxian
        44
    renshuxian  
    OP
       2016-09-21 09:05:49 +08:00
    @matrix67 有 ha 负载但是还是要晚上上 - -
    sujin190
        45
    sujin190  
       2016-09-21 09:08:48 +08:00   1
    互联网公司连简单的灰度发布都没有么。。多搞一台机器,先发到那台机器,然后指定某些用户访问那台机器测试, ok 的话全量更新,这种不应该有问题啊,否则就是你们测试过程太随便了
    ywgx
        46
    ywgx  
       2016-09-21 09:16:53 +08:00
    @renshuxian 这个没法对比,总之云上 就是 花钱省时间省事,快; 而 云的稳定性 不要过度依赖, 什么时候 支付宝,天猫,淘宝 90%的业务都在 阿里云了, 那个时候就差不多了
    xi_lin
        47
    xi_lin  
       2016-09-21 09:17:18 +08:00 via iPhone
    灰度不是万能的吧。比如碰上数据库表结构变更的时候
    @sujin190
    ywgx
        48
    ywgx  
       2016-09-21 09:17:52 +08:00
    @renshuxian 要不 微信联系 rubycoding ,用不用 无所谓,或许可以解决你的问题呢
    ma125125t
        49
    ma125125t  
       2016-09-21 09:36:12 +08:00
    这就受不了?我们平均一天发布一点五次。。
    kideny
        50
    kideny  
       2016-09-21 09:37:48 +08:00
    study
    sujin190
        51
    sujin190  
       2016-09-21 09:37:53 +08:00
    @xi_lin 一般来说绝大部分上线都是不用修改数据结构的,在需要修改数据接口的上线中,又有很大部分是新加功能,这种情况来说不用等到凌晨啊,再者分开业务上线,控制影响范围才是啊
    quericy
        52
    quericy  
       2016-09-21 09:58:33 +08:00/span>
    凌晨 4 点加字段才蛋疼好么....

    @chocotan +1,哎,产品兼职测试简直酸爽
    xi_lin
        53
    xi_lin  
       2016-09-21 10:35:03 +08:00
    @sujin190 控制影响范围也是有影响嘛,我只是想表达一下灰度不是万能的。大表加字段可不敢在高峰期直接玩。
    diggzhang
        54
    diggzhang  
       2016-09-21 13:35:37 +08:00
    原来有相同工作场景啊!深夜上线麻烦多 == 新系统 /架构上线麻烦多。每次看到后端同事熬夜 debug ,简直英雄惜英雄。
    目前了解到的优解办法是构建预发布系统:
    主流的有 gor ,去录制流量,回放流量。
    还有网易的 tcpcopy ,流量请求生成环境同时,复制一份到测试环境。然后相同思路,稍微好用一些的还有 duplicator 。
    用真实流量去测试将要发布的系统,让问题尽早暴露。
    renshuxian
        55
    renshuxian  
    OP
       2016-09-21 14:00:31 +08:00
    @ywgx 这个要和领导请示下 毕竟已经买了很多很贵的服务器了
    renshuxian
        56
    renshuxian  
    OP
       2016-09-21 14:01:50 +08:00
    @sujin190 我们预发布的环境就是最新的 war 包然后是生产的数据库,测通过了才会切生产,但是切过去还是会有莫名其妙的问题 - -
    renshuxian
        57
    renshuxian  
    OP
       2016-09-21 14:03:05 +08:00
    @ma125125t 五次都是在白天 不可怕,都是晚上那不是要搞死
    renshuxian
        58
    renshuxian  
    OP
       2016-09-21 14:04:10 +08:00
    @diggzhang 预发布有的,就是测通过了还是要晚上上,这个是最根本的问题,晚上困那,改 bug 很费力
    wangzhangwei
        59
    wangzhangwei  
       2016-09-21 14:08:46 +08:00
    招人吧,轮班。
    ywgx
        60
    ywgx  
       2016-09-21 18:39:09 +08:00
    @renshuxian 是的,这个非常理解, 不过讲真,这个成本很低,只会让你们更省钱,可以按量试用一周,好不好很快就明白
    winglight2016
        61
    winglight2016  
       2016-09-22 09:46:10 +08:00
    我们也有同样问题,理论上灰度发布是可以解决问题的,实际上无法解决业务流程变更太大,完全不兼容以前以前的 API ,这种时候必须前后端一起切换只能放在晚上发布了
    darkfireworld
        62
    darkfireworld  
       2017-02-06 00:44:55 +08:00 via iPhone
    @renshuxian 这样说吧,灰度发布,假设线上有一个 vm1 跑 v1 版本,要上线 v2 版本,首先,部署 v2 到 vm2 上,然后,前端 nginx 按照一定规则(比如说, ip 段)将一部分流量引入 v2 中,然后,满满增大比例即可。

    楼上,也提到了数据库变更的问题,这个问题比较棘手,需要保证 v1 版本服务的 sql 和 v2 不冲突
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2635 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:43 PVG 11:43 LAX 20:43 JFK 23:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86