大型分布式系统中的缓存架构

反无人机作战体系全解析:从低慢小探测到分层拦截 随着小型无人机在军事和民用领域的广泛使用,低慢小目标探测与拦截成为低空安全的核心挑战。传统防空体系面对成本低廉、飞行高度低、雷达特征小的无人机集群时,暴露出探测难、识别难、处置成本失衡等问题。为应对威胁,反无人机体系采用分层闭环设计,融合雷达、光电、声学与无线电侦测实现多源感知,通过电子战软杀伤与导弹、高炮、激光等硬杀伤手段协同配合,并借助自动化指控系统缩短“传感器到射手”的响应时延。该体系既可支撑战场要地防护,也能为民用低空安防提供参考。围绕分层反制逻辑,梳理探测、软硬杀伤、指控布防及实战短板,提供理解反 阅读详情

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

缓存概述

13467292-7b3227a2cd1e2904

缓存概述

缓存的分类

缓存主要分为四类,如下图:

13467292-9e6ce0a4b477b486

缓存的分类

CDN 缓存

CDN(Content Delivery Network 内容分发网络)的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中。

在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

应用场景:主要缓存静态资源,例如图片,视频。

CDN 缓存应用如下图:

13467292-e24b6c2a3db0c9f4

未使用 CDN 缓存

13467292-cc1b6229cf7a8398

使用 CDN 缓存

CDN 缓存优点如下图:

13467292-6a8e0e246736d320

优点

反向代理缓存

反向代理位于应用服务器机房,处理所有对 Web 服务器的请求。

如果用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。

如果没有缓冲则先向 Web 服务器发出请求,取回数据,本地缓存后再发送给用户。通过降低向 Web 服务器的请求数,从而降低了 Web 服务器的负载。

应用场景:一般只缓存体积较小静态文件资源,如 css、js、图片。

反向代理缓存应用如下图:

13467292-3bda4c5a6bd7f933

反向代理缓存应用图

开源实现如下图:

13467292-87e8142b44f0a220

开源实现

本地应用缓存

指的是在应用中的缓存组件,其最大的优点是应用和 Cache 是在同一个进程内部,请求缓存非常快速,没有过多的网络开销等。

在单应用不需要集群支持或者集群情况下各节点无需互相通知的场景下使用本地缓存较合适。

同时,它的缺点也是应为缓存跟应用程序耦合,多个应用程序无法直接的共享缓存,各应用或集群的各节点都需要维护自己的单独缓存,对内存是一种浪费。

应用场景:缓存字典等常用数据。

缓存介质如下图所示:

13467292-5b813b051a4ff696

缓存介质

编程直接实现如下图:

13467292-70bb76f5fc28fb04

编程直接实现

Ehcache

基本介绍:Ehcache 是一种基于标准的开源缓存,可提高性能,卸载数据库并简化可伸缩性。

它是使用最广泛的基于 Java 的缓存,因为它功能强大,经过验证,功能齐全,并与其他流行的库和框架集成。

Ehcache 可以从进程内缓存扩展到使用 TB 级缓存的混合进程内/进程外部署。

Ehcache 应用场景如下图:

13467292-da8a96734e73b343

Ehcache 应用场景

Ehcache 的架构如下图:

13467292-8903ee59dd996025

Ehcache 架构图

Ehcache 的主要特征如下图:

13467292-333ad24a6e725612

Ehcache 主要特征

Ehcache 缓存数据过期策略如下图:

13467292-a46f20c7886f71c4

缓存数据过期策略

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

Guava Cache

基本介绍:Guava Cache 是 Google 开源的 Java 重用工具集库 Guava 里的一款缓存工具。

Guava Cache 特点与功能如下图:

13467292-770115db71094366

Guava Cache 特点与功能

Guava Cache 的应用场景如下图:

13467292-5bd03ed1eec66d0b

Guava Cache 应用场景

Guava Cache 的数据结构如下图:

13467292-01749b83ad12f6c6

Guava Cache 数据结构图

13467292-0a71e29ef0c8ef49

Guava Cache 结构特点

Guava Cache 的缓存更新策略如下图:

13467292-a3fe9c3559ba0f06

Guava Cache 缓存更新策略

Guava Cache 的缓存回收策略如下图:

13467292-29b8768272b839fa

Guava Cache 缓存回收策略

分布式缓存

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

分布式缓存的主要应用场景如下图:

13467292-799539671e00b0a1

分布式缓存应用场景

分布式缓存的主要接入方式如下图:

13467292-b8a3e983223d9c54

分布式缓存接入方式

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

Memcached

Memcached 是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的 Hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

Memcached 的特点如下图:

13467292-20e624650c3b46f0

Memcached 特点

Memcached 的基本架构如下图:

13467292-6f7a5f48c5c3ee6f

Memcached 基本架构

缓存数据过期策略:LRU(最近最少使用)到期失效策略,在 Memcached 内存储数据项时,可以指定它在缓存的失效时间,默认为永久。

当 Memcached 服务器用完分配的内存时,失效的数据被首先替换,然后是最近未使用的数据。

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

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

13467292-1989b429e8307e83

数据读写流程图

13467292-e9ca374ac7798779

Memcached 分布式集群实现

Redis

Redis 是一个远程内存数据库(非关系型数据库),性能强劲,具有复制特性以及解决问题而生的独一无二的数据模型。

它可以存储键值对与 5 种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能。

Redis 还可以使用客户端分片来扩展写性能,内置了 复制(replication),LUA 脚本(Lua scripting),LRU 驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence)。

并通过 Redis 哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)。

Redis 的数据模型如下图:

13467292-3433fe1449069b22

Redis 数据模型

Redis 的数据淘汰策略如下图:

13467292-e985400fcd4f21d8

Redis 数据淘汰策略

Redis 的数据淘汰内部实现如下图:

13467292-c8cf104a10aa09dc

Redis 数据淘汰内部实现

Redis 的持久化方式如下图:

13467292-d909f4ecdc23da40

Redis 持久化方式

Redis 底层实现部分解析如下图:

13467292-ca22d6cde52d1c28

启动的部分过程图解

13467292-c55a6f41fad4dde8

Server 端持久化的部分操作图解

底层哈希表实现(渐进式Rehash)如下图:

13467292-ee3e74e9b83071ef

初始化字典

13467292-34567cad5658d7cc

新增字典元素图解

13467292-d81e0e1a14a42f0d

Rehash 执行流程

Redis 的缓存设计原则如下图所示:

13467292-d604276890e342f5

Redis 缓存设计原则

Redis 与 Memcached 的比较如下图:

13467292-45e8e931fc30d8a8

Redis 与 Memcached 比较

下面主要介绍缓存架构设计常见问题以及解决方案,业界案例。

分层缓存架构设计

13467292-8e8379490be9b4a8

缓存带来的复杂度问题

常见的问题主要包括如下几点:

数据一致性

缓存穿透

缓存雪崩

缓存高可用

缓存热点

下面逐一介绍分析这些问题以及相应的解决方案。

数据一致性

因为缓存属于持久化数据的一个副本,因此不可避免的会出现数据不一致问题,导致脏读或读不到数据的情况。

数据不一致,一般是因为网络不稳定或节点故障导致问题出现的常见 3 个场景以及解决方案:

13467292-d733b462e96428c4

缓存穿透

缓存一般是 Key-Value 方式存在,当某一个 Key 不存在时会查询数据库,假如这个 Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力。

主要解决方案:

对结果为空的数据也进行缓存,当此 Key 有数据后,清理缓存。

一定不存在的 Key,采用布隆过滤器,建立一个大的 Bitmap 中,查询时通过该 Bitmap 过滤。

缓存雪崩

13467292-e9f402c20fc80595

缓存高可用

缓存是否高可用,需要根据实际的场景而定,并不是所有业务都要求缓存高可用,需要结合具体业务,具体情况进行方案设计,例如临界点是否对后端的数据库造成影响。

主要解决方案:

分布式:实现数据的海量缓存。

复制:实现缓存数据节点的高可用。

缓存热点

一些特别热点的数据,高并发访问同一份缓存数据,导致缓存服务器压力过大。

解决:复制多份缓存副本,把请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力

业界案例

案例主要参考新浪微博陈波的技术分享,可以查看原文《百亿级日访问量的应用如何做缓存架构设计?》

技术挑战

13467292-3af1c226c419d64c

Feed 缓存架构图

13467292-f563c64a2005d276

架构特点

新浪微博把 SSD 应用在分布式缓存场景中,将传统的 Redis/MC + MySQL 方式,扩展为 Redis/MC + SSD Cache + MySQL 方式。

SSD Cache 作为 L2 缓存使用,第一降低了 MC/Redis 成本过高,容量小的问题,也解决了穿透 DB 带来的数据库访问压力。

主要在数据架构、性能、储存成本、服务化等不同方面进行了优化增强。

13467292-ae11ccde3cc4efe5
13467292-213114368689d093


Java高架构师、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费学习加群:835638062 点击链接加入群聊【Java高级架构】:https://jq.qq.com/?_wv=1027&k=5S3kL3v

11.1华为OD机试真题 新系统 - 整理学生编号 (Java/Py/C/C++/Js/Go) 阅读详情

相关推荐

史上最小白之RNN详解

1.前言 网上目前已经有诸多优秀的RNN相关博客,但是我写博客的出发点主要是为了加深和巩固自己的理解,所以还是决定自己再进行一下总结和描述,如有不正确的地方欢迎指正~ 2.区分RNN 循环神经网络(Recurrent Neural Network),递归神经网络(Recursive Neural Network),你有没有发现他们的缩写都是RNN,那他们两个是同一回事儿吗?网上有一些博客把这两就当...

Tink1995的博客 4万+

快速掌握:大型分布式系统中的缓存架构

关注我们获得更多内容“本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景。缓存概述缓存概述缓存的分类缓存主要分为四类,如下图:缓存的分类CDN 缓存C...

Enmotech的博客 812

纯JS实现SM3加密算法(兼容IE浏览器)

纯JS实现SM3加密,IE、谷歌、火狐等浏览器可以直接使用。

qianpou的博客 7358

分享公司缓存的用法

主题   公司在缓存用的还是比较简单的,可能不同于其他公司需要redis,memcache等等缓存.公司使用的是ehcache(怎么感觉他们很高大上,我们很low...大概是因为ehcache和spring结合比较好,通过注解使用太简单了吧.).   这篇文章主要分享ehcache公司是怎么使用的. 配置 Spring引入ehcache   配置倒也没啥好说的.网上百...

ajunkui4460的博客 213

详解各类以太网标准10BASE-T/100BASE-T4/100BASE-FX/1000BASE-X等

以太网是现实世界中最普遍的一种计算机网络。以太网有两类:第一类是经典以太网,第二类是交换式以太网,使用了一种称为交换机的设备连接不同的计算机。经典以太网是以太网的原始形式,运行速度从3-10 Mbps不等;而交换式以太网正是广泛应用的以太网,可运行在100Mbps、1000Mbps和10000Mbps高速率,分别以快速以太网、千兆以太网和万兆以太网的形式呈现

不积跬步,无以至千里! 5万+

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

缓存使用的注意点

使用缓存中需要注意的问题

一只不知疲倦的学习猿 468

k8s学习笔记(3)--- kubernetes核心技术概念

kubernetes核心技术概念 1.API对象         API对象是K8s集群中的管理操作单元。K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作。例如副本集Replica Set对应的API对象是RS。 2.集群(Cluster)         集群是指由...

梦谜的博客 1293

关于web缓存的思考

公司缓存出了些问题,解决的过程中总结了一些缓存使用的方式方法。 公司缓存遇到的问题 1) 缓存无过期时间导致内存占用过高2) 缓存清除后,失效后仍用到,不可从数据库恢复 造成这些问题的原因是开发人员对缓存的设计和使用原则不清楚,架构上也没有明确的说明和引导。 关于上面的两个问题 1) 缓存添加时一定要有清除策略。程序状态完结时主动删除或者设置合理过期时间,不然就会造成内存泄漏,当然架构层...

weixin_34387468的博客 158

让 IF 更好读:在 ABAP 里尽量使用正向条件的实战指南

摘要:SAP系统开发中,代码可读性与可维护性的关键往往在于条件判断的写法。Clean ABAP风格指南建议尽量采用正向表达的条件判断,如使用has_entries = abap_true而非否定式写法。正向表达能降低理解成本,避免"否定的否定"带来的逻辑混乱,但不应为追求正向而制造空分支。在团队协作中,正向条件更利于代码评审和测试覆盖,建议通过工具检查和智能评审确保规范执行。落地时可关注变量命名正向化、避免空分支、主流程清晰展开等要点,以提升长期维护效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 246

智能测试策略优化:平衡覆盖率、时间和资源

在软件开发过程中,测试是确保软件质量的关键环节。然而,测试工作往往面临着诸多挑战,其中如何在保证测试覆盖率的前提下,合理分配时间和资源是一个核心问题。本文章的目的在于探讨智能测试策略的优化方法,帮助软件测试团队在有限的时间和资源条件下,实现尽可能高的测试覆盖率。文章的范围涵盖了智能测试策略的核心概念、算法原理、数学模型、实际应用案例以及相关工具和资源等方面。本文将按照以下结构进行组织:首先介绍智能测试策略优化的背景和相关概念,包括核心术语和缩略词的定义;

AIGC应用创新大全的博客 621

公司缓存问题和解决办法

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,下一步考虑使用Canal监听数据库数据变化。

Baby_Bus666的博客 324

IEC 61400-1:2019 附录 C 湍流模型全面解读

IEC 61400-1:2019 附录 C 全面解读

weixin_46713695的博客 472

大型网站架构系列:缓存在分布式系统中的应用(一)

大型网站架构系列:缓存在分布式系统中的应用(一)

liang08114的专栏 339

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大型网站架构系列:缓存在分布式系统中的应用(二)

大型网站架构系列:缓存在分布式系统中的应用(二) 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 本文是缓存在分布式应用第二篇文章,介绍分布式缓存,Memcache,Redis,本地缓存(硬盘缓存,内存缓存)以及缓存在分布式系统中的架构示例。本文主要是自己的学习总结和网络文章摘录,供学习之用。 本次分享大纲 缓存概

jfkidear的专栏 647

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 你还在Java8中使用循环语句吗?
下一篇: Java 线程池详解
普通网友
博客等级 码龄8年 55粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值