环境分离与境内外两套架构:开发、预发、生产怎么切,中外链路差在哪
讲清开发/测试/预发/生产环境为什么必须分离、同一份制品如何靠配置流转,并系统对比面向中国大陆与面向海外的两套发布架构在服务器选址、备案、CDN、网络可达性上的本质差异
- 理解开发/测试/预发/生产四套环境的职责与隔离原则
- 掌握「一次构建、配置注入、多环境流转」的发布方式
- 系统理解境内架构与境外架构在服务器、备案、CDN、网络可达性上的差异
- 能判断自己的产品该选境内、境外还是双栈架构
同一套代码,要在多个「世界」里安全运行
你写的代码会依次经历:自己电脑上开发、测试验证、上线前预演、最终对外生产。如果这些阶段共用一套数据库和配置,一次测试就可能删掉真实用户数据。环境分离和「代码如何在环境间流转」是发布工程的第一课;而当产品要同时面向中外用户,还会面对两套差异巨大的网络与合规架构。
四套环境各干什么
环境分层(从左到右越来越接近真实用户)开发 dev :本地/开发分支,连测试数据,可随便改、随便重启测试 test :合并后自动部署,跑自动化测试、给测试同学验证预发 stage :和生产几乎一致(同配置结构、脱敏数据),上线前最后演练生产 prod :对外正式环境,真实用户、真实数据,变更受控、可回滚
开发/测试环境绝不能连生产数据库,一次未过滤的删除或重置就是事故。环境之间用不同的数据库、不同的密钥、不同的访问权限隔离;生产配置和密钥只在生产环境注入、最小范围可见。预发环境的价值在于「用和生产一样的结构先跑一遍发布流程」,把问题挡在真正上线之前。
一次构建,多环境流转
正确做法呼应 Stage15 的十二要素:代码只构建一次,产出一个确定的制品(静态包/Docker 镜像/安装包),这个制品原样在测试→预发→生产间流转,环境差异全部通过环境变量/配置注入,而不是为每个环境改代码重新构建。这样你在生产跑的东西,就是测试验证过的同一个东西,避免「测试环境好的、生产挂了」。
代码(一次) -> 制品(不可变、带版本号)
├─ 注入 dev 配置 -> 开发环境
├─ 注入 test 配置 -> 测试环境
├─ 注入 stage 配置-> 预发环境
└─ 注入 prod 配置 -> 生产环境(灰度→全量,可回滚)境内架构 vs 境外架构:差异是结构性的
面向中国大陆用户和面向海外用户,不是换个服务器那么简单,而是从「服务器在哪、要不要备案、用谁的 CDN、接哪些第三方、网络通不通」全面不同:
面向中国大陆· 服务器地域:大陆云节点(延迟低、备案前提)· 备案 / 资质:域名 + 大陆服务器需 ICP / APP 备案· CDN / 静态:国内 CDN(需备案域名接入)· 网络可达性:大陆访问海外不稳定、海外访问大陆慢· 第三方生态:国内支付 / 推送 / 地图 / 统计 / 大模型· 用户数据:数据本地化要求趋严 面向海外· 服务器地域:就近海外节点(香港 / 新加坡 / 法兰克福等)· 备案 / 资质:不需要中国 ICP,守目标国法规(GDPR 等)· CDN / 静态:Cloudflare 等全球 CDN· 网络可达性:就近接入全球用户· 第三方生态:海外支付(Stripe 等)/ FCM 推送 / 海外服务· 用户数据:GDPR / CCPA 对跨境与同意的要求
物理距离决定延迟(光绕地球一圈也要上百毫秒),此外不同地区的网络互联、跨境链路与监管政策,会使「大陆直连海外服务器」又慢又不稳,海外用户访问大陆节点同理。所以选址原则是「服务器离用户近」:主力用户在哪,计算与数据就放在哪。这也是为什么一个产品要同时服务中外时,通常不是一套架构硬扛,而是两套就近部署。
三种架构选择:单境内、单境外、双栈
双栈不是把系统复制两份那么简单,要决定:账号体系是否打通、用户数据按地区存储与合规(数据跨境受限)、内容与版本是否分地区运营、配置如何按地区切换。独立开发者更现实的路径通常是「先单点做透一个市场,验证后再开第二栈」,朋友好学当前以国内为主(大陆服务器+备案进行中),海外则用独立品牌 pygoodly 单独上架,正是「先分而治之、避免一套硬扛」的思路。
双栈时数据和账号怎么处理(选学)
常见三种:完全隔离——中外两套独立账号与数据库,最简单、合规风险最低,但同一用户跨区不通;统一账号、分区数据——一套身份服务,内容与业务数据按地区落库,体验连贯但要处理数据跨境合规与一致性;一套后端多区域部署——按地区路由到最近区域、跨区同步必要数据,体验最好但运维最复杂。选型取决于业务是否真的需要跨区互通。对早期产品,方案往往是性价比最高、踩坑最少的选择。
关于环境与制品管理,下列做法最稳妥的是?
本节小结
环境分开发/测试/预发/生产,逐级接近用户,必须隔离数据库与密钥、绝不用生产库测试,预发用与生产同结构做上线前演练。制品只构建一次、不可变带版本号,靠环境变量在各环境流转,保证被测即所上线。境内外架构是结构性差异:大陆用户用大陆节点(就近+备案前提)、国内CDN与第三方、数据本地化;海外用就近海外节点、无需中国ICP、全球CDN、守GDPR等;网络可达性源于物理距离与跨境链路,原则是服务器离用户近。三种选择单境内/单境外/双栈,双栈要决策账号是否打通、数据分区合规、内容分版,早期建议先单点做透一个市场再开第二栈。
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
国内各应用商店通常要求独立渠道包或渠道标识,用于分别提审、升级提示和来源统计。正确做法是所有渠道共用同一份代码,只在构建时注入不同渠道号,用构建脚本一次出齐,并逐一回验每个包的签名、版本号和渠道标识;手工改包最容易导致某个商店常年停在旧版、用户一直收不到更新。