事情是这样的。公司目前有 A 和 B 两套生产环境,平时只用其中一套,另一套作为预生产环境,每次上线后轮换。
举个例子,当前生产是 A 环境,那么 B 环境就是预生产,12 月中旬需要上线,那这个时候会把代码先上线到预生产环境,也就是 B 环境,等预生产确定没问题之后,运维会把流量切到预生产,也就是 B 环境,这个时候 B 环境就是生产环境,A 环境就变成了预生产……如此循环。
现在的问题是,因为 A 和 B 两个环境经常轮换,导致开发人员经常搞不清楚哪个是生成环境,哪个是预生产环境。
请问有没有什么好的办法可以快速区分?
目前运维想的办法是每次上线之后把堡垒机的备注改一下。
1
singerll 2022-12-01 09:39:32 +08:00 2
生产环境不允许开发直接访问,有特殊情况提申请。
|
2
EmptyDX 2022-12-01 09:41:12 +08:00
测试环境加个显眼的背景色区分
|
3
brucmao 2022-12-01 09:41:30 +08:00
|
4
lcy630409 2022-12-01 09:42:31 +08:00
生产环境的 apache 给个特殊的标记
|
5
xuanbg 2022-12-01 09:44:36 +08:00
让运维给一个动态的入口就行了呀,访问的流量切到生产,发布 /测试的网络流量也是流量啊,一样可以切到预生产。这样你们只要使用特点的入口就行了。
|
6
hayhong123 2022-12-01 10:01:23 +08:00
可以在登陆或者首页接口里 塞入一个环境的 ENV cookie 后端通过 AB 环境不同的配置文件去取 ENV 信息 这样访问就知道在哪个环境了
|
7
rekulas 2022-12-01 10:12:49 +08:00
感觉这种发布机制有问题,a,b + dev 环境是不是好点,dev 开发环境,b 预生产,a 生产不允许直接访问
dev 测试完毕更新到 b ,打一部分流量过来没问题自动同步环境到 a ,流量全部切回 a ,这样还可以灰度测试也不会冲突 |
8
everyx 2022-12-01 10:15:12 +08:00
好奇这种情况,如何涉及到数据库的修改怎么在两种环境下同步数据的,能否分享一下?
|
9
yogogo 2022-12-01 10:22:23 +08:00 1
不是应该每次更新迭代完,两个都生产环境了吗?每次版本更新的时候,每次默认 A 是用预生产测试
|
10
wangritian 2022-12-01 10:25:55 +08:00
好奇怪,也有同事跟我讲过类似的 AB 环境,但服务器资源会不会浪费一半呢?只有生产环境才有大流量。我理解的预生产应该是用于蓝绿发布的临时环境,发布成功后需要把原生产环境下线的
|
11
adoal 2022-12-01 10:27:05 +08:00
A 和 B 的访问通过一层反代或者其它接入方式(比如浮动 IP )控制,用户和开发不直接连 A 和 B 。在接入控制层,生产环境总是固定为一组网络资源,预生产环境总是固定为另一组网络资源,往后端接入时,根据切换映射到不同的实际资源。
类似某些主备数据库集群里常用的做法,A 有固定 IP 1 ,B 有固定 IP 2 ,两者一个是可读可写的主库,一个是只读的备库从主库同步数据过来。当现任主库挂了时从库提升,运维人员去修复主库。浮动 IP 3 永远飘到现任主库上,浮动 IP 4 永远飘到现任备库上,当主库降级修复时 3 和 4 都在新的主库上。这样,不论 A 和 B 角色怎么调整,应用程序要访问主库就用 IP 3 ,访问备库就用 IP 4 。当然你这个场景是切换整套业务系统,那可能需要自己写一些逻辑来在接入层控制。 |
12
james2013 2022-12-01 10:30:47 +08:00
觉得这种切换逻辑总会出问题的
正常来说,A 固定长期是生产环境,B 是预生产.在 B 环境没有问题,将流量切到 B,在 A 上线代码后,将流量重新切回到 A |
13
oneisall8955 2022-12-01 10:31:54 +08:00 via Android
生产和预发布同一个库?
|
14
opengps 2022-12-01 10:41:18 +08:00
就不应该用切流量的方式,测试一般是完全隔离,单独部署一套测试环境的域名等信息:单独的测试公众号,单独的测试网址,单独的测试环境等等
|
15
zhouyg 2022-12-01 10:50:27 +08:00
不应该切服务器,应该把生产环境固化下来
|
16
itechnology OP @rekulas 目前就是你说的这种模式。现在其实有四套环境,开发环境、测试环境、预生产环境和生产环境。
开发环境是用于后端开发人员和前端开发人员联调用的;联调完没问题后更新到测试环境给测试测,测试测完没问题之后,更新到预生产环境,预生产测试没问题后切换为生产。 |
17
itechnology OP @oneisall8955 不是同一个数据库,但是预生产的数据库是从生产数据库数据拉出来的一个临时库
|
18
Jooooooooo 2022-12-01 11:49:46 +08:00
为啥是这种模式, 正常来讲预发不应该和线上轮换呀. 一般配置也不一样.
|
19
itechnology OP @Jooooooooo 这个是领导定的方案,我们没法改变
|
20
Yuesh1 2022-12-01 12:58:58 +08:00
像 JVM 里面的 s1 和 s2 ,标记复制算法
|
21
cdlnls 2022-12-01 13:15:35 +08:00
我们是在 http 请求头里面增加了一个字段,通过这个字段能识别出后端是什么环境。
|
22
exonuclease 2022-12-01 15:59:27 +08:00
blue green 发布啊 很正常 不过一般来说 inactive 的会 scale down 的 我们是监控里面有个页面会显示两个 side 的流量 不太精致但是可以用
|
23
q474818917 2022-12-01 16:32:53 +08:00
你们领导是个人才,百年难得一遇的,贵公司应庆幸拥有此人。
|
24
mrzhangrb 2022-12-01 16:35:45 +08:00
🐂
|
25
fiypig 2022-12-01 16:46:59 +08:00
区分开,搞那么麻烦 ,很容易搞出问题吧
|
26
tang00337788 2022-12-01 17:00:47 +08:00
两套环境的访问地址不一样吧。搞个内部人员隐藏按钮,可以查看访问地址的。
|
27
karott7 2022-12-01 17:56:27 +08:00
这么搞肯定出问题,长期下来有几个人能分得清?不都是固定环境么
|
28
zbianbiaos 2022-12-01 18:44:41 +08:00
Linux 的 hostname
|
29
sujin190 2022-12-01 18:50:18 +08:00 via Android
所以不应该把日志自动汇总到统一的日志管理服务器么
|
30
bjzhush 2022-12-01 22:55:06 +08:00
我之前的办法是不同的环境,zsh 采用不同的主题和颜色。
你也可以试试,给线上环境加上红色主题,这样会比较容易让人认真对待 |
31
securityCoding 2022-12-02 00:49:59 +08:00 via Android
这个发布流程是个人才
|
32
itechnology OP @sujin190 目前还没有做,后续据说会考虑用 elk
|
33
WhiteDragon96 2022-12-02 10:55:23 +08:00
每次发布,写个发布日志
|