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

2019-08-01 10:24:21 +08:00
 lurenw
目前只有 DEV 和 PROD 两个库, 预发环境和生产共用一套 PROD 库

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

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

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

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

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

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

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

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

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

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

开发时使用的库自行解决。
lurenw
2019-08-01 14:46:48 +08:00
@kumakiti 是的, 不分库就只能在上层做拦截, 但一直苦于没有好的方案(对业务代码入侵少, 不给开发人员增加过多的工作量)

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

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

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

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

© 2021 V2EX