海码充电站的技术专栏 java Coder

并发- -处理方案的思考

2018-12-21
watermelon


并发

前言

业务设计中常常会考虑并发带来的问题及相应的处理方案。根据自己的工作经验做一些整理

0:处理并发问题的目的

  • 1:为了保护服务器和系统安全
  • 2:保护共享资源安全,不错乱

1:为了保护服务器和系统安全

  • 1:优化程序
    • 该功能或接口考虑部分业务放到多线程、队列中异步处理
    • 涉及io操作考虑在客户端层面完成
    • 库表交互考虑缓存架构
    • 优化代码,节省内存:不要频繁的new对象、对应场景的集合使用方案、位运算、异步…
  • 2:在请求环节处理
    • 负载均衡:保护节点避免超负载
    • 服务器熔断机制:服务器满负载了就熔断,让其等待或直接返回。
    • 限流工具(限流等待,限流返回。RateLimiter、aop锁、分布式锁、分布式计数器等)
    • 握手信号
    • 超时设定
    • 舱壁隔离(Hystrix用到)
  • 3:页面资源响应
    • 使用生成静态页面,因为静态页面不带有服务器组件

2:保护共享资源安全,不错乱

  • 1:让后面的线程排队,保护共享资源
    • 锁:排队等待,拿同一个锁。单例或分布式
    • 数据库悲观锁、乐观锁:设计关键字段为索引(实现行锁,不加索引会发生表锁。当然也跟引擎的选择有关)for update(乐观锁可使用版本号等字段控制)
    • 进程内队列:非阻塞offer()、Disruptor队列
  • 2:让后面的线程绕过,不处理(暂时没怎么接触过这样的需求··)

参考:


Comments

Content