线上问题集锦(1)

记录线上环境碰到的问题:

  1. 新版本上线如何切换版本?

  2. 蓝绿发布?

  3. Spring Task定时任务弊端有哪些?怎么解决?

    弊端:

    • 会有时间差,导致程序不严谨。
      10.01下单,11点定时检查超过一小时未付款的订单,此时还差一分钟,需要等到12点定时查询才能删除。
    • 不支持集群
      假设使用10台机器,每次就会运行十次。
      解决方案:使用Quarz
    • 会对数据库全表搜索,影响数据库性能。
      select * from order where status = 1; 查询状态为1(未支付)的订单。因为状态未设置索引,则全表扫描。
      定时任务只适用于小型轻量级项目,传统项目。

    如何解决?

    • 使用MQ消息队列,建立延时任务(队列)
      10.12下单,11.12检查,状态如果还是未支付则删除。
  4. 对于超卖问题如何解决?

    并发较小的项目(用户量小,传统项目):

    • 在方法上加上synchronized (性能低下)
    • 乐观锁 (性能低下,数据库连接有限,数据库层面也有锁)
// sql
update order set count = count - #{ buyCount } where id = #{ id } and count > #{ buyCount }

//java
int result = decr(id,buyCount);
if( result != 1){
throw new RunTimeException("库存不够!");
}
  • 并发量较大:

    分布式锁-> zookeeper,redis

  1. Mybatis 分页插件嵌套查询BUG怎么解决?
    Mybatis官方阐述。在这里插入图片描述
    解决方案:

    • 前端懒加载(前端先查询主表,再根据主表ID查询附表)
    • 后端懒加载(后端先查询主表,再根据主表ID查询附表)
    • mybatis select属性(select为查询id对应 ,column 传参,从上级select参数中获取 )
      在这里插入图片描述
  2. 谈一谈分布式会话session

  3. spring aop 嵌套切入的问题怎么解决?
    原因:

public String say(String a) {
 	say2(a);   // this.say2() ,并不会使用切面中的代码
}

public String say2(String a) {
    return a + a;
}
  • 解决方案一:
// 注入自己
@Autowired
private A a;
public String say(String a) {
 	a.say2(a);
}

public String say2(String a) {
    return a + a;
}
  • 解决方式二:
//使用AopContext.currentProxy())
public String say(String a) {
 	((OneBean)AopContext.currentProxy()).say2(a) ;
}

public String say2(String a) {
    return a + a;
}

  1. 信息脱敏,跨域,防盗链

    • 信息脱敏:根据相应算法对信息替换成*
    • 跨域:后端配置
      在这里插入图片描述
    • 防盗链:防止其他网站盗用图片、视频等资源,可配置nginx (server块)
      在这里插入图片描述
  2. 分布式session?

  3. 负载均衡hash算法宕机会出现什么问题?新增机器会出现什么问题? 一致性hash算法又是如何解决?

暂未完成,继续寻找问题。

猜你喜欢

转载自blog.csdn.net/weixin_41725792/article/details/109740915