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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 大型分布式系统中的缓存架构

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


缓存概述

image.png缓存的分类


缓存主要分为四类,如下图:image.png缓存的分类


CDN 缓存


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


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


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


CDN 缓存应用如下图:image.pngCDN 缓存优点如下图:

image.png

反向代理缓存


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


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


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


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


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

image.png反向代理缓存应用图


开源实现如下图:image.png开源实现


本地应用缓存


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


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


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


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


缓存介质如下图所示:image.png编程直接实现


Ehcache


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


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


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


Ehcache 应用场景如下图:image.pngimage.png
Ehcache 过期数据淘汰机制:
懒淘汰机制,每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做 TTL 比较来判断是否过期。


Guava Cache


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


Guava Cache 特点与功能如下图:image.pngimage.pngimage.pngimage.pngimage.png下面介绍分布式缓存常见的 2 大开源实现 Memcached 和 Redis。


Memcached


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


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


Memcached 的特点如下图:image.pngMemcached 的基本架构如下图:

image.pngMemcached 基本架构


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


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


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


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

Redis


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


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


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


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


Redis 的数据模型如下图:image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngRedis 的缓存设计原则如下图所示:

image.pngRedis 缓存设计原则


Redis 与 Memcached 的比较如下图:image.pngimage.png缓存带来的复杂度问题


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

  • 数据一致性
  • 缓存穿透
  • 缓存雪崩
  • 缓存高可用
  • 缓存热点


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


数据一致性


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


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

image.png

缓存穿透


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


主要解决方案:

  • 对结果为空的数据也进行缓存,当此 Key 有数据后,清理缓存。
  • 一定不存在的 Key,采用布隆过滤器,建立一个大的 Bitmap 中,查询时通过该 Bitmap 过滤。


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


主要解决方案:

  • 分布式:实现数据的海量缓存。
  • 复制:实现缓存数据节点的高可用。


缓存热点


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


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


业界案例


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


技术挑战

image.pngimage.png

架构特点


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


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


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

目录
相关文章
|
5月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
179 5
|
4月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
1104 57
|
8月前
|
存储 缓存 NoSQL
分布式系统架构8:分布式缓存
本文介绍了分布式缓存的理论知识及Redis集群的应用,探讨了AP与CP的区别,Redis作为AP系统具备高性能和高可用性但不保证强一致性。文章还讲解了透明多级缓存(TMC)的概念及其优缺点,并详细分析了memcached和Redis的分布式实现方案。此外,针对缓存穿透、击穿、雪崩和污染等常见问题提供了应对策略,强调了Cache Aside模式在解决数据一致性方面的作用。最后指出,面试中关于缓存的问题多围绕Redis展开,建议深入学习相关知识点。
564 8
|
4月前
|
消息中间件 缓存 算法
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
207 0
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
|
6月前
|
消息中间件 人工智能 监控
文生图架构设计原来如此简单之分布式服务
想象一下,当成千上万的用户同时要求AI画图,如何公平高效地处理这些请求?文生图/图生图大模型的架构设计看似复杂,实则遵循简单而有效的原则:合理排队、分工明确、防患未然。
221 14
文生图架构设计原来如此简单之分布式服务
|
6月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
437 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
6月前
|
人工智能 运维 监控
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。
|
8月前
|
存储 缓存 安全
分布式系统架构7:本地缓存
这是小卷关于分布式系统架构学习的第10篇文章,主要介绍本地缓存的基础理论。文章分析了引入缓存的利弊,解释了缓存对CPU和I/O压力的缓解作用,并讨论了缓存的吞吐量、命中率、淘汰策略等属性。同时,对比了几种常见的本地缓存工具(如ConcurrentHashMap、Ehcache、Guava Cache和Caffeine),详细介绍了它们的访问控制、淘汰策略及扩展功能。
193 6
|
9月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
10月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
229 3

热门文章

最新文章