高并发下思想及其项目应用(持续更新)

本文概述了分布式系统中常见的技术策略,包括负载均衡的轮询、hash、加权轮询,以及缓存、池化复用(如线程池和http连接池)、异步处理(如Kafka的消息队列)和预处理-惰性更新等思想的应用。Redis、MySQL和Kafka等工具在这些场景中的实践也得到了提及。

1.负载均衡思想:负载均衡是指不让一个应用(机器,数据库等等)承载过多的请求或者数据,在分布式场景下一般是多节点部署同一职责应用,然每个节点干差不多的工作量,就是负载均衡的主要工作。

常见方法:轮询,hash,加权轮询,随机。

场景:

  • nginx负载均衡
  • 网关分发请求后端分发服务
  • 分库分表(库表的数据量和访问量达到平衡)
    • 短链码:基因法,库表位放在短链码上,控制库表位的生成频率,达到负载效果。扩容迁移时也更加方便,增加新库表的生成频率即可。

2.缓存思想

场景:

  • 本地缓存/分布式缓存
    • guava
    • redis,ES。
  • 前端缓存静态资源
  • 网络DNS解析缓存
  • mysql开启缓存

3.池化复用思想:池化思想主要是用来管理一些需要使用时“需要进行创建,关闭的等一些比较消耗资源”的资源的一种思想,省去不断创建和销毁时的开销,复用相同资源。

场景:

  • 线程池
  • jdbc,redis,http连接池
  • springIOC

4.异步思想:

场景:

  • 前端ajax异步请求
  • RocketMQ、Kafka同步双写,异步刷盘:为了保证消息的可靠性投递,当消息发送到broker时,mq会等到消息同步到所有节点的内存后在返回给客户broker已经收到消息,然后采用异步操作,将消息持久化到磁盘。
  • java多线程
  • 发送mq消息
    • 新用户注册发放优惠卷
    • 延时关单,延迟消息处理分布式事务(弱一致性)
    • buffer写入
      • kafka发送消息:kafka不是生产者每发送一条就直接发到broker的,而是缓冲空间达到一定数据量之后或者间隔多长时间发送一次当前缓冲空间内的所有数据(小发送聚集程大发送)
      • LSM树(日志结构合并树-一层比一层大):每一层满了(数据存储满了)之后异步写入下一层,下一层满了在写入下一层。本质上是利用了磁盘的顺序读写,一次性写入大量数据(顺序写)速度更快。

5.预处理-惰性更新思想:这种思想主要是想要用户得到快速响应,降低接口的响应时间。

场景:

  • redis过期key删除策略:redis有俩种过期key的删除策略,一是定时任务抽取一定数量的key然后删除,二是用户访问的时候看key是否过期然后删除。redis是采用俩者结合,一是预处理,二是懒加载。
  • 数据预处理
    • 定时任务:复杂查询生成的报表信息等需要大量IO和CPU资源的操作,一般会在在线用户量低的时候查询出来放到缓存中。
    • 秒杀类场景不会将数据交互直接下放到数据库,秒杀类场景会提前将库存,和活动信息等数据放到缓存中,而不是等活动开始了进行操作。
  • 懒加载
    • 懒汉单例
    • mybatis懒加载
    • 限制类:如控制用户每天创建短链的次数限制,在用户量巨大的场景下我们不可能去批量更新数据库内所有用户每天创建短链的次数,对服务器资源的要求是巨大的,而且不一定所有用户都有,这是我们就可以在用户访问的时候

5.分而治之思想:广播,任务拆分成多个子任务进行执行。

场景:

  • Master-Worker
  • mq广播
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值