缓存分区及其透明性的处理方式

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 【6月更文挑战第8天】该文探讨了Redis缓存分区的重要性与方法。分区通过在多台服务器上分散缓存,提升可用性、性能和可伸缩性。最后,强调技术的双刃剑特性,需根据实际情况谨慎选用。

简介

分片是最常见的策略,数据根据逻辑分布到各分区。为了处理分区透明性,文章提到了分片、复制、位置和逻辑透明性。

mandala曼德罗符号.png

然而,分区也带来挑战,如数据分区决策、故障处理、查询复杂性和数据一致性。

为应对这些问题,本文提及了布隆过滤器防止缓存穿透,随机过期策略缓解缓存雪崩,以及控制热点key更新以确保数据一致性。

1 如何对redis缓存进行分区?

一般不会在应用程序中执行分区,而是在分布式数据库中做透明化处理。

对缓存进行分区涉及在多台计算机上拆分缓存。

与使用单个缓存服务器相比,此结构具有多个优势,包括:

创建比单个服务器上可以存储的缓存大得多的缓存。跨服务器分发数据,提高可用性。

如果一台服务器发生故障或变得不可访问,则它保存的数据不可用,但仍可以访问其余服务器上的数据。

对于缓存,这并不重要,因为缓存的数据只是数据库中保存的数据的临时副本。无法访问的服务器上的缓存数据可以改为缓存在其他服务器上。

将负载分散到服务器之间,从而提高性能和可伸缩性。
将数据地理定位到靠近访问它的用户的位置,从而减少延迟。

对于缓存,最常见的分区形式是分片。在此策略中,每个分区(或分片)本身就是一个 Redis 缓存。

数据通过使用分片逻辑定向到特定分区,分片逻辑可以使用多种方法来分发数据。

2 处理分区透明性的方式

分片模式提供了有关实现分片的更多信息。

分片透明:

用户不必知道关系数据是如何分片的,它们对数据的操作在全局关系上进行,
    即关系如何分片对用户是透明的。

复制透明:

用户不用关心数据库在网络中各个节点的复制情况,被复制的数据的更新都由系统自动完成

位置透明:

用户不必知道所操作的数据放在何处,即数据分配到哪个或哪些站点存储对用户是透明的。

逻辑透明:

是最低层次的透明性,该透明性提供数据到局部数据库的映像
    即用户不必关心局部DBMs支持哪种数据模型、使用哪种数据操纵语言,
    数据模型和操纵语言的转换是由系统完成的。

数据分布(也称分片)技术,主要用于构建数据索引,是实现“导航”功能的关键技术。

数据分布的本质是,将原数据集划分为多个数据子集,以存储到不同的地方,在一定程度上体现了数据的可用性和可靠性(一个存储节点故障,只影响该存储节点的数据)。

在实际情况下,仅考虑数据分片,其实是无法真正应用到生产环境的。

因为,故障导致数据丢失和不可用是很常见的情况。

因此,在进行分布式数据存储设计时,通常会考虑对数据进行备份,以提高数据的可用性和可靠性,而实现数据备份的关键技术就是“数据复制技术”。

3 数据库分片后也带来一些挑战

分片带来了许多挑战:

数据分区:决定如何跨多个分片对数据进行分区可能是一个挑战,因为它需要在数据接近度和数据均匀分布之间找到平衡以避免某一片太热,其他分片无流量。

故障处理:如果关键节点发生故障并且没有足够的分片来承载负载,如何在不停机的情况下在新节点上获取数据?

查询复杂性:应用程序代码与数据分片逻辑耦合,需要来自多个节点的数据的查询需要重新联接。

数据一致性:确保跨多个分片的数据一致性可能是一个挑战,因为它需要协调跨分片的数据更新。
当同时进行更新时,这可能特别困难,因为可能需要解决不同写入之间的冲突。

弹性可扩展性:随着数据量或查询数量的增加,可能需要向数据库添加其他分片。
这可能是一个复杂的过程,不可避免地会出现停机,需要手动过程在所有分片之间均匀地重新定位数据。

4 小结

常见问题规避

缓存穿透   大量访问redis不存在的key
    布隆过滤器
缓存雪崩  大量key之前存在,但是同时失效了
    增加随机过期策略,不要同时过期
缓存击穿 一些热点key失效了

热点key需要永久有效,如果需要重新设置热点key,只允许一个数据库连接去操作数据库,其他的等待完成后再进行操作

技术大多是一把双刃剑,有优势的时候,通常也意味着有其劣势。

了解这种情况,并在适当的场景使用对应的技术,才能真正的解决问题。

目录
相关文章
|
1月前
|
存储 缓存 监控
多级缓存有哪些级别?
【10月更文挑战第24天】多级缓存有哪些级别?
34 1
|
7月前
|
存储 C语言
顺序读写数据文件
顺序读写数据文件
56 1
|
7月前
|
存储 缓存 监控
|
7月前
|
canal 缓存 NoSQL
【后端面经】【缓存】33|缓存模式:缓存模式能不能解决缓存一致性问题?-03 Refresh Ahead + SingleFlight + 删除缓存 + 延迟双删
【5月更文挑战第11天】Refresh Ahead模式通过CDC异步刷新缓存,但面临缓存一致性问题,可借鉴Write Back策略解决。SingleFlight限制并发加载,减少数据库压力,适合热点数据。删除缓存模式在更新数据库后删除缓存,一致性问题源于读写线程冲突。延迟双删模式两次删除,理论上减少不一致,但可能降低缓存命中率。选用模式需权衡优劣,延迟双删在低并发下较优。装饰器模式可用于实现多种缓存模式,无侵入地增强现有缓存系统。
137 2
|
存储 缓存 分布式计算
RDD 的缓存-缓存级别 | 学习笔记
快速学习 RDD 的缓存-缓存级别
323 0
RDD 的缓存-缓存级别 | 学习笔记
|
数据采集 缓存 分布式计算
RDD 的缓存_缓存的意义_过程代码 | 学习笔记
快速学习 RDD 的缓存_缓存的意义_过程代码
RDD 的缓存_缓存的意义_过程代码 | 学习笔记
|
算法 关系型数据库 MySQL
索引合并机制详解
索引合并机制详解
793 0
索引合并机制详解
|
SQL 存储 算法
事务、全局索引、透明分布式,再见,分区健!
在刚刚发布的PolarDB-X 2.1.0版本中,开源了透明分布式能力,能带给用户完全不同的透明分布式数据库使用体验。其中,一个最明显的不同,就是用户不再需要关注分区健这个概念,这也是副标题《再见,分区健》的来由。
1236 0
事务、全局索引、透明分布式,再见,分区健!
|
存储 Java
使用 HashMap 存一万条数据,构造时传 10000 还会触发扩容吗?
向HashMap 中存10000 条数据,初始化时,构造方法传值10000,会触发扩容吗?
使用 HashMap 存一万条数据,构造时传 10000 还会触发扩容吗?