真实项目开发中高并发实战经验总结
1、使用异步多线程的方式记录详细的请求日志;使用异步多线程的方式记录接口请求调用量;
2、不同类型的接口采用不同的限流设置,比如后台管理系统和对外接口采取不同的限制设置;
具体的可以根据项目中实际的需求进行配置,一般后台管理系统限流数可以设置小一些,对外接口限流数设置大一些;
3、对内的接口比如后台管理系统,和对外的接口比如提供的开放接口,根据不同的路径来拦截;采用不同的拦截器进行通用逻辑处理,
比如记录日志(后台管理系统)和接口调用量统计(对外接口)等等;
4、主表的数据一般使用都比较频繁,可以考虑使用定时任务更新到redis缓存中,如2分钟更新一次,使用的时候直接从缓存中获取;
5、其他使用频率比较高的数据,比如字典表数据或者是其他业务表的数据,同主表数据一样使用定时更新到缓存中,
比如三分钟更新一次;使用时直接从缓存中获取;
6、一些耗时的任务处理,比如生成多个二维码并且将二维码合成到不同的图片中的操作;可以考虑使用多线程或者是异步线程处理都行;
7、高频率使用的数据,有的人称之为热点数据,比如首页需要使用的数据;全部从缓存中获取,然后使用定时任务定时高频率更新这些缓存中的数据;
8、数据量比较大的时候,导致查询效率降低,考虑使用分表,使用Mybatis的拦截器可以直接替换表后缀名,分表查询时很方便;
9、某些接口的操作如果是新增或者是更新,比如先根据条件查询某条数据是否存在,存在则进行更新,不存在则新增;
这种情况可以考虑将新增操作和修改操作合并为一条SQL,不存在新增,存在则更新;mysql数据库或者是postgresql都提供这种操作方式;
10、某些高频率数据更新操作,可以先将数据放入redis缓存中,然后在使用其他线程,比如使用定时任务从缓存中获取之前存入的数据,
进行后续处理,比如更新到mysql数据库或者是新增到mysql数据库;
11、数据表设计的时候,所有表全部添加版本号字段,使用乐观锁的设计方式,提高数据库并发量;
12、所有表均创建有合适的索引,有普通索引,唯一索引,组合索引,普通组合索引,唯一组合索引等等,加快数据库查询效率;
13、服务使用多实例部署;网关服务使用多实例部署,后端服务也是多实例部署;redis服务采用集群部署,postgresql数据库也是集群部署;
提升服务器性能和提高并发量。
14、简单顺序任务处理直接使用redis创建的队列,不使用MQ消息队列;
15、一些不太复杂的业务处理,设计表的时候可以直接考虑使用JSON类型数据格式,单个字段中又可以包含多个字段,
这样就可以少创建一些表,提升系统处理效率。比如某个业务表只有两三个字段,通过其他表的主键来进行关联,
这时就可以考虑将这张表中的数据直接存储为其他表的一个字段,用JSON类型存储,处理起来方便又快捷。
如果有其他建议的小伙伴,欢迎留言讨论。