理解分布式系统中的缓存架构(上)

本文深入探讨大型分布式系统中的缓存,涵盖CDN缓存、反向代理缓存、本地应用缓存(如Ehcache和Guava Cache)以及分布式缓存(如Memcached和Redis)。内容涉及各种缓存的原理、应用场景、优缺点及实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景。

1 缓存概述

缓存概述

2 缓存的分类

缓存主要分为以下四类

 

缓存的分类

2.1 CDN缓存

基本介绍

CDN(Content Delivery Network 内容分发网络)的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求

应用场景

主要缓存静态资源,例如图片,视频

应用图

未使用CDN缓存

使用CDN缓存

优点

优点

2.2 反向代理缓存

基本介绍

反向代理位于应用服务器机房,处理所有对WEB服务器的请求。
如果用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。通过降低向WEB服务器的请求数,从而降低了WEB服务器的负载。

应用场景

一般只缓存体积较小静态文件资源,如css、js、图片

应用图

反向代理缓存应用图

开源实现

开源实现

2.3 本地应用缓存

基本介绍

指的是在应用中的缓存组件,其最大的优点是应用和cache是在同一个进程内部,请求缓存非常快速,没有过多的网络开销等,在单应用不需要集群支持或者集群情况下各节点无需互相通知的场景下使用本地缓存较合适;
同时,它的缺点也是应为缓存跟应用程序耦合,多个应用程序无法直接的共享缓存,各应用或集群的各节点都需要维护自己的单独缓存,对内存是一种浪费。

应用场景

缓存字典等常用数据

缓存介质

缓存介质

实现

编程直接实现

编程直接实现

Ehcache

基本介绍

Ehcache是​​一种基于标准的开源缓存,可提高性能,卸载数据库并简化可伸缩性。
它是使用最广泛的基于Java的缓存,因为它功能强大,经过验证,功能齐全,并与其他流行的库和框架集成。Ehcache可以从进程内缓存扩展到使用TB级缓存的混合进程内/进程外部署

应用场景

Ehcache应用场景

Ehcache架构图

Ehcache架构图

Ehcache主要特征

Ehcache主要特征

Ehcache缓存数据过期策略

缓存数据过期策略.png

Ehcache过期数据淘汰机制

懒淘汰机制:每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做TTL比较来判断是否过期

Guava Cache

2.4 分布式缓存

基本介绍

Guava Cache是Google开源的Java重用工具集库Guava里的一款缓存工具

特点与功能

Guava Cache特点与功能.png

应用场景

Guava Cache应用场景.png

数据结构图

Guava Cache数据结构图

Guava Cache结构特点.png

缓存更新策略

Guava Cache 缓存更新策略

缓存回收策略

Guava Cache缓存回收策略.png

2.4 分布式缓存

指的是与应用分离的缓存组件或服务,其最大的优点是自身就是一个独立的应用,与本地应用隔离,多个应用可直接的共享缓存。

主要应用场景

 

分布式缓存应用场景.png

主要接入方式

 

分布式缓存接入方式.png

下面介绍分布式缓存常见的2大开源实现Memcached和Redis

Memcached

基本介绍

Memcached是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

特点

Memcached特点

基本架构

Memcached基本架构

缓存数据过期策略

LRU(最近最少使用)到期失效策略,在Memcached内存储数据项时,可以指定它在缓存的失效时间,默认为永久。当Memcached服务器用完分配的内时,失效的数据被首先替换,然后也是最近未使用的数据。

数据淘汰内部实现

懒淘汰机制:每次往缓存放入数据的时候,都会存一个时间,在读取
的时候要和设置的时间做TTL比较来判断是否过期

分布式集群实现

服务端并没有 “ 分布式 ” 功能。每个服务器都是完全独立和隔离的服务。 Memcached的分布式,是由客户端程序实现的

数据读写流程图

Memcached分布式集群实现

Redis

基本介绍

Redis是一个远程内存数据库(非关系型数据库),性能强劲,具有复制特性以及解决问题而生的独一无二的数据模型。它可以存储键值对与5种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,
Redis还可以使用客户端分片来扩展写性能。内置了 复制(replication),LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。

数据模型

Redis数据模型

数据淘汰策略

Redis数据淘汰策略

数据淘汰内部实现

Redis数据淘汰内部实现.png

持久化方式

Redis持久化方式

底层实现部分解析

  • 启动的部分过程图解

     

    启动的部分过程

  • server端持久化的部分操作图解

     

    server端持久化的部分操作

  • 底层哈希表实现(渐进式Rehash)

初始化字典

初始化字典

 

新增字典元素图解

新增字典元素图解

 

Rehash执行流程

Rehash执行流程

 

缓存设计原则

Redis缓存设计原则.png

Redis与Memcached比较

 RedisMemcached
支持的数据结构哈希、列表、集合、有序集合纯kev-value
持久化支持
高可用支持redis天然支持集群功能,可以实现主动复制,读写分离。官方也提供了sentinel集群管理工具,能够实现主从服务监控,故障自动转移,这一切,对于客户端都是透明的,无需程序改动,也无需人工介入需要二次开发
存储value容量最大512M最大1M
内存分配临时申请空间,可能导致碎片预分配内存池的方式管理内存,能够省去内存分配时间
虚拟内存使用有自己的VM机制,理论上能够存储比物理内存更多的数据,当数据超量时,会引发swap,把冷数据刷到磁盘上所有的数据存储在物理内存里
网络模型非阻塞IO复用模型,提供一些非KV存储之外的排序,聚合功能,在执行这些功能时,复杂的CPU计算,会阻塞整个IO调度非阻塞IO复用模型
水平扩展的支持暂无暂无
多线程Redis支持单线程Memcached支持多线程,CPU利用方面Memcache优于Redis
过期策略有专门线程,清除缓存数据懒淘汰机制:每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做TTL比较来判断是否过期
单机QPS约10W约60W
源代码可读性代码清爽简洁能是考虑了太多的扩展性,多系统的兼容性,代码不清爽
适用场景复杂数据结构、有持久化、高可用需求、value存储内容较大纯KV,数据量非常大,并发量非常大的业务
内容概要:本文档是关于基于Tecnomatix的废旧智能手机拆解产线建模虚拟调试的毕业设计任务书。研究内容主要包括:分析废旧智能手机拆解工艺流程;学习并使用Tecnomatix软件搭建拆解产线的三维模型,包括设备、输送装置等;进行虚拟调试以模拟各种故障情况,并对结果进行分析提出优化建议。研究周期为16周,涵盖了文献调研、拆解实验、软件学习、建模、调试和论文撰写等阶段。文中还提供了Python代码来模拟部分关键流程,如拆解顺序分析、产线布局设计、虚拟调试过程、故障模拟分析等,并实现了结果的可视化展示。 适合人群:本任务书适用于机械工程、工业自动化及相关专业的本科毕业生,尤其是那些对智能制造、生产线优化及虚拟调试感兴趣的学生。 使用场景及目标:①帮助学生掌握Tecnomatix软件的应用技能;②通过实际项目锻炼学生的系统建模和虚拟调试能力;③培养学生解决复杂工程问题的能力,提高其对废旧电子产品回收再利用的认识和技术水平;④为后续的研究或工作打下坚实的基础,比如从事智能工厂规划、生产线设计优化等工作。 其他说明:虽然文中提供了部分Python代码用于模拟关键流程,但完整的产线建模仍需借助Tecnomatix商业软件完成。此外,为了更好地理解和应用这些内容,建议学生具备一定的编程基础(如Python),并熟悉相关领域的基础知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值