应用层缓存提升性能

本文涉及的产品
云数据库 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
相关文章
|
27天前
|
存储 缓存 算法
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
113 0
|
2月前
|
存储 缓存 UED
缓存策略与Apollo:优化网络请求性能
缓存策略与Apollo:优化网络请求性能
|
7月前
|
存储 缓存 数据库
优化性能与减少资源浪费:深入了解缓存策略
缓存策略是现代Web开发中关键的优化技术之一,它可以显著提高网站性能,降低服务器负载,并减少用户等待时间。在本博客中,我们将深入研究缓存策略的概念、不同类型的缓存和如何在项目中实施它们。
69 0
|
11天前
|
存储 缓存 自动驾驶
缓存策略与Apollo:优化网络请求性能
缓存策略与Apollo:优化网络请求性能
|
26天前
|
缓存 NoSQL Java
手撸的 SpringBoot缓存系统,性能杠杠的
手撸的 SpringBoot缓存系统,性能杠杠的
27 0
|
1月前
|
存储 缓存 算法
深入探究LRU缓存机制:优化内存利用与提升性能
深入探究LRU缓存机制:优化内存利用与提升性能
129 1
|
2月前
|
缓存 监控 安全
如何使用LRU缓存来提高程序的性能?
如何使用LRU缓存来提高程序的性能?
20 3
|
3月前
|
存储 缓存 分布式计算
Spark RDD持久化与缓存:提高性能的关键
Spark RDD持久化与缓存:提高性能的关键
|
8月前
|
存储 缓存 NoSQL
Redis缓存应用与最佳实践:优化性能与处理挑战
本篇深入探讨了Redis在缓存应用中的最佳实践,旨在优化性能并处理常见的缓存挑战。我们首先介绍了设计高效缓存架构的基本原则,展示了如何使用Redis作为缓存存储来提升应用性能。进一步地,我们讨论了缓存更新策略,演示了如何在源数据更新时同时更新缓存,以确保数据的一致性。
373 0
|
3月前
|
存储 缓存 监控
Redis 7.0性能大揭秘:如何优化缓存命中率?
Redis 7.0,这货不仅仅是一个简单的缓存工具,它更是一款高性能的数据结构服务器。现在,大家都知道缓存命中率对性能影响特别大,但怎么优化它呢?

热门文章

最新文章