缓存中间件的三大坑
- 缓存击穿
- 用户访问热点数据,并且缓存中没有热点数据,大量访问直接到DB,热点击穿
- 采用Canal做数据异构方案,把数据库中的值全部放到缓存
- 热点缓存策略:通过分析调用日志获取热点数据,放到缓存中
- 数据到期之前上锁,然后异步刷新缓存,刷新结束后拿掉锁
- 缓存血崩:key集中过期
- 调整缓存的过期策略:比如永不过期
- 过期时间散列:基础时间 + 动态散列时间
- 缓存预热
- 缓存穿透
- 用户访问的是缓存和数据库中都不存在的数据,所以一直不会命中缓存,会直接访问数据库
- 不存在的数据也构建缓存
- 布隆过滤器
进击的布隆过滤器
消息组件的选型分析
- 选型关注点:可靠性、消息堆积能力、吞吐量
- ActiveMQ(过期)
- RocketMQ、RabbitMQ
- 可靠性好
- 可靠性好
- 死信队列
- 事务能力
- Kafka
- T级堆积能力
- 顺序读写
线上预警和业务埋点
线上监控预警
订单交易核心链路
- 业务量阈值(每分钟采集 < X个/分钟)
- 异常拐点、离群点
- 平均500单/秒
- 10单/秒
- 2000单/秒
- 异常监控(大于10个/分钟)
- 核心接口性能基线(平均RT>1000ms)
面试题
项目中的缓存场景,如果并发量+++
- 缓存血崩、缓存击穿、缓存穿透
- 热点缓存淘汰策略,多级缓存,布隆过滤器
为什么这个场景使用RMQ,换成Kafka呢?
- 中间件特性、可靠性要求
业务买点的场景和用途
设计一套轻量级的系统水位监控系统
- 异步化
- 基于日志埋点(网络日志 & 应用日志)