程序员必知必会的几种环境
开发环境
开发环境,顾名思义,就是程序员们进行Coding的本地环境并且使用的配置文件中的服务配置为开发所用,如MySQL、Redis等数据相关服务,可以任意对数据进行操作。
如此看来开发环境配置文件相对散乱,脏数据较多,开发环境因人而异不统一(比如JDK,Maven等,但一般要跟线上保持一致,可以考考虑环境是否向下兼容)。
比如一个场景:一个Feature Leader 让小徐同学去开发一个新的功能或者去修改一个Bug或升级一个协议的时候,小徐同学马不停蹄的梳理需求,clone代码,梳理代码逻辑,并开始在自己的生产工具(就是电脑)上进行开发,Profile为测试环境配置项。当然了我们公司强制要求开发完成单元测试,并且覆盖率达到80%以上。
测试环境
当一个Feature开发完成之后,并且在本地完成自测(我就没有那么庆幸了,我们公司的引擎没有可视化节点,只能开发完成之后直接放到测试环境服务器进行测试),可以在测试环境进行模拟线上环境进行功能测试。测试环境是将我们开发的代码,部署到测试环境服务器上,来测试功能,开发过程中的所有分支均可以部署到测试环境中,在Jenkins自动化部署中可以设置所有发布的分支。
一般如果测试用例比较完善的话,所有问题都是可以测试出来的,一般会看看有什么异常,以及测试时候打印的日志信息。在7.8日,我由于一个问题在测试环境没有测试出来,导致了线上问题。函数参数传入值为null,但是进行setter的时候,实体类中的变量为int类型,导致了NOP(庆幸的是没有影响线上业务,百万QPS情况下,可能几秒中就是好几万的损失)。所以测试环境还是非常重要的。
总之:
1、测试环境主要要看一下打印的日志信息;
2、新开发的Feature是否可用;
3、日志打印语义是否正确(warning,error,info等)。
预发布环境
预发布环境是测试环境到生产环境的过渡,测试环境可能会受到一些限制,可以到预发布进行验证,保证产品的上线质量。预发布的代码首先会保证与线上要提交的代码要完全一致,这样才能有效的验证新业务代码是否生效可用。同时一般预发布环境的访问域名或ip跟线上不一致,但是一般会链接到生产环境数据库,要防止产生脏数据。预发布也要小心呦!!
灰度测试(线上部分机器)
分布式环境下,一般业务代码会部署到很多台机器上,当然这也跟公司的业务量有关,有时也会根据业务量进行服务扩展。我们公司一个引擎服务就部署在了60多台服务器上,所以一般上线的过程中,会针对2~3台进行优先上线,验证新的功能是否起作用,如果出现问题,可以及时回滚。其实恢复测试有时候就像A/B test(关于a/b test还有一个小插曲,在爬某程的时候,cookie中有abtest字段,我一致没有研究出来是如何生成的,有兴趣的同学可以研究下)测试方案,人群分为A组和B组,看那个测试对线上业务更加合适进行判断。不至于对大量用户造成影响。关于在灰度环境测试什么的问题,因公司而异,我们公司是有专一的测试工具针对不同的场景可以使用。
生产环境(线上环境)
线上环境,就是用户是使用的环境,一般到线上的feature都不会出现问题,哪怕存在软件缺陷,也要后期逐渐挖掘升级。Jenkin上线,多台实例分组上线即可。
寄语
喜欢或感兴趣的事情,尽管去做去学就好了,不要让我行不行可不可以这些问题,成为成长的羁绊!!!感觉有用就关注我呀
个人公众号:看相声也要敲代码
网友评论