V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lurenw
V2EX  ›  程序员

预发布和生产环境的数据怎么做隔离

  •  
  •   lurenw · 2019-08-01 10:24:21 +08:00 · 9460 次点击
    这是一个创建于 1976 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前只有 DEV 和 PROD 两个库, 预发环境和生产共用一套 PROD 库

    这样就有个问题, 预发布时的验证测试可能会对生产的数据产生一定影响.

    想问下各位是怎么解决这个问题的.

    之前有专门搞一个 UAT 库来放预发数据, 但感觉有点浪费, 所以就没继续下去.

    有什么比较好的 对项目代码侵入比较小的方式.
    26 条回复    2019-08-02 07:29:41 +08:00
    kieoo
        1
    kieoo  
       2019-08-01 11:25:12 +08:00   ❤️ 2
    预发布就是为了用生产数据来验证, 不用生产数据预发布没有意义吧, 我是这样理解的
    18258226728
        2
    18258226728  
       2019-08-01 11:27:34 +08:00   ❤️ 2
    1.可以每个表加环境字段,db 层做拦截
    2.代码不改就线上做专门的测试数据,测试用户吧
    zyuhung
        3
    zyuhung  
       2019-08-01 11:28:43 +08:00
    同意 1 楼的说法,至于“预发布时的验证测试可能会对生产的数据产生一定影响”,这个只能通过权限去控制了,拥有生产环境的数据权限,那同样也有预发布环境的数据权限。
    kumakiti
        4
    kumakiti  
       2019-08-01 11:29:48 +08:00
    为啥不选择预发布单独建一个库,每次预发布之前把生产环境的数据库同步到预发布环境的数据库呢?
    misaka19000
        5
    misaka19000  
       2019-08-01 11:32:19 +08:00
    预发布啥意思,灰度?
    zyuhung
        6
    zyuhung  
       2019-08-01 11:32:39 +08:00
    @misaka19000 代码跑的是新的代码,数据是线上的数据。
    lostpupil
        7
    lostpupil  
       2019-08-01 11:33:39 +08:00
    Rails 里面一般都是
    test
    dev
    production
    三个库
    所以我建议加上一个 staging 的 数据库
    version
        8
    version  
       2019-08-01 11:40:22 +08:00 via iPhone
    预发布本来就不能有测试数据,如果有支付,找财务报销就好,不然报表出来有得你纠结了
    flyingghost
        9
    flyingghost  
       2019-08-01 12:21:54 +08:00
    预发布环境有独立的库,每次发布之前从生产数据库同步+脱敏数据过来。
    corvofeng
        10
    corvofeng  
       2019-08-01 12:46:03 +08:00 via Android
    一个系统理论上讲有两个环境:

    正式环境(预发布和正式上线)

    测试环境(预发布和正式上线)

    预发布和正式上线肯定使用的是一套数据库, 是正式环境和测试环境要隔离
    dolphintwo
        11
    dolphintwo  
       2019-08-01 13:51:58 +08:00
    我们 staging 库含支付转账的,用的是独立的数据库,日常测试就跟用于一样的用
    mineqiqi
        12
    mineqiqi  
       2019-08-01 14:07:26 +08:00
    灰度跟线上是一个数据库???
    lazyfighter
        13
    lazyfighter  
       2019-08-01 14:08:34 +08:00
    预发布就是跟生产共用一套数据,为了发现问题
    vance
        14
    vance  
       2019-08-01 14:11:30 +08:00
    弄个预生产库,每天同步数据
    nihaoaa
        15
    nihaoaa  
       2019-08-01 14:28:56 +08:00
    预发布本来就应该和生产环境一个库吧,不是一个库就失去了预发布本来的意义
    lurenw
        16
    lurenw  
    OP
       2019-08-01 14:32:28 +08:00
    @kumakiti @flyingghost @vance @lostpupil
    弄个预生产库(就是我上面提到的 UAT 库)同步数据, 数据量小的话, 倒也没问题,
    但数据量大的话, 就得考虑同步和运维成本.
    如果只同步部分数据, 又不能完全达到线上验证的效果.

    我们之前就是有 UAT 库, 但后来整体架构就全部变成 DEV 和 PROD 两套库.
    lurenw
        17
    lurenw  
    OP
       2019-08-01 14:36:51 +08:00
    @version 为什么预发布不能产生测试数据呢, 我感觉很难避免产生测试数据.

    这也是我感觉不太爽的地方, 生产库混杂着一小部分测试数据.

    考虑过使用回滚的手段, 但是不太好落地
    kumakiti
        18
    kumakiti  
       2019-08-01 14:41:30 +08:00
    @lurenw 实际上按照你的情况来看,要么分库,如果不分库那就需要对业务逻辑层面去加一些开关,毕竟你本质要做的就是隔离,数据由于放到一个库里面,已经无法隔离了,那么只能在业务逻辑层去处理了
    janxin
        19
    janxin  
       2019-08-01 14:42:08 +08:00
    定期备份线上数据至测试库。

    开发时使用的库自行解决。
    lurenw
        20
    lurenw  
    OP
       2019-08-01 14:46:48 +08:00
    @kumakiti 是的, 不分库就只能在上层做拦截, 但一直苦于没有好的方案(对业务代码入侵少, 不给开发人员增加过多的工作量)
    wd
        21
    wd  
       2019-08-01 14:53:21 +08:00
    什么是预发布环境?。。。生产就是生产,测试就是测试,你们把这两个搞一起了?
    geeti
        22
    geeti  
       2019-08-01 15:06:28 +08:00
    @wd 一般就是 gamma 吧,用来 QA,或者其他的类生产环境
    我们一般就是 alpha-beta-gamma-one_box-prod
    wd
        23
    wd  
       2019-08-01 15:10:15 +08:00
    @geeti 那不就是还是测试环境么?一般环境是三套,dev, beta, prod,互相隔离不会有影响。其中 beta 是给测试用的,要注意这个环境需要和 prod 基本一致,就是发布的时候和 prod 一样对待,也不要随意上去做一些修改什么的,或者说做了任何修改都一定记得需要反馈到代码或者上线步骤里面。

    这样基本可以保证 beta 验证没问题的代码在 prod 也没问题。
    flyingghost
        24
    flyingghost  
       2019-08-01 15:18:53 +08:00   ❤️ 1
    @lurenw “完全达到线上验证的效果”其实不用刻意追求,没必要。
    使用生产数据主要有两个作用:
    1,主流程验证,包括读写操作。
    2,针对个别生产数据产生 bug 的情况做复现、测试、回归。

    其实都只需要近期部分数据就可以了。
    基础数据包括配置等一般需要全量,也不会很多。比如社区全局配置。
    大量同构数据只选择一部分即可。比如社区最近一个月的用户帖子回复。
    freelancher
        25
    freelancher  
       2019-08-02 04:30:27 +08:00 via iPhone
    请个 DBA。例如我。不然出事了。就是开除。
    akrislu
        26
    akrislu  
       2019-08-02 07:29:41 +08:00 via iPhone
    @freelancher 你这话说的我怎么第一感觉是你是从删库到跑路呢😄
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2580 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:33 · PVG 13:33 · LAX 21:33 · JFK 00:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.