应用层缓存提升性能

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 应用层缓存提升性能

开发者学堂课程【企业级互联网分布式系统应用架构学习:应用层缓存提升性能】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/369/detail/4392


应用层缓存提升性能


内容介绍:

一、应用性能瓶颈

二、应用性能瓶颈解决方案

三、缓存应用场景


一、应用性能瓶颈

1、在前面的章节有关于提高应用并发度的方案已经学习到通过应用层的横向扩展来达到资源的补充,这样可以再一定程度上提高应用的并发度。从应用的视角去看,应用性能瓶颈会发生在应用层和数据库层之间。由于业务的复杂度、调用频率以及每次调用的数据量这些因素的问题,往往会导致应用和数据库之间产生一些性能上的瓶颈。

image.png

2、所以为了解决这个问题,通常会把一些常用到的信息从数据库中取出,缓存在应用层中,应用在下一次需要这些数据的时候,不需要再从数据库取这些数据,这样就会大大缓解性能瓶颈的问题。


二、应用性能瓶颈解决方案

1、使用应用缓存能够很好的解决数据库无法横向扩展的问题,从下图中可以看出

image.png

当使用应用缓存以后,用户发起的第二次请求这些需要的数据,可以从应用缓存中直接获取,而不必从数据库中重新获取。使用应用缓存现在有很多技术手段,通常应用缓存会有这样几个特性,第一个基本上都是基于 KValue,也就是键值存储模式,然后使用高性能分布式的内存缓存服务,可以更好地为动态 Web 应用提供服务,以减轻数据库的负担。第二,通过在内存中的缓存数据来减少数据库读取的次数,这样可以提高数据网站的速度。第三,应用缓存能够支持多种语言来编写,比如现在经常用到的 JAVA、PLP 以及其他的一些语言。第四,使用应用缓存更加适合于动态 Web 网站的热点数据缓存。

2、下面对热点数据做一个解释,比如说在一个电商网站,用户的基本信息是一个热点数据。通常会把用户信息放在数据库的用户表里,当用户登录这个电商网站的时候,该用户对应的数据就会从数据库里面取出。如果没有使用应用缓存,客户每一次在页面上的操作,比如说要浏览某一个产品,或者要将某一个产品放到购物车产生订单或者支付,那每次操作都需要应用从数据库将用户的基本信息取出,并送到应用端。这样就会对数据库造成很大的压力,这些热点数据,因为他不经常变化,所以可以将它从数据库第一次访问的时候取出,放到应用缓存里,后续用户所有的操作只要用到这些数据,都可以从应用缓存中直接取出,这样就可以大大的加速应用的访问速度。

3、此外,应用缓存适用的一些场景就是对数据访问速度要求较高场景,同时,这些数据更新的频率一定要低,更新频率过高的数据不太适合放在应用缓存中,比如说产品的库存,每一个用户购买后库存都要进行扣减,这些数据一个对以追性要求很高,同时它更新频率很快,放在应用缓存里就不是最佳的方案。


三、缓存应用场景

1、场景1:为数据库减负并增加并发度

缓存应用最主要的场景是为数据库减负,这样可以更好地增加应用的并发度。数据库是一个很难横向扩展的平台,最好的数据库可能也只是在实例级别进行扩展,最终数据的存储也都是统一的。为了解决这个问题,就有缓存的场景,如图所示

image.png

希望从数据库中取某一个变量的值,在没有应用缓存的时候,每一次应用需要得到这个值的时候,一定要发起一个数据库的查询,然后取到这个变量的值。一旦有缓存以后,应用的逻辑就会发生改变,他会先判断缓存中有没有这个变量,如果有的话就直接取出来,如果没有或这个缓存没有命中,在真正发起数据库的访问,这时候再把这个变量的值取出来,取出来返回应用的同时,这个变量的值也会把它设置到缓存中去,下一次再用到这个变量的时候,直接从缓存中取。

所以通过这样的处理,大量的数据库的查询语句,就可以去掉或者完全不被数据库所接收到。通常都有应用缓存直接将数据返回回去。另外,因为缓存平台是将数据放在内存里的,它的 QPS,也就是每秒钟响应的请求数比数据库支撑的会更高,所以,从应用缓存中取数据,他的响应时间通常比数据库会更快,这样也可以更好的增加应用的并发度。

2、场景2:临时数据存储

下一个场景就是缓存能够临时的对数据进行存储,从下图中可以看到

image.png

从负载均衡器,或者是负载均衡服务到后端的弹性计算资源,或者叫应用服务器,他们之间有一个流量分发或者转发的关系。在应用服务器层,通常也会缓存一些信息,在以往的架构里面,通常会把用户的会话信息存放在应用服务器中,也就是经常提到的 HDPP 的 session,把 session 或把会话信息放在应用服务器,可能会有一个问题,就是当这台应用服务器出现故障以后,用户的会话信息可能会丢失掉。导致的结果就是用户可能需要浏览器重新登录,才能做下一次的操作。所以在现在很多的应用设计中,会把类似于 session 或会话信息的这样的临时数据,存放到一个集中的存储中,或者说集中的应用缓存中,这样应用服务器就不用再存储这些临时数据了。

带来的好处就是任何一台应用服务器出现问题,都可以随时移除掉,不会对前端的用户产生任何影响。这个也是缓存应用对应用架构带来的调整,使得整个应用没有和这些会话信息或数据没有任何关系,可以随时增加或减少应用服务器的数量。

对阿里云来讲,目前已经有几款和应用缓存相关的一些产品,举两个例子,第一个就是云数据库 Memcache 版,现在在互联网整个架构设计中,很多架构师都会用到 Memcache。

image.png

阿里云就把它作为一个 pass 平台,提供给用户,用户就不需要自己搭建这个平台了。

另外一个产品是云数据库 Redis 版,Redis 现在已经是一个互联网应用架构中间用的非常广泛的一个产品。

image.png

通过 Redis 可以做一些数据的缓存,尤其是键值存储,就是通常讲的 KValue 数据架构的存储,都可以用这个产品来实现。

这两个产品在选择过程中需要有一个注意的地方,Memcache 版数据不存储在磁盘中,就是不会把缓存的数据落到磁盘上,Redis 最终会把这些数据存储在磁盘中。这两个产品在使用过程中需要注意他的差别。

这一章节主要学习使用应用缓存来提高应用的并发度,这里面主要介绍了在应用和数据库之间,放入一个应用缓存台,这样一些热点数据可以通过应用缓存直接返回到客户端,避免降低数据库的压力,避免应用长时间在数据库层等待导致客户的响应速度变慢。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
3天前
|
缓存 监控 测试技术
如何利用浏览器的缓存来优化网站性能?
【10月更文挑战第23天】通过以上多种方法合理利用浏览器缓存,可以显著提高网站的性能,减少网络请求,加快资源加载速度,提升用户的访问体验。同时,要根据网站的具体情况和资源的特点,不断优化和调整缓存策略,以适应不断变化的业务需求和用户访问模式。
36 7
|
26天前
|
缓存 JavaScript 前端开发
Vue 3的事件监听缓存如何优化性能?
【10月更文挑战第5天】随着前端应用复杂度的增加,性能优化变得至关重要。Vue 3 通过引入事件监听缓存等新特性提升了应用性能。本文通过具体示例介绍这一特性,解释其工作原理及如何利用它优化性能。与 Vue 2 相比,Vue 3 可在首次渲染时注册事件监听器并在后续渲染时重用,避免重复注册导致的资源浪费和潜在内存泄漏问题。通过使用 `watchEffect` 或 `watch` 监听状态变化并更新监听器,进一步提升应用性能。事件监听缓存有助于减少浏览器负担,特别在大型应用中效果显著,使应用更加流畅和响应迅速。
62 1
|
6月前
|
存储 缓存 前端开发
揭秘Web缓存:提升网站性能与用户体验
揭秘Web缓存:提升网站性能与用户体验
|
2月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
128 9
|
2月前
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
2月前
|
缓存 运维 NoSQL
二级缓存架构极致提升系统性能
本文详细阐述了如何通过二级缓存架构设计提升高并发下的系统性能。
117 12
|
2月前
|
缓存 NoSQL Java
揭秘性能提升的超级武器:掌握Hibernate二级缓存策略!
【9月更文挑战第3天】在软件开发中,性能优化至关重要。使用Hibernate进行数据持久化的应用可通过二级缓存提升数据访问速度。一级缓存随Session生命周期变化,而二级缓存是SessionFactory级别的全局缓存,能显著减少数据库访问次数,提高性能。要启用二级缓存,需在映射文件或实体类上添加相应配置。然而,并非所有场景都适合使用二级缓存,需根据业务需求和数据变更频率决定。此外,还可与EhCache、Redis等第三方缓存集成,进一步增强缓存效果。合理运用二级缓存策略,有助于大幅提升应用性能。
81 5
|
3月前
|
存储 缓存 分布式计算
如何在 PySpark 中缓存数据以提高性能?
【8月更文挑战第13天】
151 8
|
3月前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。