秒杀 //www.greatytc.com/p/f7bc11a95e8a
https://www.kyjszj.com/htzq/2072.html
列表页优化
https://juejin.cn/post/6844903702545825805
1、组合key解决方案
2、sql exixt
3、对于扩展表字段的查询,只支持or操作,但不支持and操作
如何提高用户留存率
提高用户粘性
Cms
活动表
以uid为维度分表
Case1 方便查询某个用户开的活动
case2 查询某个用户的历史活动
流水记录表
以activityId为维度分表
Case1 查询某个活动的任务流水记录
任务表
数据分析模块
1、以活动为维度
查询这个活动
按天维度团的增量、用户的增量
Case1存在跨表查询
2、以个人为维度,查他参与了哪些活动
Case2存在跨表查询
Soa模块
接口
1 开团接口
日常20qps
凌晨1000qps
618/双11 5000qps
团100万
任务流水300万
每月拉新 2万
2 做任务接口
助力任务
签到任务
下单任务
分享任务
浏览会场任务
3 历史数据查询
团表:以用户的维护进行hash分表
方便查用户的团数据
4 分析型
同步到数据集市
重难点梳理
1、rpc接口版本升级问题
现状
对于同名方法,在蓝绿发布市可能存在问题
我们可以查看实质上通过netty等方式传输之后在provider可以获得一个对应的DecodeableRpcInvocation这样就回到了包装前的invoker
消费端
配置invoker.listener参数
在refer完时,发起check检查,
检查provider是否存在该方法
Attanment:加上test
提供端
如果包含test,则直接return
通过filter扩展实现
2分组调用case
消费端
指定group
将group作为一个参数
3、rpc超时 数据补偿
默认是fix,200线程队列容量为1
EagerThreadPoolExecutor适用场景,避免task阻塞在队列里等待,优先创建线程
3.1监控看的是task在线程池里面执行的时间,无法查看在队列里面等待的时间
发生的场景
4限流
客户端限流
ActiveLimitFilter
限制客户端并行度service或者method维度
针对服务端,没有提供app维度
全局维度TpsLimitFilter
ExecuteLimitFilter
限制服务端并行度service或者method维度
tps
限流相关问题
4.1、计数器算法
描述:周期内达到指定次数,则触发限流。下一个周期,进行清零,重新开始。
问题:无法触发临界问题
4.2、滑动窗口算法
描述:将时间周期划分n个小周期,分别记录每个小周期内访问次数,根据时间滑动删除小周期
窗口滑动的过程中,存在旧的窗口出队,新的窗口入队
优点:
可以很好的处理临界尖峰问题。
问题:
4.3、漏桶算法
描述:请求放入桶中的速度不做限制,如果桶满了,则触发限流。
放行的速率是固定的,通过这种方式,达到限流的目的。
4.4、令牌桶
好处:限制请求的速度,小于或者等于令牌的生产速度,从而达到限流的目的
5 消费端线程池模型优化
原来cache线程
将序列化与反序列化、io解码与反解码放在业务线程,避免阻塞io线程,导致大量创建io线程
6大key优化
7 key的失效机制
8 缓存穿透
缓存和数据库都没有数据,导致数据压力过大
防止暴力攻击
9 缓存击穿
是指一点热点的key, 不停的抗大并发,某一时间失效,导致大量请求访问数据库
缓存没有数据,但是数据库有数据
10 缓存雪崩
大量数据过期,且查询量过大,引起数据库压力过大
11 缓存预热
12
缓存不一致问题
更新数据库,
1)删除缓存
2)更新缓存