后端服务实战之性能优化 |
您所在的位置:网站首页 › 项目优化思路 › 后端服务实战之性能优化 |
本文简单介绍下后端服务开发中常用的一些性能优化策略。 1、代码优化代码实现是第一位的,特别是一些不合理的复杂实现。如果结合需求能从代码实现的角度,使用更高效的算法或方案实现,进而解决问题,那是最简单有效的。 2、数据库数据库的优化,总体上有3个方面: 1) SQL调优:除了掌握SQL基本的优化手段,使用慢日志定位到具体问题SQL,使用explain、profile等工具来逐步调优。 2) 连接池调优:选择高效适用的连接池,结合当前使用连接池的原理、具体的连接池监控数据和当前的业务量作一个综合的判断,通过反复的几次调试得到最终的调优参数。 3) 架构层面:包括读写分离、主从库负载均衡、水平和垂直分库分表等方面,一般需要的改动较大,需要从整体架构方面综合考虑。 3、缓存 分类本地缓存(HashMap/ConcurrentHashMap、Ehcache、RocksDB、Guava Cache等)。 缓存服务(Redis/Tair/Memcache等)。 设计关键点1、什么时候更新缓存?如何保障更新的可靠性和实时性? 更新缓存的策略,需要具体问题具体分析。基本的更新策略有两个: 1) 接收变更的消息,准实时更新。 2) 给每一个缓存数据设置5分钟的过期时间,过期后从DB加载再回设到DB。这个策略是对第一个策略的有力补充,解决了手动变更DB不发消息、接收消息更新程序临时出错等问题导致的第一个策略失效的问题。通过这种双保险机制,有效地保证了缓存数据的可靠性和实时性。 2、缓存是否会满,缓存满了怎么办? 对于一个缓存服务,理论上来说,随着缓存数据的日益增多,在容量有限的情况下,缓存肯定有一天会满的。如何应对? 1) 给缓存服务,选择合适的缓存逐出算法,比如最常见的LRU。 2) 针对当前设置的容量,设置适当的警戒值,比如10G的缓存,当缓存数据达到8G的时候,就开始发出报警,提前排查问题或者扩容。 3) 给一些没有必要长期保存的key,尽量设置过期时间。 3、缓存是否允许丢失?丢失了怎么办? 根据业务场景判断,是否允许丢失。如果不允许,就需要带持久化功能的缓存服务来支持,比如Redis或者Tair。更细节的话,可以根据业务对丢失时间的容忍度,还可以选择更具体的持久化策略,比如Redis的RDB或者AOF。 缓存问题1、缓存穿透 描述:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。 解决方案: 1) 接口层增加校验,如用户鉴权校验,id做基础校验,id |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |