从 0 到 1 工程实践 (5)

叁叁肆2018-11-13 11:39

欢迎访问网易云社区,了解更多网易技术产品运营经验。


2.1.6 环境划分


在产品开发过程中,为了快速开发,根据不同目的,通常我们都会部署多个环境以完 成不同目的。下面介绍一种常见的环境划分方式。


开发环境 

开发环境是用来给开发者开发时调试及测试使用的,一般不对性能容量之类的做要求。 开发人员开发完成后,需要根据测试人员给出测试用例进行基本的冒烟测试,这个冒烟测 试一般在开发环境进行,这个环境由开发人员管理,代码一有更新,就可以随时更新这些 环境。注意,这里的开发环境不是指开发人员的本地开发环境。


测试环境 

测试环境主要是给测试人员使用的。它的主要目的是给测试人员一个相对可控的环境, 不会因为代码更新等原因就更新环境,从而不会导致测试人员需要不断回归已经测试的用 例是否会因为新进的代码而产生问题。测试环境由测试人员管理,一般都是一轮测试完成 后,开发人员对相关问题进行修复,然后由测试人员进行更新。 


集成测试环境 

一般产品到一定阶段后,都会由多个模块组成,模块之间相互依赖。开发者在开发环 境或者测试人员在测试环境中,更多的是关注模块内部的功能点,甚至在需要的时候,会 去 Mock 所依赖的其他模块提供的服务,从而不至于因为其他模块的开发进度影响到本模 块的开发测试进度。而集成测试环境,主要目的是确保各个模块集成起来后的功能是否符 合整体产品的预期,模块之间的沟通是否符合之前定义好的接口规范。


预发布环境 

当所有功能通过测试人员的测试后,可以在上线到生产环境前,发布到预发布环境。 预发布环境一般与生产环境一致,主要目的是在正式上线前对要发布的版本做一次上线演练,减少正式上线的风险。上线到预发布环境后,除了开发测试人员,其他非技术人员, 如产品、交互、视觉等就可以在这些环境中对要上线的版本进行体验。


生产(线上)环境 

生产环境是线上正式运行的环境,要求所有功能都通过测试并保持稳定。


环境一致性问题 

应用对不同运行环境(比如需要哪些软件等)的需求一般需要通过系统管理员之类 的角色来做变更,不同环境(开发、测试、生产)的变更都是独立进行的。一个典型的 开发过程,首先是开发者根据开发需求,在开发环境配置各种环境依赖;开发完成后, 然后根据我们的环境需求配置测试环境;最后测试联调完成后,配置线上生产环境,完 成上线过程。在这个过程中,各个环境的配置是相对独立的,虽然环境需求一致,但在 切换到一个全新的环境时,按照依赖需要安排各种依赖,在这个过程中,软硬件架构等 原因导致虽然依赖的软件一致,但实际的实现或者某些细节不一致,就会对应用的稳定 运行带来风险。


容器世界中的 Docker 镜像就可以解决此类问题,它可以像代码管理工具一样,让你管 理代码的运行环境。通过把运行环境镜像化,就可以在开发测试及上线过程中都使用同一 套镜像,并且这个镜像可以由开发人员完全把控,开发人员只要在开发阶段确定了开发所 需要的运行镜像,后续的流程都基于此镜像进行,保证运行环境的完全一致性。同时,镜 像也支持版本化,如果你的镜像因为环境变更而影响了程序运行,可以轻松回滚到这个镜 像的前一个版本。 

文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著


网易云计算基础服务深度整合了 IaaSPaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用