干货大型分布式系统中缓存理论及应用场景
本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景。缓存概述
缓存的分类
缓存主要分为四类,如下图:
CDN缓存
CDN(ContentDeliveryNetwork内容分发网络)的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中。
在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。应用场景:主要缓存静态资源,例如图片,视频。CDN缓存应用如下图:
未使用CDN缓存
使用CDN缓存CDN缓存优点如下图:
优点反向代理缓存
反向代理位于应用服务器机房,处理所有对Web服务器的请求。
如果用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。
如果没有缓冲则先向Web服务器发出请求,取回数据,本地缓存后再发送给用户。通过降低向Web服务器的请求数,从而降低了Web服务器的负载。应用场景:一般只缓存体积较小静态文件资源,如css、js、图片。反向代理缓存应用如下图:
反向代理缓存应用图开源实现如下图:
开源实现本地应用缓存
指的是在应用中的缓存组件,其最大的优点是应用和Cache是在同一个进程内部,请求缓存非常快速,没有过多的网络开销等。
在单应用不需要集群支持或者集群情况下各节点无需互相通知的场景下使用本地缓存较合适。
同时,它的缺点也是应为缓存跟应用程序耦合,多个应用程序无法直接的共享缓存,各应用或集群的各节点都需要维护自己的单独缓存,对内存是一种浪费。应用场景:缓存字典等常用数据。缓存介质如下图所示:
缓存介质编程直接实现如下图:
编程直接实现Ehcache基本介绍:Ehcache是一种基于标准的开源缓存,可提高性能,卸载数据库并简化可伸缩性。
它是使用最广泛的基于Java的缓存,因为它功能强大,经过验证,功能齐全,并与其他流行的库和框架集成。
Ehcache可以从进程内缓存扩展到使用TB级缓存的混合进程内进程外部署。Ehcache应用场景如下图:
Ehcache应用场景Ehcache的架构如下图:
Ehcache架构图Ehcache的主要特征如下图:
Ehcache主要特征Ehcache缓存数据过期策略如下图:
缓存数据过期策略Ehcache过期数据淘汰机制:即懒淘汰机制,每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做TTL比较来判断是否过期。GuavaCache基本介绍:GuavaCache是Google开源的Java重用工具集库Guava里的一款缓存工具。GuavaCache特点与功能如下图:
GuavaCache特点与功能GuavaCache的应用场景如下图:
GuavaCache应用场景GuavaCache的数据结构如下图:
GuavaCache数据结构图
GuavaCache结构特点GuavaCache的缓存更新策略如下图:
GuavaCache缓存更新策略GuavaCache的缓存回收策略如下图:
GuavaCache缓存回收策略分布式缓存
指的是与应用分离的缓存组件或服务,其最大的优点是自身就是一个独立的应用,与本地应用隔离,多个应用可直接的共享缓存。
分布式缓存的主要应用场景如下图:
分布式缓存应用场景
分布式缓存的主要接入方式如下图:
分布式缓存接入方式
下面介绍分布式缓存常见的2大开源实现Memcached和Redis。Memcached
Memcached是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的Hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。Memcached的特点如下图:
Memcached特点Memcached的基本架构如下图:
Memcached基本架构缓存数据过期策略:LRU(最近最少使用)到期失效策略,在Memcached内存储数据项时,可以指定它在缓存的失效时间,默认为永久。
当Memcached服务器用完分配的内存时,失效的数据被首先替换,然后是最近未使用的数据。数据淘汰内部实现:懒淘汰机制为每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做TTL比较来判断是否过期。分布式集群实现:服务端并没有分布式功能。每个服务器都是完全独立和隔离的服务。Memcached的分布式,是由客户端程序实现的。
数据读写流程图
Memcached分布式集群实现Redis
Redis是一个远程内存数据库(非关系型数据库),性能强劲,具有复制特性以及解决问题而生的独一无二的数据模型。
它可以存储键值对于5种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能。
Redis还可以使用客户端分片来扩展写性能,内置了复制(replication),LUA脚本(Luascripting),LRU驱动事件(LRUeviction),事务(transactions)和不同级别的磁盘持久化(persistence)。
并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(HighAvailability)。Redis的数据模型如下图:
Redis数据模型Redis的数据淘汰策略如下图:
Redis数据淘汰策略Redis的数据淘汰内部实现如下图:
Redis数据淘汰内部实现Redis的持久化方式如下图:
Redis持久化方式Redis底层实现部分解析如下图:
启动的部分过程图解
Server端持久化的部分操作图解
底层哈希表实现(渐进式Rehash)如下图:
初始化字典
新增字典元素图解
Rehash执行流程Redis的缓存设计原则如下图所示:
Redis缓存设计原则Redis与Memcached的比较如下图:
Redis与Memcached比较
下面主要介绍缓存架构设计常见问题以及解决方案,业界案例。
分层缓存架构设计
缓存带来的复杂度问题
常见的问题主要包括如下几点:数据一致性缓存穿透缓存雪崩缓存高可用缓存热点
下面逐一介绍分析这些问题以及相应的解决方案。数据一致性
因为缓存属于持久化数据的一个副本,因此不可避免的会出现数据不一致问题,导致脏读或读不到数据的情况。
数据不一致,一般是因为网络不稳定或节点故障导致问题出现的常见3个场景以及解决方案:
缓存穿透
缓存一般是KeyValue方式存在,当某一个Key不存在时会查询数据库,假如这个Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力。
主要解决方案:对结果为空的数据也进行缓存,当此Key有数据后,清理缓存。一定不存在的Key,采用布隆过滤器,建立一个大的Bitmap中,查询时通过该Bitmap过滤。缓存雪崩
缓存高可用
缓存是否高可用,需要根据实际的场景而定,并不是所有业务都要求缓存高可用,需要结合具体业务,具体情况进行方案设计,例如临界点是否对后端的数据库造成影响。
主要解决方案:分布式:实现数据的海量缓存。复制:实现缓存数据节点的高可用。缓存热点
一些特别热点的数据,高并发访问同一份缓存数据,导致缓存服务器压力过大。
解决:复制多份缓存副本,把请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力
业界案例
案例主要参考新浪微博陈波的技术分享,可以查看原文《百亿级日访问量的应用如何做缓存架构设计?》技术挑战
Feed缓存架构图
架构特点
新浪微博把SSD应用在分布式缓存场景中,将传统的RedisMCMySQL方式,扩展为RedisMCSSDCacheMySQL方式。
SSDCache作为L2缓存使用,第一降低了MCRedis成本过高,容量小的问题,也解决了穿透DB带来的数据库访问压力。
主要在数据架构、性能、储存成本、服务化等不同方面进行了优化增强。
当代散文转湖我的生活新变化文朱燕秋日的一个清晨,细雨霏霏,一如往日般径自走向鱼丘湖的方向。习惯了每天晨起后绕着湖走走,看湖光峰影,听鸟儿叽唱,与晨练的人们为伍,在闲散的脚步中开……
人在转运之前,往往会有这些迹象,一定要坚持下去头号解忧馆人们常说:人生在世,不如意之事十之八九。是啊,人生就像是一个茶几,上面摆满了餐具和杯具(悲剧)。人生的磨难也许会迟到,但是绝对不会缺席。任何人都总会有遇到……
克洛普执教利物浦7周年数据一览曾连续1369天英超主场不败直播吧10月8日讯今天是克洛普执教利物浦俱乐部的七周年纪念日,利物浦官网统计了克洛普的一些里程碑数据。1、自2015年10月8日上任后,克洛普已赢得6座主要冠军,包括欧冠……
阿联酋送来超级大单,我国航天技术在国际上迎来多国追捧中阿两国达成协议,由阿联酋100自主研发的希拉德2号月球探测车将搭乘我国的嫦娥七号探测器于2026年在月球南极着陆,这次搭乘火箭阿联酋将支付我方300亿元人民币!为什么阿……
世乒赛伊藤美诚30吊打奥运亚军,日本女团晋级决赛与国乒争冠北京时间10月7日晚,成都世乒赛女团决赛名单正式出炉继世界排名第一的中国队30轻取中国台北队之后,世界排名第二的日本队也大获全胜,30横扫德国女乒晋级,所以冠军就将在国乒与日本……
只要你在,我就一直喜欢缘份是如此美好,人与人之间可以产生一段珍贵的情谊,互相相遇、相识、相知都是因为缘分才可以成就。除了血缘至亲的亲情,甜蜜的爱情、美好的友情,都是因为一份美好缘分的遇见。不管……
距榜首就差1分!郑铮任意球绝杀中超泰山21逆转梅州来源:【海报新闻】北京时间10月5日19点30分,2022赛季中超联赛第21轮迎来一场焦点战,山东泰山作客五华县奥体中心惠堂体育场,对阵升班马梅州客家。第28分钟,刘洋破……
不会搭配的女孩子,可以选择两件套裙子,换个穿搭思路更时髦不知道大家对于运动款式的衣服是什么样的看法,这种风格给我的印象第一是休闲,第二是穿着很舒服,接下来让我们一起来看看美女如何将身上的衣服穿出美感的,上半身是一件运动开衫,做工相当……
这座位于中国东北的小城不输釜山,美过首尔却少有人知每到冬天,中国的东北就会变成了冰雪的世界雪花漫天飞舞大地白茫茫的一片都藏在洁白的雪中繁华的城市还有林中的老式的木结构房屋美的不可方物电……
慢性肾小球肾炎慢性肾小球肾炎,简称慢性肾炎。病因一般认为主要是机体对某些病原的免疫与感染反应,病变是肾小球炎症性损害。本病以男性患者较多,发病年龄大多在青壮年期。其临床主要表现有水肿、蛋白尿……
车检新政实施小汽车十年仅两检广东某二手车市场特价区现场。南都记者梁罗喆摄(南都资料图)日前,公安部研究制定并印发2022年服务经济社会发展助力稳住经济大盘22项重点措施。10月1日起,公安部会同市场……
认识Loona宠物玩具陪伴机器人,aibo都不如她好玩2014年成立的可以科技是一家消费级机器人公司,专注于家庭陪伴场景,将控制技术、感知技术、人工智能融入进产品设计,打造了CellRobot、ClicBot等多款令人眼前一亮的可……