背景
从事后端开发也有几年时间了,正好总结下后端开发的一些经验,本文主要策重于性能优化方向
缓存
合理的缓存使用,能够大大降低数据库的压力,命中缓存的话,可以大幅的减少查询时间,缓存的话,可以使用本地缓存,也可以使用redis这种分布式的缓存。使用合适的缓存失效策略,根据业务特点和数据更新频率选择合适的缓存过期时间或基于事件驱动的更新策略。
异步
有些业务逻辑属于耗时操作,并不需要立即返回结果,可以异步操作,第一种是JAVA自带的异步操作,如CompletableFuture,还是一种就是把数据保存在存储环境内。如数据库和消息队列里,慢慢处理,之后再回调。
批量操作
优化批量操作的执行逻辑,合理设置批量处理的数据量和执行频率,避免对系统造成过大的负载压力。
使用批量操作可以减少数据库交互次数,提高数据处理效率,但要注意不要过度使用,避免一次性处理过多数据导致系统负载过高。
提前加载
对于周期性的任务或数据预热,可以使用定时任务或预加载机制,在系统低峰期提前加载数据,提高系统响应速度和性能稳定性。
队列
对于具有优先级的任务,可以使用优先级队列或者按照任务类型分配不同的队列进行处理,确保高优先级任务能够及时得到处理。
使用消息队列可以实现解耦和异步处理,提高系统的灵活性和可维护性。
多线程
一个请求过来,如果多个业务操作之间没有依赖关系,可以并行的去处理,可以压缩业务处理的时间
数据库的设计
结合业务需求和数据库特性,采用合适的数据库分库分表策略,减少单一数据库的压力,提高数据库的并发处理能力和数据存储容量。
使用数据库的分区表功能,根据数据的时间或者业务特点进行分区,提高查询效率和数据存储管理的灵活性
监控
建立完善的监控系统,监测系统的性能指标、资源利用率和服务质量,及时发现和解决系统性能问题,保障系统的稳定性和可用性。
使用分布式链路追踪技术,对系统的各个组件进行监控和调优,发现系统瓶颈和性能瓶颈,及时进行优化和改进
减少资源的争抢
减少锁的使用,大部分情况,数据是最终一致性就可以
合理的负载策略
这个通常不用考虑,如果是k8s环境内,k8s自己有负载策略