V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
itechnology
V2EX  ›  程序员

怎么随时分辨出哪个是预生产环境,哪个是生产环境呢?

  •  
  •   itechnology · 2022-12-01 09:36:33 +08:00 · 5051 次点击
    这是一个创建于 725 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样的。公司目前有 A 和 B 两套生产环境,平时只用其中一套,另一套作为预生产环境,每次上线后轮换。

    举个例子,当前生产是 A 环境,那么 B 环境就是预生产,12 月中旬需要上线,那这个时候会把代码先上线到预生产环境,也就是 B 环境,等预生产确定没问题之后,运维会把流量切到预生产,也就是 B 环境,这个时候 B 环境就是生产环境,A 环境就变成了预生产……如此循环。

    现在的问题是,因为 A 和 B 两个环境经常轮换,导致开发人员经常搞不清楚哪个是生成环境,哪个是预生产环境。

    请问有没有什么好的办法可以快速区分?

    目前运维想的办法是每次上线之后把堡垒机的备注改一下。

    第 1 条附言  ·  2022-12-01 18:31:57 +08:00
    目前很操蛋的是,每次线上出了问题,想登录堡垒机到对应的服务器看日志,必须要先问运维现在的生产是哪几台服务器。
    33 条回复    2022-12-02 10:55:23 +08:00
    singerll
        1
    singerll  
       2022-12-01 09:39:32 +08:00   ❤️ 2
    生产环境不允许开发直接访问,有特殊情况提申请。
    EmptyDX
        2
    EmptyDX  
       2022-12-01 09:41:12 +08:00
    测试环境加个显眼的背景色区分
    brucmao
        3
    brucmao  
       2022-12-01 09:41:30 +08:00
    lcy630409
        4
    lcy630409  
       2022-12-01 09:42:31 +08:00
    生产环境的 apache 给个特殊的标记
    xuanbg
        5
    xuanbg  
       2022-12-01 09:44:36 +08:00
    让运维给一个动态的入口就行了呀,访问的流量切到生产,发布 /测试的网络流量也是流量啊,一样可以切到预生产。这样你们只要使用特点的入口就行了。
    hayhong123
        6
    hayhong123  
       2022-12-01 10:01:23 +08:00
    可以在登陆或者首页接口里 塞入一个环境的 ENV cookie 后端通过 AB 环境不同的配置文件去取 ENV 信息 这样访问就知道在哪个环境了
    rekulas
        7
    rekulas  
       2022-12-01 10:12:49 +08:00
    感觉这种发布机制有问题,a,b + dev 环境是不是好点,dev 开发环境,b 预生产,a 生产不允许直接访问
    dev 测试完毕更新到 b ,打一部分流量过来没问题自动同步环境到 a ,流量全部切回 a ,这样还可以灰度测试也不会冲突
    everyx
        8
    everyx  
       2022-12-01 10:15:12 +08:00
    好奇这种情况,如何涉及到数据库的修改怎么在两种环境下同步数据的,能否分享一下?
    yogogo
        9
    yogogo  
       2022-12-01 10:22:23 +08:00   ❤️ 1
    不是应该每次更新迭代完,两个都生产环境了吗?每次版本更新的时候,每次默认 A 是用预生产测试
    wangritian
        10
    wangritian  
       2022-12-01 10:25:55 +08:00
    好奇怪,也有同事跟我讲过类似的 AB 环境,但服务器资源会不会浪费一半呢?只有生产环境才有大流量。我理解的预生产应该是用于蓝绿发布的临时环境,发布成功后需要把原生产环境下线的
    adoal
        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 。当然你这个场景是切换整套业务系统,那可能需要自己写一些逻辑来在接入层控制。
    james2013
        12
    james2013  
       2022-12-01 10:30:47 +08:00
    觉得这种切换逻辑总会出问题的
    正常来说,A 固定长期是生产环境,B 是预生产.在 B 环境没有问题,将流量切到 B,在 A 上线代码后,将流量重新切回到 A
    oneisall8955
        13
    oneisall8955  
       2022-12-01 10:31:54 +08:00 via Android
    生产和预发布同一个库?
    opengps
        14
    opengps  
       2022-12-01 10:41:18 +08:00
    就不应该用切流量的方式,测试一般是完全隔离,单独部署一套测试环境的域名等信息:单独的测试公众号,单独的测试网址,单独的测试环境等等
    zhouyg
        15
    zhouyg  
       2022-12-01 10:50:27 +08:00
    不应该切服务器,应该把生产环境固化下来
    itechnology
        16
    itechnology  
    OP
       2022-12-01 11:26:30 +08:00
    @rekulas 目前就是你说的这种模式。现在其实有四套环境,开发环境、测试环境、预生产环境和生产环境。

    开发环境是用于后端开发人员和前端开发人员联调用的;联调完没问题后更新到测试环境给测试测,测试测完没问题之后,更新到预生产环境,预生产测试没问题后切换为生产。
    itechnology
        17
    itechnology  
    OP
       2022-12-01 11:27:19 +08:00
    @oneisall8955 不是同一个数据库,但是预生产的数据库是从生产数据库数据拉出来的一个临时库
    Jooooooooo
        18
    Jooooooooo  
       2022-12-01 11:49:46 +08:00
    为啥是这种模式, 正常来讲预发不应该和线上轮换呀. 一般配置也不一样.
    itechnology
        19
    itechnology  
    OP
       2022-12-01 12:55:52 +08:00
    @Jooooooooo 这个是领导定的方案,我们没法改变
    Yuesh1
        20
    Yuesh1  
       2022-12-01 12:58:58 +08:00
    像 JVM 里面的 s1 和 s2 ,标记复制算法
    cdlnls
        21
    cdlnls  
       2022-12-01 13:15:35 +08:00
    我们是在 http 请求头里面增加了一个字段,通过这个字段能识别出后端是什么环境。
    exonuclease
        22
    exonuclease  
       2022-12-01 15:59:27 +08:00
    blue green 发布啊 很正常 不过一般来说 inactive 的会 scale down 的 我们是监控里面有个页面会显示两个 side 的流量 不太精致但是可以用
    q474818917
        23
    q474818917  
       2022-12-01 16:32:53 +08:00
    你们领导是个人才,百年难得一遇的,贵公司应庆幸拥有此人。
    mrzhangrb
        24
    mrzhangrb  
       2022-12-01 16:35:45 +08:00
    🐂
    fiypig
        25
    fiypig  
       2022-12-01 16:46:59 +08:00
    区分开,搞那么麻烦 ,很容易搞出问题吧
    tang00337788
        26
    tang00337788  
       2022-12-01 17:00:47 +08:00
    两套环境的访问地址不一样吧。搞个内部人员隐藏按钮,可以查看访问地址的。
    karott7
        27
    karott7  
       2022-12-01 17:56:27 +08:00
    这么搞肯定出问题,长期下来有几个人能分得清?不都是固定环境么
    zbianbiaos
        28
    zbianbiaos  
       2022-12-01 18:44:41 +08:00
    Linux 的 hostname
    sujin190
        29
    sujin190  
       2022-12-01 18:50:18 +08:00 via Android
    所以不应该把日志自动汇总到统一的日志管理服务器么
    bjzhush
        30
    bjzhush  
       2022-12-01 22:55:06 +08:00
    我之前的办法是不同的环境,zsh 采用不同的主题和颜色。
    你也可以试试,给线上环境加上红色主题,这样会比较容易让人认真对待
    securityCoding
        31
    securityCoding  
       2022-12-02 00:49:59 +08:00 via Android
    这个发布流程是个人才
    itechnology
        32
    itechnology  
    OP
       2022-12-02 09:37:31 +08:00
    @sujin190 目前还没有做,后续据说会考虑用 elk
    WhiteDragon96
        33
    WhiteDragon96  
       2022-12-02 10:55:23 +08:00
    每次发布,写个发布日志
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3360 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.