开发中遇到的问题记录

这篇博客探讨了服务器请求超时、数据库与缓存数据不一致、微服务调用解析报文失败、读写分离数据库不一致以及路由错误等常见问题。针对这些问题,作者提供了详细的分析过程和解决方案,包括优化查询逻辑、调整缓存刷新策略、修复报文解析错误以及确保读写分离数据一致性。同时,博客还提到了测试中应注意的SQL优化技巧。
摘要由CSDN通过智能技术生成

1、服务器请求超时
    1、现象:大部分请求正常,少部分请求超时
    2、分析过程:
        1)、查看日志程序逻辑是走老的代码,通讯耗时3-4s。怀疑是我们做的开关未加入到缓存存中,重启应用发现请求OK。初步结论:数据库数据与缓存中不一致
        2)、现象时常发生,查看服务器CPU,内存的使用情况,发现CPU和内存全部都爆掉了,并且发现一直有个线程占用CPU资源未释放。
        联系DB管理员,定位线程未释放资源是由哪些的请求造成的。
        把相应的请求报文一个个请求去试,发现死循环,原因:调用外部服务的接口时续传正好20条的时候,续传未退出.

2、数据库与缓存数据中不一致
    1、场景:根参数下有多个子参数,定时任务会把参数刷新到缓存中(按根参数版本为子参数的最新维护时间(秒级))
    2、BUG:在同一秒时间内,更新同一根参数下两个子参数。并且定时任务正好在维护两个子参数之间,前面子参数刷新把根参数版本刷新为10:00:00,
    定时任务把参数刷新到内存。没问题,后面子参数维护时间也为10:00:00,定时任务根参数版本未发生变化。就不会去刷新加载到内存
    3、解决办法:延迟1秒钟加载,定时任务刷新时,刷新1s中之前的参数

3、微服务调用解析报文失败(自研框架)
    1、现象:微服务调用建立连接成功,获取响应报文也成功,但在解析报文成数据对象时失败
    2、源码解析过程:
            1)通过应用名去微服务中获取实例(IP地址,端口),这个过程做了负载均衡,及实现了链路追踪
            2)通过Socket通讯建立连接,成功后,发送请求。将接收的字节流转化为字符串(为什么转化字符串),将字符串解析成Java对象
            3)将输出接口实现加入到共享域DDZ中(不加入会报错),将字符串转为Map,再将对象转化为你需要的对象(反射)。
            4)框架会将类名转为全大写,驼峰式写法。在解析成这个对象时类名不一致会解析失败

4、读写分离数据库不一致
    1、现象:在执行UAT测试时:通过一个入口(写库)将SQL执行成功,连接数据的客户端连的是读库,发现执行成功的sql,读库数据未发生变化
    2、思考:读写分离数据一致性问题(原理,及解决办法)

5、路由出现错误:
    1、现象:进行微服务调用,路由地址错误,路由到一个陌生的IP地址上(怀疑是个人进行调试,将配置信息改了),直接报错
    2、解决:1)直接换个环境
             2)直接修改路由配置


测试支持的问题:
    1、


常见的SQL:
    1、两张表连查取前N条记录:优先最小范围查询。列如:查询国别为中国的数据,先从主表中筛选出国别为中国的数据在连表查,而不是先两张表左连接在查询
    2、where 条件过多,应把小范围放前面
    3、围绕索引,一些失效的问题,模糊不能使用%放前面,排序尽量使用索引列排序
    4、建表时字段应不能为null,空值应使用空串代替

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值