程序员安全认证

分布式缓存学习笔记

2018-02-05  本文已影响341人  此鱼不得水

在深入分布式缓存这本书的学习之后,这里给出一些总结性的内容,也会结合自己的工组内容简单分享一下缓存相关的知识。声明一点,我个人对于分布式缓存的理解基本属于小白,并不清楚分布式缓存的各种协议(如果你是技术大牛,那么请跳过这篇文章),只是基于自己接触的业务去理解和解释一下缓存。

缓存的概念在这里就不介绍了,我相信百度比我介绍的还要清楚。

多级缓存概念

缓存这个概念在非常早期的计算机中已经出现过了,现代的计算机也是依然沿用了当时的很多缓存概念,大家比较熟知的就是CPU的三级缓存,内存等等。响应的速度也是由快到慢,大致的响应速度是这样子的:L1 cache 大概消耗3-5个CPU周期(大约1ns),L2 cache大约消耗10个CPU周期(大约3-5ns),L3 cache大约消耗40-60个CPU周期(15ns),然后主存(内存)的话大概消耗120-200个CPU周期(大概100ns)左右,硬盘的话大概需要10-20ms左右的访问时间,SSD的话大约在30-300us之间,从这里就能看出来基本的速度差了,当然我们也希望所有的数据都能想CPU cache一样快速响应,但是事实是响应越快的硬件价格就越贵。

应用缓存

在应用中我们一般使用比较广泛的是分布式缓存和本地缓存,分布式缓存就是独立于应用部署的一个缓存集群,可以是Memcached缓存,也可以Redis缓存,应用读取缓存数据或者写入缓存数据都需要通过网络来进行,也就是说在分布式缓存中网络的开销不容忽视,有时候读一个缓存的绝大多数时间都花在网络开销上。其次就是本地缓存,本地缓存就是服务器本身通过自己的堆内/堆外存储的缓存,因为缓存数据位于服务器本身,所以有一定的大小限制(如果是JVM的堆内缓存的话要考虑Heap的大小等等,如果是堆外缓存的话也要考虑服务器本身缓存的大小)。下面给出一种常见的缓存模型:


cache.png

在请求(http请求)进入Nginx之后如果请求的数据在Varnish端有缓存数据的话就直接在Varnish端返回,否则的话就回源到tomcat集群处理。这个是比较常见的做法,有些RPC请求并不走Http协议,所以也就是直接将(读)请求打到了服务上,这时候如果能走本地缓存的话就优先通过本地缓存处理,如果本地缓存没有数据的话再通过分布式缓存组建读取,读取数据之后再回写到本地缓存,如果分布式缓存也没有读到数据的话就直接到DB中读取数据,然后依次回写到分布式缓存和本地缓存。

在分布式缓存中有很多需要注意的地方,例如缓存一致性,缓存的可可用性,缓存的持久化等等,这些内容讲真我都只是在网上读取过技术文章,并没有研究过。至于本地缓存是用EhCache还是Guava也没有研究过,所以如果介绍的话估计内容也比较水,这里就不讲了,本文主要侧重点是缓存的一些技巧性。

Tips:


文章结束~~~撒花~~

上一篇 下一篇

猜你喜欢

热点阅读