首页 > 其他分享 >服务器迁移踩的坑

服务器迁移踩的坑

时间:2022-10-22 14:23:08浏览次数:57  
标签:缓存 问题 服务器 迁移 数据 测试环境

一、问题由来

  当前参与开发的项目已经上线,并且发布了很多个版本,在服务器上面稳定运行。最近接到通知,需要做服务器迁移,

迁移的东西很多,服务应用需要迁移,数据库需要迁移,redis缓存数据库缓存需要迁移,还有网关服务,配置中心服务等等。

反正一听到这个消息,就知道工作量不小,还好这一块主要是负责人在做,自己作为开发人员也会参与迁移,比如协助测试

人员判断问题是由于业务引起的还是系统迁移导致的。如果在测试过程中发现其他问题,也需要积极的配合解决。

测试环境首先进行迁移后,测试人员正在进行系统功能正确性的验证,测试结果一切正常。然后高级测试人员开始进行系统

性能的测试,立马发现问题,有两个对外提供服务的接口性能不达标,让我们开发去看一下是怎么回事。自己立马找测试人员去

测试,测试的结果确实很慢,好几次请求都需要20s左右才能返回数据,这么慢系统还怎么用呢?

二、问题分析

   发现问题后,我立马在原来的测试环境进行验证,并没有复现同样的问题,原来的测试环境请求同样的接口,传递同样的参数

请求时间都正常,1s内能够正常返回数据,那这到底是怎么回事呢?下一步能够想到的办法就是在这两个接口中的关键位置打印日志,

通过打印的日志来判断到底是哪个地方出的问题。自己在最开始开发的时候只打印了少量的日志,还不足以排查目前遇到的问题。添加

日志后,重新部署,发现某一个数据过滤的方法被频繁调用,并且每调用一次就需要从缓存中去取一次数据,负责人初步判断就是由于

这个方法在执行的时候,花的时间太长,导致程序执行慢,让我立马去查看。

三、解决方案

  初步找到问题后,自己开始对这个问题进行分析,两个接口里面都处理了同一种类型的数据,那基本可以判断就是在处理这种类型

数据的时候太慢,导致性能出现问题。接口获取数据的方式很简单,先从缓存中获取数据,然后过滤,之后是做计算处理,有的数据不能

直接返回,最后是转换为调用方需要的格式进行返回。问题就出在数据过滤这一步,过滤的方式也很简单,首先循环原有的列表数据,拿到

主键ID,在嵌套循环用户请求时传入的多个编码进行过滤,从缓存中取数据。假设列表数据有100条,用户传入的过滤编码有5个,那么

从缓存中取数据的次数就是100 * 5 = 500次;

  按照系统原有的设计,所有编码对应的权限数据,都会存入缓存中,因此优化方案为,先从缓存中根据用户传入的编码,取出当前用户所

具有的权限列表,然后在根据这个权限列表去过滤列表数据。方案敲定之后,自己着手进行代码改造,大致花了一两个小时的时间才改造

完成。还是以上面示例,这时候取缓存的次数变为5次,就将用户传入的编码对应的权限全部取出,取缓存的次数大大地减少。代码修改

完成后,再次部署代码进行测试,发现效率大大提升,单次请求的时间降低到2s左右。性能以肉眼可见的方式大幅度提升。

  代码层面做优化后,继续回来分析问题,原有测试环境也是采用同样的处理方式,为什么没有出现这个问题呢?这就让人很疑惑,代码

是有优化的空间,之前生产上面的服务都是正常运行的,也没有出现问题。然后继续分析,生产上面的数据量比较少,只有不到200条的

数据。出问题的新环境,测试数据量在三百多导致请求非常缓慢,原有测试环境数据量也是在三四百的样子却正常。那基本可以判断一点,新

环境的服务器性能比较差。修改完代码重新部署后,性能已经极大的提升,可还是不能满足系统设计的要求。经过负责人的进一步排查,确定是

云redis服务器非常慢导致的一部分原因,原有测试环境redis使用的物理服务器,所以性能很好。新环境使用redis云服务器,网络耗时太久,

导致性能跟不上。自此,总算是搞清楚导致接口查询慢的所有原因,问题解决方案也已经敲定,让自己学习到的最重要的一点就是嵌套循环一定

要慎用,一不留神就会导致效率大大地打折扣,认真吸取这次深刻的到经验教训!

标签:缓存,问题,服务器,迁移,数据,测试环境
From: https://www.cnblogs.com/yilangcode/p/16816027.html

相关文章

  • web服务器4
    consthttp=require('http')constserver=http.createServer()server.on('request',(req,res)=>{letcontent='<h1>404Notfound!</h1>'consturl=r......
  • Leanote蚂蚁笔记-私人云笔记服务器搭建
    title:Leanote蚂蚁笔记-私人云笔记服务器搭建date:2020-02-2221:53:24categories:[IT,技术][IT,软件,程序][IT,软件,搭建与配置]tags:leanote蚂蚁笔记笔记......
  • 服务器ssh经常一段时间就断掉解决办法
    #vim/etc/ssh/sshd_config找到下面两行#ClientAliveInterval0#ClientAliveCountMax3去掉注释,改成ClientAliveInterval30ClientAliveCountMax86400这两行的意思......
  • 高精度NTP网络时钟系统(NTP时间服务器)技术参数说明
    高精度NTP网络时钟系统(NTP时间服务器)技术参数说明高精度NTP网络时钟系统(NTP时间服务器)技术参数说明京准电子科技官微——ahjzsz简介京准电子科技有限公司研制开发的标......
  • 有哪些好用的深度学习的GPU云服务器平台?
    ​​​​简单来说,如果你是长期使用GPU服务器,建议选择带显卡的硬件服务器,综合性能也比较好。如果是用来进行短周期或者临时使用,建议租用云服务器,既方便又快捷,可按需购买,可以......
  • 服务器性能调优——Tomcat 数据库连接池配置,数据库连接池
    前言:关于并发访问,针对不同的项目,有不同的考虑。如果是商用的项目,那么并发是一定要支持的,同时考虑多少用户同时在线访问。有的数据访问量是百万或者千万级的,那一定要支持并发......
  • 有哪些好用的深度学习的GPU云服务器平台?
    ​​​​简单来说,如果你是长期使用GPU服务器,建议选择带显卡的硬件服务器,综合性能也比较好。如果是用来进行短周期或者临时使用,建议租用云服务器,既方便又快捷,可按需购买,可以......
  • 关于服务器项目日志的一个便捷处理
        发现运维同事的项目日志处理比较便利,值得借鉴。即使在开发环境中,这样处理也是不错的。    比如项目rtp部署在了/home/www/......
  • k8s集群yaml文件方式迁移
    一、安装依赖工具实际就是导出数据为json,通过jq删除一些不需要的字段,然后再通过yq转换为yaml格式(不安装直接使用json格式也可以安装,这里主要为例方便查看),这么麻烦主要是......
  • sysbench--OLTP数据库性能测试与服务器基准功能测试工具
     sysbench是一个基于LuaJIT的可编写脚本的多线程基准测试工具。它最常用于数据库基准测试,但也可用于创建不涉及数据库服务器的任意复杂的工作负载。 sysbench的作用:sys......