部署环境
列举环境
根据 wikipedia,工业界总是把开发环境和生产环境分离出来,中间还有若干个 stages。
结构化的发布管理允许分阶段部署(rollout),测试和在遇到问题时回滚(rollback)。
常见的环境有:
4-tier architecture is development, testing, model, production (DEV, TEST, MODL, PROD),
Quality Control (QC), for acceptance testing; sandbox or experimental (EXP)
Another common architecture is development, testing, acceptance and production (DTAP)
Development
构造对软件的变动的环境,大多数情况下仅仅是开发者的工作站(workstation)。在这个环境里实验变更和进行单元测试。集成环境有时候也可以被认为是开发环境,在集成环境里专门对 repo 里的源代码 copy 进行构建和单元测试。
Testing
执行对新代码的自动化或非自动化测试的环境,在这个环境里测试失败需要联系开发者消除错误,在这个环境测试全通过则可以把代码晋升到下一个部署环境。
Staging
A stage or staging environment is an environment for testing that exactly resembles a production environment.
Staging 环境要尽可能地合生产环境相似,达到 replicate 的程度。它寻求尽可能完全镜像化生产环境,可能会连接生产的服务和数据,比如数据库(大多数公司,生产、预发、staging 使用一套数据库)。这类环境通常处于一套远程服务器上,和 dev 和 testing 有本质区别,会真正影响系统的网络活动。
staging 环境的首要用途是在应用到生产环境之前,测试安装、配置和迁移脚本和过程。
staging 环境可以拿来做性能测试-但这对 staging 环境的物理机条件有一定要求(可能需要完全复制生产环境的物理配置),staging 环境唯一的好处是可以隔离生产流量。
staging 环境也可以被用来预览新特性或者挑选顾客进行新的外部依赖的新版本集成-这一功能事实上就是大家经常用来进行 ab testing 的灰度环境(Gray/Grey/Canary)。
staging 环境没有真实消费者流量。
staging 环境可以直连生产数据库,也可以专做一个 staging db,专门存放 dummy value。
生产环境
经常被称作“活/直播”环境,因为它直接和真实的消费者交互。
除非拥有热替换/热部署的能力,否则安装新代码总是会引起重启,这要求应用有被打断的功能,我们要么在 LB 背后逐一重启应用,要么提前重启应用后再切换流量。
为了防止 last-minute problems 能被发现,部署的 fraction 不一样。