环境混用来带的影响
一:背景介绍
本篇博客是对项目开发中出现的环境混用来带的影响进行的总结并进行的改进。目的是将经历转变为自己的经验。通过博客的方式分享给大家,大家一起共同进步和提高。
背景
之前公司是使用开发环境的产品godone中的上传文件的功能将生产环境的B产品的安装包上传到开发环境的fastdfs服务器中,并将开发环境的产品godone上传文件接口返回的安装包地址的域名替换为生产环境的B产品的域名。
如:https:// 生产环境B产品域名/godone/M00/00/0D/wKg82Jr3yOEPb5mAAAAJsndS8436.apk
再通过将产品B下载地址转二维码支持官网的扫描二维码下载生产环境的B产品的安装包。
出现的事故
- 访问产品B的下载地址,出现超时报错如下截图:
排查:去开发环境的fastdfs服务curl访问www.baidu.com很慢,怀疑是哪儿连接有问题,导致超时。重启了本机的nginx也不行,最后重启了系统,最后解决了问题。 - 各个环境混用的问题
二:思路&方案
出现事故的原因很可能是哪儿的连接出现问题,虽然最后通过重启系统解决了这个问题但是具体的原因没有找到。
从这个案例中出现最主要的问题就是生成环境与开发环境混着用。
环境混用的危害
1.由于环境混用,导致原有(环境配套,生产配生产,测试配测试,开发配开)的隔离被破坏,将会导致各个环境受到影响的因素增多更加容易出现事故。如:生产环境的产品A,配套使用了开发环境产品B,由于开发环境产品B进行迭代升级,将影响生产环境不分功能无法使用,什么生产环境完全无法使用。
2.通常情况下,处于充分利用服务器资源的条件下,产品的生产环境配置>测试环境>开发环境,一方面资源得不到充分利用,另一方面各个产品的环境进行混用将会影响甚至导致出现生产事故。
如何彻底避免环境混用的问题
从管理手段上:
1.建立相应的文档规范以及制度说明禁止环境混用,以及说明出现环境混用的危害,以及一旦进行环境混用的惩戒措施。
2.通过审批的方式,如果需要生产A产品需要依赖生产B产品需要发送类似的审批,最后需要配置结果附上进行闭环,保证环境使用正确。
3.实施代码审查,开发完成的代码或者修改的服务器配置等等,需要进行代码审查,来保证环境使用正确。
从技术手段上
1.分配权限,或者是权限隔离,之后xxx级别的人,或者什么角色的人。可以进行环境配置。
2. 通过脚本的方式自动检测配置中心中是各个环境配对正常。
技术知识点
nginx如何处理请求
nginx如何处理请求的官网地址:How nginx processes a request
1.Nginx首先根据服务器块的监听指令监听请求的IP地址和端口。然后,它根据与IP地址和端口匹配的服务器块的server_name条目测试请求的“Host”报头字段。如果服务的名字没有找到,这个请求将被默认的服务器处理。 如果没有显示声明,这个默认的服务器是第一个服务器。
2.之后nginx会选择一个location来处理一个请求。nginx首先搜索给出的最特定的前缀位置,不管列出的顺序是什么。在上面的配置中唯一的前缀位置是"/"。因为它匹配任何请求,所以它作为最后的匹配策略。然后nginx按照配置文件列出的顺序,从上往下进行匹配,一旦完全匹配上,将停止搜索,nginx将使用这个位置,如果没有匹配上,那么将使用前面找到的最特定的前缀位置。
nginx处理请求示例
nginx处理请求http://push.ynote.youdao.com:6008/socket.io 并且ip地址为192.168.119.59.
server { listen 192.168.119.59:80; server_name datacollector-drcn.dt.hicloud.com; ... } server { listen 192.168.119.59:80; server_name push.ynote.youdao.com:6008; root /data/www; location / { index index.html index.php; } location /socket.io { expires 30d; }
首先匹配服务器,根据ip和端口号进行匹配,下面的两个服务器都可以匹配上,再匹配的服务器块的server_name条目测试请求的“Host”报头字段,所以最终匹配上的是第二个server。
再根据location进行匹配,首先找最特定的前缀位置和"/"匹配上,在按照从上到下顺序匹配最终与/socket.io匹配上。然后使用该location中的命令处理请求。
FastDFs(文件上传 文件下载)
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括文件存储,文件同步,文件访问(文件上传,文件下载)等,解决了大容量存储和负载均衡问题,特别适合以文件作为载体的在线服务,如相册网站,视频网站等。
文件上传流程
相关术语
1.TrackerServer 跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录storage server 的状态,是连接Client 和 Storage server 的枢纽。
2.Storage Server 存储服务器,文件和meta data 都保存在服务器上
3.group 组,也称为卷。同组内服务器上的文件是完全相同的
4.文件标识 包括两部分,组名和文件名
5.meta data 文件相关属性,键值对(key Value Pair)
文件上传成功之后,会返回文件ID号:返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
如:
文件上传成功了,但我们无法下载。因此安装Nginx作为服务器以支持Http方式访问文件。同时,后面安装FastDFS的Nginx模块也需要Nginx环境。
四:总结
1.对于一个问题的解决方式,不止有一种方式,通过灰度认知,分析多种解决问题的方式,最后黑白决策选择出最好的一种解决问题的方式。
2.对于暂时不知道答案的问题,可能是能力不够,知识面不够。但是需要通过记录的方式记下来,当再次遇到或者有想法的时候能够快速回忆起来。这样会有豁然开朗的感觉。
3.对于如何彻底避免环境混用的问题,如果大家有更好的想法,特别欢迎评论给博主,感激不尽。
五:升华
- 隔离,不仅在此处进行了体现,分层,接口也是一种隔离。
- 对于nginx、以及fastDFs的还需要进行后续系统的学习,目前只是知道有这个东西,有些什么功能。