阅读 513

缓存仅仅是使用Redis?看看高并发系统缓存体系架构(缓存体系架构一)(共6篇,后续不断更新)

一 缓存概述

缓存(cache),,原始意义是指访问速度比一般随机存储器(RAM)快的一种高速存储器。

1.1 缓存分类

  1. 应用级缓存

应用级缓存也就是我们平时写的应用程序中所使用的缓存。在平时程序中一般 是按照如下操作流程来实现缓存:
上图说明
在平时程序中一般是按照如下操作流程来实现缓存的操作,首先张三用户读取 数据库,并将读取的数据存入到缓存中,其他用户读取的时候,直接从缓存中 读取,而不用查询数据库,从而提高程序的执行速度和效率。

  1. 系统级别缓存

系统级别缓存是抛开我们应用程序之外硬件的缓存操作。例如:
上图说明
某些CPU的缓存操作和如下图多级缓存流程类似,CPU在操作数据的时候,先读 取1级缓存,1级缓存如果没有数据则读取2级缓存,2级缓存没有数据则读取3 级缓存,3级缓存如果没有数据就直接从主存储器(存储指令和数据)读取数据

1.2 缓存的淘汰算法

数据缓存之后,为了避免缓存无限变大,我们需要对缓存进行管理,将一些不 用的或者很少用的或者很久没更新的缓存淘汰掉,这里就需要用到一系列淘汰 算法了,淘汰算法主要有如下几种:

  1. FIFO(先进先出)

数据最先存入缓存,那么也将最先备淘汰掉。

  1. LRU(最不常用数据)

判断缓存最近被使用的时间,时间最远被使用的缓存优先淘汰。

  1. LFU(最少使用)

一段时间内,被使用的次数最少的数据,优先淘汰掉。

1.3 缓存应用场景

  1. 频繁查询数据缓存

有一些数据经常被访问,而且变更频率较低,实时性要求不高的数据,可以把 它存储到缓存中,每次读取数据直接读缓存即可,从而提升数据的加载速度和 系统的性能。

  1. 列表排序分页数据

一些变更频率较低查询频次较高的列表、分页、排序数据,可以存入到Redis 缓存,每次查询分页或者排序的时候,直接从Redis缓存中获取。

  1. 计数器

网站中用于统计访问频次、在线人数、商品抢购次数等,也可以使用缓存来实现。

  1. 详情内容

站点中,资讯内容、商品详情等较大变更频率又低的内容,可以采用缓存来加 速数据的读取,降低IO操作。

  1. 分布式Session

实现会话共享的时候,可以使用Session来存储需要共享的会话,从而节省内 存空间。

  1. 热点排名

我们可以使用ZSet来存储热数据,并实现热点数据的排名。

  1. 发布订阅

用Redis也可以实现发布与订阅,但不推荐,推荐用MQ。

  1. 分布式锁

可以使用Redisson结合Redis实现分布式锁,Redis实现的分布式锁效率极高, 得到了市场的广泛使用。

1.4 微服务架构缓存的使用


在微服务架构中,会大量使用到缓存,如上图:

1.客户端缓存(手机、PC)
2.Nginx缓存
3.微服务网关限流令牌缓存
4.Nacos缓存服务列表、配置文件
5.各大微服务自身也具有缓存
6.数据库查询Query Cache
7.Redis集群缓存
8.Kafka也属于缓存
复制代码

二 高并发站点缓存技术选型

2.1 高并发环境概述

  1. 概述

双十一大促销活动有很多技术挑战,而最大的挑战之一就是高并发,而应对高 并发的最有效手段之一就是分布式缓存,分布式缓存不仅仅是缓存要显示的数 据这么简单,还可以在限流、队列削峰、高速读写、分布式锁等场景发挥重大 作用。分布式缓存可以说是解决高并发场景的一头野兽。

  1. 双十一活动大促分析

双十一无论抢红包、商品秒杀、抢优惠券,并发量都是超高,流量可以说是平 时几倍乃至几十倍,对服务器造成的压力也几何数字增长。面对双十一巨大流 量涌入,对要解决问题做个分析:

1、凌晨突然涌入的巨大流量。【队列削峰】【限流】
2、高并发场景秒杀、抢红包、抢优惠券,快速存取。【缓存】
3、高并发场景超卖、超额抢红包。
4、高并发场景重复抢单。【缓存解决】
复制代码

2.2 缓存概述

  1. 传统关系形数据库

传统关系型数据库能处理的并发链接一般都很有限,如果优化的很优秀,并发 链接量可高达几千,而一般公司对其优化的并不怎么乐观,很多公司的数据库 并发链接量只控制在了几百。单纯用数据库实现数据的高效存取是存在很大挑 战和问题的,因此一定要找一种方式或者软件取代传统关系型数据库的存取功 能。

  1. 缓存

针对传统关系型数据库存取性能瓶颈,我们可以采用高性能的非关系型数据库 来取代传统关系型数据库,这里以当前主流的分布式缓存技术Redis为例,可 以实现单机每秒读10万次以上,写每秒8万次以上的能力,远超关系型数据 库,因此解决传统关系型数据库的存取能力,我们可以用非关系型数据库来优 化甚至取代关系型数据库。

2.3 多种缓存对比

当前主流的缓存技术有Memcached 、Tair 、Redis ,这几款分布式缓存都各 有优缺点,可以根据场景进行选择。

  1. Memcached
Memcache是老牌的内存缓存技术,对相关领域支持比较丰富,window和linux都可以使用,各种框架都支持使用,session的信
息可以非常方便的保存到该Memcache中,每个key保存的数据量最大为1M,支持的数据类型比较单一,就是String类型,不支持
持久化。
复制代码

优点:
高性能读写,单一的数据类型(key【String】-value【Object】),支持客 式分布式集群,多线程读写性能高。 缺点:
无持久化,服务端无法实现集群,跨机房数据同步困难,架构扩容复杂度高, 不适合大规模数据量。

  1. Redis:(推荐)
Redis支持比较多的数据类型(String/list/set/sortset/hash),Redis支持集合计算的(set类型支持),每个key最大数据存储
量为1G,Redis是新兴的内存缓存技术,对各方面支持不完善,支持持久化操作。内存中的数据结构存储系统,可用作数据
库、缓存和消息中间件。基本配合后端数据库使用,存放的只是用户当前频繁调去的数据。
复制代码

优点:
高性能读写,多数据类型支持,数据持久化,高可用架构,支持分布式分片集群,单线程读写性能极高(6.x版本支持多线程)。 缺点:
多线程读写较Mencached慢,不适合处理大规模数据量。 3. Tair:

Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别与缓存和持久化存储对应。TAIR的功能是get、put、delete以及批量接口,主要针对淘宝应用。
复制代码

优点:
高性能读写,支持三种存储引擎(ddb/rdb/ldb),支持高可用,支持分布式 分片集群,支撑了几乎所有淘宝业务的缓存。 缺点:
单机情况下,读写性能较上两种较慢,适合处理大规模数据缓存。

三 双十一缓存架构设计

一谈到缓存架构,很多人想到的是Redis,但其实整套体系的缓存架构并非只 有Redis,而应该是多个层面多个软件结合形成一套非常良性的缓存体系。如 下的缓存架构设计就涉及到了多个层面的缓存软件:
为双十一大促设计的缓存架构体系,该缓存架构体系借鉴了一线大厂京东缓存 架构设计经验,并在京东设计方案上进行了优化,让它更符合一线厂家的需 要。上述架构图综合了多种缓存和多层面的缓存设计,从前端页面缓存到代理 服务器lvs和nginx缓存,以及后端服务redis缓存,包括缓存数据同步等。
宏观解说

1、HTML页面做缓存,浏览器端可以缓存HTML页面和其他静态资源,防止用户频繁刷新对后端造成巨大压力
2、Lvs实现记录不同协议以及不同用户请求链路缓存
3、Nginx这里会做HTML页面缓存配置以及Nginx自身缓存配置
4、数据查找这里用Lua取代了其他语言查找,提高了处理的性能效率,并发处理能力将大大提升
5、数据缓存采用了Redis集群+主从架构,并实现缓存读写分离操作
6、集成Canal实现数据库数据增量实时同步Redis
复制代码

备注

共6篇,后续不断更新。。。。

文章分类
后端
文章标签