项目训练营-智能Bi项目优化 | 限流、线程池实战、业务改造、消息队列实战、业务改造
大纲
- 文件长度、后缀校验
- 分布式限流
- 分表具体实现
- 线程池实战
- 异步化业务改进
- 消息队列实战
- 结合消息队列用direct交换机改造业务
第一部分:校验文件长度和后缀
-
测试结果
-
尝试传输一本书
系统显示超过10MB直接系统异常 -
选择一幅2.08MB的图片来测试,结果如下
第二部分:限流
为什么要限流?
在开放接口类的平台中,为了保护服务器和将成本控制在可以接受的范围内,选择限流即限制用户调用次数
具体分为分布式限流和本地限流。
限流有四种常见的方法:
1、固定速率限流,比如一小时可以调用2次
- 优点:实现简单;
- 缺点:如果第一小时末尾来了2次,第二小时前20分钟来了2次,服务器仍然有可能会崩溃
2、滑动窗口限流,比如一开始是0~1h限流2次,1min后,变成1min到1h1min限流2次
- 优点:限流性能更好;
- 缺点:实现较为复杂
3、漏桶限流,可以将请求全放入一个桶中,在桶的下边,以固定速率滴下水滴
- 优点:负载均衡,服务器可以慢慢处理
- 缺点:处理速度较慢
4、令牌桶限流,一小时生产10个令牌,拿到令牌的人的请求可以得到处理
- 优点:处理较为迅速
- 需要解决的问题:并发和异步化改造
具体实现
1、在config文件夹中新建一个RedissonConfig.java文件
编写如下:
ConfigurationProperties(prefix = “spring.redis”)
是将该类中一些变量映射到applications.yml中取值
2、具体限流方式为在manager文件夹中新建一个RedisLimiterManager.java文件,编写代码如下: