开发者学堂课程【企业级互联网分布式系统应用架构学习:应用层缓存提升性能】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/503/detail/6744
应用层缓存提升性能
从应用的视角来看,往往应用性能的瓶颈会发生在应用层和数据层之间。由于业务复杂度,调用频率,调用数据量这些因素的问题,往往会导致应用和数据库之间产生性能的瓶颈。
为了解决这个问题,我们通常会把一些常用到的信息从数据库里取出,缓存在应用层中,应用在下一次需要这些数据的时候不需要再从数据库中取数据,这样会大大缓解性能瓶颈问题。
使用应用缓存能够很好的解决数据库无法衡量扩展的问题。当使用应用缓存后,用户发起的第二次请求,需要的这些数据就可以直接从应用缓存中获取,而不必再从数据库中获取。只用应用缓存的有很多技术手段,应用缓存会有几个特性。
第一个特性是基于 kv (建筑存储)的高性能分布式内存缓存服务,用于动态 web 应用,以减轻数据库负载。
第二个就是内存中缓存数据来减少读取数据库中的次数。这样可以提高网站的速度。
第三种是支持多种语言来编写。
第四使用应用缓存适用于动态 web 网站的热点数据缓存。
热点数据指的是,例如在一个电商网站,用户的基本信息就是一个热点数据,通常我们会把用户的信息放在数据库的用户表里,当用户登录电商网站时,用户所订用的数据就会从数据库里取出。若没有使用应用缓存,客户在页面上的每一次操作,例如客户要浏览某一个产品,或者要将某一个产品放到购物车产生订单或者支付。每一次操作都要应用从数据库里将用户的基本信息取出并送到应用端。这样就会给数据库造成很大的压力。
这些热点数据,因为其不经常变化,所以我们就可以把它从数据库中第一次访问的时候取出来,放在应用缓存里。后续用户的所有操作,只要用到这些数据,我们都可以从应用缓存中直接取出。所以这样就可以大大的加速应用访问速度。
除此之外,应用缓存适用的场景就是对数据访问速度较高的场景。同时这些数据更新频率低,读取频率高。更新频率较高的是不适合放在应用缓存中的。
例如产品的库存,每一个用户购买后产品都需要进行扣减,这些数据对一致性的要求很高,更新频率很快,所以放在应用缓存里不是一个最佳的方案。我们来看一下应用缓存的一个场景,最主要的场景是为数据库减负,这样会更好的增加数据的并发度。众所周知,数据库是一个很难扩展的平台,现在最好的数据库也只能在十里级别扩展,最终数据的存储也是统一的。
所以为了解决这个问题,就有缓存的这样一个场景。例如我希望从数据库中取一个变量的值,当他无应用缓存的时候,我们每一次应用需要得到这个值时,一定要发起数据库的查询,然后取到变量的值。一旦有缓存后,应用的逻辑就会发生改变。它会先判断缓存中是否有这个变量,若有,会直接取出来。
若没有,缓存没有命中,舞台会发起对数据库的访问,此时会把这个变量直接取出来。再返回应用的同时,这个变量也会把它设置到缓存中去,下一次再使用的这个变量时直接从缓存中取就可以。所以通过这样的处理,大量的数据库查询就可以去掉,或者说完全不会被数据库所接收到。
通常都有应用缓存将需要的数据返回过去。除此之外,缓存平台是变数据的处理。它的 QPS,以也就是每秒响应的请求数,比数据库支撑的会更高。所以从应用缓存中取数据,它响应的时间会比数据库更快,这样也可以很好的增加应用的并发度。
另一个场景是临时数据存储。从图上我们可以看到,从附带均衡器或附带均衡服务到后端的弹性计算资源或应用服务器,他们之间有流量分发或请求转发的关系。在应用服务器层,通常也会缓存一些信息。
在以往的架构里,会把用户的会话信息存放在应用服务器中。我们曾经提到的HTTP session,把 session 放在应用服务器,可能会出现问题,即当这台应用服务器出现故障时,用户的会话信息可能会丢失,导致的结果是用户需要通过浏览器重新登录,才能够做下一期的操作。所以在现在的很多应用设计中,会把应用 session 的临时数据,会存放在集中的存储中例如其中的应用缓存中,这样应用服务器就不再存储临时数据。带来的好处是任何一台,任何一个应用服务器出现问题,都可以随时移除掉,不会对前面的用户产生任何影响,这也是缓存应用对架构带来的调整。使得整个应用没有和这些会话信息有任何关系,随时的增加或减少应用服务器的数量。
对阿里云来说,目前我们已经有几款缓存和应用相关的产品。例如语音数据库Memcache 版,众所周知,在整个互联网架构中,很多架构都会用到 Memcache,阿里云就把它作为一个 pass 平台,提供的用户就无需自己来搭建平台。
另外一个产品是云数据库 Redis 版,Redis 也是一个互联网云应用架构。通过 Redis 我们可以做一些数据的缓存,尤其是建值缓存。这两个产品在选择过程中需要有一个注意的地方,Memcache 版数据不存储在磁盘中。Redis 版会把数据存储在磁盘中。所以这两个产品在选用过程中,需要注意差别。
这一章节我们主要讲述了应用缓存来提高应用的并发度,其中我们主要介绍了在应用和数据库之间放入一个应用缓存产品,一些热点数据就可以通过应用层缓存,直接返回到客户端。
既可降低数据库的压力,也避免应用长时间在数据库层等待,导致客户响应速度变慢。