业务系统性能优化——缓存
目录
问题描述
分析与定位
技术调研与选型
什么是缓存?
缓存架构
本地缓存和分布式缓存的对比
实现案例
问题描述
随着业务系统的稳定运行,系统使用用户数和各类机巡作业产生的各类巡检数据急剧增加,系统相关模块功能响应性能越来越慢,偶尔会出现系统卡顿、界面无响应的情况。
分析与定位
业务系统出现以上性能问题,可能由于以下几种原因:
- 该系统对第三方平台的依赖性强,需要实时或者定时从其他平台获取所需的各类数据;
- 该系统中存在复杂的统计分析功能,因为统计分析需要从多种有级联关系的表中实时的获取数据,进行数据计算;
- 该系统频繁的从数据库中调用静态数据(更新频率低的数据),增加了应用服务器与数据库之间的开销;
- 该系统在前期设计的过程中,未能正确的评估该系统的使用情景,数据库设计不合理;
- 页面响应时间太长,界面卡死,可能由于接口返回数据慢或者接口不健壮不稳定的原因。
技术调研与选型
什么是缓存?
缓存就是将持久化的数据存到内存副本中,用以提高并发,提高读取速度。
- 基于内存操作
- 空间换时间
- 降低瓶颈操作
- 减少对外依赖
缓存方式性能秒杀了传统接口方式
实验证明:缓存是构建高并发、高可用系统的有效手段。
适合采用缓存的情景:
1、高频数据——有选择的缓存
2、相对稳定——恰当的缓存时效
缓存架构
在实际的工作或者面试过程中,假如问你如何通过缓存技术来解决业务系统的性能瓶颈问题?我们平时大多会针对服务层来提一些常用的缓存技术。比较全面的回答应该从应用层、网络层、负载层、服务层以及数据库层来开考虑。
层级 |
常见产品 |
缓存解决方案 |
缓存技术 |
应用层 |
浏览器 |
浏览器缓存、本地缓存 |
HTTP缓存协商、cookie、sqllite、websql |
网络层 |
网络路由 |
CDN |
Squid等 |
负载层 |
Nginx、Apache |
动静分离、反向代理缓存 |
基于http服务器 |
服务层 |
Java应用、php应用 |
动态页面静态化 应用缓存 分布式缓存 Mybatis缓存 |
Freemarker、velocity、thymeleaf Ehcache、guava、jodd Redis、memcache Mybatis一二级缓存 |
数据库 |
Oracle、postgresql、mysql |
缓冲区 Buffer pool |
本地缓存和分布式缓存的对比
对比项 |
本地缓存 |
分布式缓存 |
概念 |
缓存和应用在同一个进程里,是基于JVM的缓存 |
单独的组件与应用分离 |
社区成熟 |
非常高 |
非常高 |
性能 |
很高、单机 |
高、需要TCP协议交互 |
黏度 |
紧耦合 |
松耦合 |
适用环境 |
单机 |
单机/集群环境 |
高可用 |
应用生则生,应用死则亡 |
集群抱团死一个还有千万个 |
应用共享 |
不能共享 |
可以共享 |
一、本地应用缓存
问题:在实际的应用中,如何选择合适的本地缓存框架呢?
看具体的业务需求。假如想追求速度、追求极致的话,那么就选择caffeine;假如jdk限制只能使用1.8以下的版本,那么只能在guava和ehcache中进行选择;如果要想看到缓存中的内存大小、要能支持集群、支持持久化的话,就选择ehcache。
二、分布式应用缓存
对比项 |
Redis |
memcached |
性能 |
很高很高TPS、QPS 10W |
很高很高TPS QPS 10W |
数据类型 |
K/V、list、set、map |
K/V |
内存限制 |
突破物理内存 |
不能超过可可用内存 |
高可用(集群) |
支持 |
支持 |
可靠性(持久化) |
支持AOF、快照 |
—— |
事务支持 |
支持事务 |
用cas保证一致性(锁) |
缓存策略 |
LRU、FIFO |
LRU |
Spring Cache支持 |
支持 |
支持 |
性能监控 |
不带 |
不带 |
实现案例
spring boot+spring cache实现两级缓存(redis+caffeine)来实现二级缓存
通过使用redis和Caffeine来做缓存,我们会发现一些问题。
如果只使用redis来做缓存我们会有大量的请求到redis,但是每次请求的数据都是一样的,假如这一部分数据就放在应用服务器本地,那么就省去了请求redis的网络开销,请求速度就会快很多。但是使用redis横向扩展很方便。
如果只使用Caffeine来做本地缓存,我们的应用服务器的内存是有限,并且单独为了缓存去扩展应用服务器是非常不划算。所以,只使用本地缓存也是有很大局限性的。
至此我们是不是有一个想法了,两个一起用。将热点数据放本地缓存(一级缓存),将非热点数据放redis缓存(二级缓存)。
一级缓存:Caffeine是一个一个高性能的 Java 缓存库;使用 Window TinyLfu 回收策略,提供了一个近乎最佳的命中率。Caffeine 缓存详解
二级缓存:redis是一高性能、高可用的key-value数据库,支持多种数据类型,支持集群,和应用服务器分开部署易于横向扩展。
业务系统性能优化——缓存相关推荐
- 业务系统性能问题分析诊断和性能优化怎么做?
- 前言 - 今天谈下业务系统性能问题分析诊断和性能优化方面的内容.这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点. 系统性能问题分析流程 我们首先来分析下如 ...
- 业务系统性能问题分析和诊断
这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点. 1|系统性能问题分析流程 我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题,那么实际 ...
- 系统性能优化的常见八大误区
转载:http://www.cnblogs.com/yunman/articles/5482129.html 一.吞吐量与响应时间 系统的吞吐量反映了一个系统的容量,可承受的负载,很多系统都以这样一个 ...
- 互联网系统性能优化方向
之前弄过一个门户系统,其最初每天只有几百个用户会访问使用,后来在公司业务各种推广后,这个门户系统在最高峰的时候,每秒并发1000, 而在这期间,进行了许多分析和优化,作以此文记录. 本文将从代码层面, ...
- 系统性能优化策略 -- 持续优化更新
[开篇词] 无论是传统行业还是互联网行业,一个优秀的软件产品,必须兼顾产品的质量和性能.这二者也可以反映出从业者的技术能力.思维方式以及格局!故性能优化应该是我们所有猿类共同的追求. [策略 ...
- 主题 07:如何进行 Java 系统性能优化(下)
1. 引言 系统性能优化涉及面非常广,涵盖方案优化.编码优化.并发优化.JVM 调优等诸多方面的知识. 虽然不同系统的优化策略存在差异,但从全局来看,它们的共性仍是主要的.首先,我们可以从方案设计.编 ...
- 生产环境服务器安全策略与系统性能优化评估
生产环境服务器安全策略与系统性能优化评估 1. Linux的运维经验分享与故障排查思路 1.1 线上服务器安装基本策略和经验 精简安装策略: 仅安装需要的,按需安装,不用不装 开发包,基本网络包,基本 ...
- 秒杀业务架构优化之路--转
原文地址:http://www.infoq.com/cn/articles/flash-deal-architecture-optimization?utm_source=infoq&utm_ ...
- 软件系统性能优化策略--SQL优化
非常感谢大家对<大白话系列之C#委托与事件讲解>的支持,这次我给大家带来的是<软件系统性能优化策略>的讲解,这个讲解分别围绕SQL优化.IIS优化.代码优化[BS架构].数据库 ...
最新文章
- js 去掉地址栏内参数_JS获取网站地址栏URL中的参数值并转换成json对象
- jenkins+docker的简单项目部署
- 关于bjam编译自己模块出错的问题
- 浅谈O2O行业的猎人与农夫【更新完毕】
- php 读取三级分类,php excel 导入 导入三级分类 表格应该怎么设计才能得到想要的数据格式?汗血宝马...
- Activiti 基础概念
- ZZULIJ 1129: 第几天
- C++程序员迈向百万年薪的最后一道坎
- 工具-破解pdf密码
- 使用git小乌龟拉取,更新,上传资料文档
- 苹果手机投屏电脑win7
- [2019年国庆专题训练] dp专题训练
- 【高新技术企业】高企申报材料以及要求
- TPC-H系列---2---TPC-H表结构及表之间的关系
- 命令行导入 .dmp文件,亲测可行
- 大学——留德的路01
- 内网横传之哈希传递(Pass The Hash)
- PAT 1074 Reversing Linked List——双端队列解法
- 佳能R5/R6断电H.265/HEVC编码DAT视频损坏怎么修复
- 试讲教案模板 计算机 网络,2016下半年信息技术面试教案设计模板
热门文章
- bootstrap table传回的数据后端怎么获取_Flasksqlalchemy让你的数据库和网页执手偕老吧...
- DAIC:针对BEC欺诈的开源利器
- 青岛大学计算机系住哪个校区,青岛大学有几个校区及校区地址
- HDU2925(约瑟夫环问题)
- poj3264(ST表模版)
- 习题4-3 求分数序列前N项和 (15 分)
- PTA基础编程题目集-7-16 求符合给定条件的整数集
- [0x17基本数据结构-二叉堆]-Supermarket
- 【算法笔记】莫比乌斯反演(包含定理,两种形式的证明及入门经典模板)
- angular 缓存 html5,Angular 如何及时更新客户端缓存?