应用层缓存提升性能|学习笔记

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

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

课程地址:https://developer.aliyun.com/learning/course/503/detail/6744


应用层缓存提升性能

从应用的视角来看,往往应用性能的瓶颈会发生在应用层和数据层之间。由于业务复杂度,调用频率,调用数据量这些因素的问题,往往会导致应用和数据库之间产生性能的瓶颈。

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

使用应用缓存能够很好的解决数据库无法衡量扩展的问题。当使用应用缓存后,用户发起的第二次请求,需要的这些数据就可以直接从应用缓存中获取,而不必再从数据库中获取。只用应用缓存的有很多技术手段,应用缓存会有几个特性。

第一个特性是基于 kv (建筑存储)的高性能分布式内存缓存服务,用于动态 web 应用,以减轻数据库负载。

第二个就是内存中缓存数据来减少读取数据库中的次数。这样可以提高网站的速度。

第三种是支持多种语言来编写。

第四使用应用缓存适用于动态 web 网站的热点数据缓存。

热点数据指的是,例如在一个电商网站,用户的基本信息就是一个热点数据,通常我们会把用户的信息放在数据库的用户表里,当用户登录电商网站时,用户所订用的数据就会从数据库里取出。若没有使用应用缓存,客户在页面上的每一次操作,例如客户要浏览某一个产品,或者要将某一个产品放到购物车产生订单或者支付。每一次操作都要应用从数据库里将用户的基本信息取出并送到应用端。这样就会给数据库造成很大的压力。

这些热点数据,因为其不经常变化,所以我们就可以把它从数据库中第一次访问的时候取出来,放在应用缓存里。后续用户的所有操作,只要用到这些数据,我们都可以从应用缓存中直接取出。所以这样就可以大大的加速应用访问速度。

图片1.png

除此之外,应用缓存适用的场景就是对数据访问速度较高的场景。同时这些数据更新频率低,读取频率高。更新频率较高的是不适合放在应用缓存中的。

例如产品的库存,每一个用户购买后产品都需要进行扣减,这些数据对一致性的要求很高,更新频率很快,所以放在应用缓存里不是一个最佳的方案。我们来看一下应用缓存的一个场景,最主要的场景是为数据库减负,这样会更好的增加数据的并发度。众所周知,数据库是一个很难扩展的平台,现在最好的数据库也只能在十里级别扩展,最终数据的存储也是统一的。

图片2.png

所以为了解决这个问题,就有缓存的这样一个场景。例如我希望从数据库中取一个变量的值,当他无应用缓存的时候,我们每一次应用需要得到这个值时,一定要发起数据库的查询,然后取到变量的值。一旦有缓存后,应用的逻辑就会发生改变。它会先判断缓存中是否有这个变量,若有,会直接取出来。

若没有,缓存没有命中,舞台会发起对数据库的访问,此时会把这个变量直接取出来。再返回应用的同时,这个变量也会把它设置到缓存中去,下一次再使用的这个变量时直接从缓存中取就可以。所以通过这样的处理,大量的数据库查询就可以去掉,或者说完全不会被数据库所接收到。

通常都有应用缓存将需要的数据返回过去。除此之外,缓存平台是变数据的处理。它的 QPS,以也就是每秒响应的请求数,比数据库支撑的会更高。所以从应用缓存中取数据,它响应的时间会比数据库更快,这样也可以很好的增加应用的并发度。

另一个场景是临时数据存储。从图上我们可以看到,从附带均衡器或附带均衡服务到后端的弹性计算资源或应用服务器,他们之间有流量分发或请求转发的关系。在应用服务器层,通常也会缓存一些信息。

图片3.png

在以往的架构里,会把用户的会话信息存放在应用服务器中。我们曾经提到的HTTP session,把 session 放在应用服务器,可能会出现问题,即当这台应用服务器出现故障时,用户的会话信息可能会丢失,导致的结果是用户需要通过浏览器重新登录,才能够做下一期的操作。所以在现在的很多应用设计中,会把应用 session 的临时数据,会存放在集中的存储中例如其中的应用缓存中,这样应用服务器就不再存储临时数据。带来的好处是任何一台,任何一个应用服务器出现问题,都可以随时移除掉,不会对前面的用户产生任何影响,这也是缓存应用对架构带来的调整。使得整个应用没有和这些会话信息有任何关系,随时的增加或减少应用服务器的数量。

对阿里云来说,目前我们已经有几款缓存和应用相关的产品。例如语音数据库Memcache 版,众所周知,在整个互联网架构中,很多架构都会用到 Memcache,阿里云就把它作为一个 pass 平台,提供的用户就无需自己来搭建平台。

另外一个产品是云数据库 Redis 版,Redis 也是一个互联网云应用架构。通过 Redis 我们可以做一些数据的缓存,尤其是建值缓存。这两个产品在选择过程中需要有一个注意的地方,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 应用二级缓存提高性能的方法
|
6天前
|
缓存 监控 测试技术
如何利用浏览器的缓存来优化网站性能?
【10月更文挑战第23天】通过以上多种方法合理利用浏览器缓存,可以显著提高网站的性能,减少网络请求,加快资源加载速度,提升用户的访问体验。同时,要根据网站的具体情况和资源的特点,不断优化和调整缓存策略,以适应不断变化的业务需求和用户访问模式。
41 7
|
29天前
|
缓存 JavaScript 前端开发
Vue 3的事件监听缓存如何优化性能?
【10月更文挑战第5天】随着前端应用复杂度的增加,性能优化变得至关重要。Vue 3 通过引入事件监听缓存等新特性提升了应用性能。本文通过具体示例介绍这一特性,解释其工作原理及如何利用它优化性能。与 Vue 2 相比,Vue 3 可在首次渲染时注册事件监听器并在后续渲染时重用,避免重复注册导致的资源浪费和潜在内存泄漏问题。通过使用 `watchEffect` 或 `watch` 监听状态变化并更新监听器,进一步提升应用性能。事件监听缓存有助于减少浏览器负担,特别在大型应用中效果显著,使应用更加流畅和响应迅速。
66 1
|
6月前
|
存储 缓存 前端开发
揭秘Web缓存:提升网站性能与用户体验
揭秘Web缓存:提升网站性能与用户体验
|
2月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
132 10
|
2月前
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
2月前
|
缓存 运维 NoSQL
二级缓存架构极致提升系统性能
本文详细阐述了如何通过二级缓存架构设计提升高并发下的系统性能。
118 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的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。