上传文件的安全性设计
文件大小:小于20MB
文件后缀:是否满足.xlsx
文件内容:(成本要高一些)
文件的合规性:比如敏感内容,建议用第三方的审核功能。
扩展点:接入腾讯云的图片万象数据审核(COS对象存储的审核功能)
文件大小通过springboot自带的文件大小限制配置即可完成。
文件后缀,不仅要满足使用截取后缀的方法来检查,还要通过检查文件的MIME类型,最后仍然要通过检验文件的内容来检查是否为符合的文件。、
分表设计
对于每个请求,都有数据表的字段,也就是用户请求分析数据所产生的图表数据是按照特定的echart类型返回的,所以这个字段的内容会很大。
随着请求数变大,就会令数据表非常的臃肿,会影响数据查询的效率。
根据这个问题,我将返回的表数据单独一个表进行存储。·
限流设计
使用Redisson的RateLimiter限制每个用户每秒只能访问两次,通过请求令牌的方式实现,用户令牌为:前缀+id,如果能够获得令牌则继续执行,不能抛异常。
限流的方法
固定窗口限流
在固定时间内,只允许固定的数量。
可能会出现流量突刺的问题。
滑动窗口限流
在滑动时间内,只允许固定的数量。
实现相对复杂,是限流效果与滑动单位有关,滑动单位越小,效果越好;但是很难选取适合的滑动单位。
漏桶限流
以固定的速率处理请求,当请求同满了之后,拒绝请求。
没有办法处理一批请求,只能一个一个按顺序来处理。
令牌桶限流
以固定的数据放令牌桶中添加令牌,每个令牌代表一定数量的请求,请求需要获取令牌后才能被处理,没有令牌的请求会被限流并拒绝。
还是存在时间单位选取的问题。
线程池
核心线程数
对于CPU密集型任务:CPU核数 + 1
对于I/O密集型任务:2*CPU核数
线程数 = CPU核心数 * (1 + 线程等待时间/线程运行的总时间)
具体情况也需要根据实际情况设置,对于非业务模块,也可以设置为0
最大线程数
通过压测进行测试,测试出一个边界值
线程存活时间
如果希望核心线程也在空闲的时候被回收,那么可以设置线程存活时间。
工作队列
SynchronousQueue
直接传递任务,不存储任何任务。
当核心线程满时,如果没有空闲线程将任务直接交给时,可能会立即触发拒绝策略。
适合需要尽快处理、严格控制最大并发数的时候。
LinkedBlockingQueue
基于链表的无界队列,可以无限制地添加任务,除非有容量限制。
适用于需要缓冲大量任务的情况。
ArrayBlockingQueue
基于数组的有界队列,需要在创建指定容量。
适用于需要限制队列大小以避免消耗过多内存的情况。
PriorityBlockingQueue
支持带优先级的任务队列,任务会按照优先级顺序执行。
适用于按优先级处理任务的情况。
DelayQueue
基于时间的延迟队列,只有当延迟时间过期后,任务才会被处理。
适用于需要延迟执行的任务。
拒绝策略
丢弃任务单不抛出异常
丢弃任务并抛出拒绝异常
由调用线程处理该任务
丢弃最早的未处理的任务,然后重新尝试提交任务。
7419

被折叠的 条评论
为什么被折叠?



