大家都知道,对于一个新的项目上线,事前有很多工作需要准备,这些工作准备不好,会导致该项目在上线的时候,出现各种问题,今天就和大家分享一个失败的上线经历。
一、介绍下项目上线的流程
由于新项目上线,所以涉及的地方有很多,前端项目、NGINX、网关、后端、K8S、线上数据库等。如图所示:
具体步骤如下:
1、创建线上数据库,创建表等。
2、NGINX配置。
3、网关配置。
4、前端项目部署。
5、网关项目部署。
6、后端项目部署。
7、K8S中启动项目。
本来一个很简单的项目上线,却遇到了各种问题。下面具体介绍下遇到的问题。
二、遇到的问题
1、在前端项目部署的时候,运维发现前端设置的端口不符合线上K8S中设置的规范。后让前端修改重新打包部署。
2、后端项目部署后,在K8S中启动项目的时候发现项目起来了,但容器没有起来。与运维讨论后得知项目的端口不符合K8S的设置,导致容器无法启动。后端修改端口重新打包发版。
3、在项目都启动了且文件配置好之后,访问系统进行测试,发现前端调后端接口的时候报错。查看nginx配置发现,新项目的请求配置是照着测试环境配的,但测试环境配置nginx的时候是没有经过网关,直接请求后端的。运维这边又重新配置nginx。
4、nginx重新配置后,再次进行系统访问,还是报错。这次请求到了网关,但网关直接返回报错。看后端项目日志,发现请求没有到后端。在这里就猜测是网关的问题,于是让运维将后端项目的端口映射输出,用postmain访问,看能不能调通接口,测试发现,直接访问可以请求到后端,并且能正常返回。这个网关的服务配置可能没有配置好。重新检查了网关项目的配置且重新发布,结果还是一样的问题,这表明网关没有问题。猜测是不是注册中心出了问题,又重启了注册中心,但还是一样。(这里找问题花的时间最多,所有可能有影响的地方都去排查)
5、直到后面运维发现,后端项目有一个设置有问题。在经过网关时,K8S会根据服务名从注册中心找到对应的服务,结果后端项目有一个设置和K8S设置的要求不一样,导致无法找到后端的服务。将后端项目将对应的配置改了,重新发版后,项目终于好了。
三、遇到问题的原因分析
整个新项目上线本来只需要几分钟就能搞定的,结果整整花了2个小时才搞定。对于这次的新项目上线出现的问题进行分析,得到以下几点原因:
1、项目上线的人员没有微服务部署经验(运维人员除外)。
2、测试环境与线上环境不一样,测试没有用K8S而线上用了。
3、后端项目是开发自己拷贝其他子项目的框架,对其中的设置,有部分不太懂。
4、公司内部项目,没有和线上一样的预生产环境,进行预发布,提前处理问题。
领取专属 10元无门槛券
私享最新 技术干货