生产环境与测试环境有差异导致一次失败的发版经历

来源:企鹅电竞登录
发布时间:2024-03-28 10:45:45

...

  大家都知道,对于一个新的项目上线,事前有很多工作要准备,这些工作准备不好,会导致该项目在上线的时候,出现很多问题,今天就和大家伙儿一起来分享一个失败的上线经历。

  由于新项目上线,所以涉及的地方有很多,前端项目、NGINX、网关、后端、K8S、线上数据库等。如图所示:

  1、在前端项目部署的时候,运维发现前端设置的端口不符合线S中设置的规范。后让前端修改重新打包部署。

  2、后端项目部署后,在K8S中启动项目的时候发现项目起来了,但容器没有起来。与运维讨论后得知项目的端口不符合K8S的设置,导致容器无法启动。后端修改端口重新打包发版。

  3、在项目都启动了且文件配置好之后,访问系统来进行测试,发现前端调后端接口的时候报错。查看nginx配置发现,新项目的请求配置是照着测试环境配得,但测试环境配置nginx的时候是没有经过网关,直接请求后端的。运维这边又重新配置nginx。

  4、nginx重新配置后,再次进行系统访问,还是报错。这次请求到了网关,但网关直接返回报错。看后端项目日志,发现请求没有到后端。在这里就猜测是网关的问题,于是让运维将后端项目的端口映射输出,用postmain访问,看能不能调通接口,测试发现,直接访问能请求到后端,并且能正常返回。这个网关的服务配置可能没有配置好。重新检查了网关项目的配置且重新发布,结果还是一样的问题,这表明网关没问题。猜测是不是注册中心出了问题,又重启了注册中心,但还是一样。(这里找问题花的时间最多,所有可能有影响的地方都去排查)

  5、直到后面运维发现,后端项目有一个设置有问题。在经过网关时,K8S会根据服务名从注册中心找到对应的服务,结果后端项目有一个设置和K8S设置的要求不一样,导致没办法找到后端的服务。将后端项目将对应的配置改了,重新发版后,项目终于好了。

  整个新项目上线本来只需要几分钟就能搞定的,结果整整花了2个小时才搞定。对于这次的新项目上线出现的问题做多元化的分析,得到以下几点原因:

  2、测试环境与线上环境不一样,测试没有用K8S而线、后端项目是开发自己拷贝其他子项目的框架,对其中的设置,有部分不太懂。

  4、公司内部项目,没有和线上一样的预生产环境,进行预发布,提前处理问题。