【并发编程】高并发相关技术

高并发之扩容思路

垂直扩容(纵向扩展):提高系统部件能力
水平扩容(横向扩展):增加更多系统成员来实现

读操作扩展:memcache、redis、CDN等缓存
写操作扩展:Cassandra、Hbase等

高并发之缓存思路

缓存特征

命中率:命中数/(命中数+未命中数)
最大元素(空间)
清空策略:FIFO, LFU, LRU, 过期时间,随机等

缓存命中率影响因素

业务场景和业务需求
缓存的设计(粒度和策略)
缓存容量和基础设施

缓存分类和应用场景

本地缓存:编程实现(成员变量、局部变量、静态变量)、Guava Cache
分布式缓存:Memcache、Redis

高并发场景下缓存的常见问题

缓存一致性

不一致的场景
更新数据库成功->更新缓存失败->数据不一致
更新缓存成功->更新数据库失败->数据不一致
更新数据库成功->淘汰缓存失败->数据不一致
淘汰缓存成功->更新数据库失败->查询缓存miss

缓存并发问题
使用锁

缓存穿透(击穿)问题

解决方案:
缓存空对象:对查询结果为空的对象也进行缓存,如果是集合,可以缓存一个空集合
如果是缓存单个对象,可以通过对象标识区分,防止请求击穿到数据库。这种方式实现成本低
适合命中不高但是可能频繁更新的数据。
单独过滤处理:对所有可能对应数据为空的对象单独存放,并在请求前拦截,防止请求击穿到数据库。
这种方式实现复杂,适合命中不高,更新不频繁的数据。

缓存的雪崩问题

限流、降级、熔断、多级缓存

高并发之消息队列思路

高并发之应用拆分思路

高并发之应用限流思路

高并发之服务降级与服务熔断思路

高并发之数据库切库分库分表思路

高并发之高可用手段

猜你喜欢

转载自www.cnblogs.com/z00377750/p/9256532.html
今日推荐