• 系统架构设计师考试题库重点案例:分布式数据库缓存设计


    2018:MemCache与Redis+缓存数据同步方案+集群切片

            某企业是为城市高端用户提供高品质蔬菜生鲜服务的初创企业,创业初期为快速开展业务,该企业采用轻量型的开发架构(脚本语言+关系型数据库)研制了一套业务系统。业务开展后受到用户普遍欢迎,用户数和业务数量迅速增长,原有的数据库服务器已不能满足高度并发的业务要求。为此,该企业成立了专门的研发团队来解决该问题。张工建议重新开发整个系统, 采用新的服务器和数据架构,解决当前问题的同时为日后的扩展提供支持。但是,李工认为张工的方案开发周期过长,投入过大,当前应该在改动尽量小的前提下解决该问题。李工认为访问量很大的只是部分数据,建议采用缓存工具 MemCache 来减轻数据库服务器的压力,这样开发量小,开发周期短,比较适合初创公司,同时将来也可以通过集群进行扩展。然而,刘工又认为李工的方案中存在数据可靠性和一致性问题,在宕机时容易丢失交易数据,建议采用 Redis 来解决问题。在经过充分讨论,该公司最终决定采用刘工的方案。


    【问题 1】 (9 分)

             在李工和刘工的方案中,均采用分布式数据库缓存技术来解决问题。请说明分布式数据库缓存的基本概念。下表中对 MemCache 和 Redis 两种工具的优缺点进行了比较,请补充完善表 4-1 中的空(1)~ (6)。

    MemCache与Redis能力比较
    MemCacheRedis
    数据类型简单kv结构(1)
    持久性(2)支持
    分布式存储(3)多种方式
    多线程支持支持(4)
    内存管理(5)
    事物支持(6)有限

    【问题 2】 (8 分)

            刘工认为李工的方案存在数据可靠性和一致性的问题,请说明原因。为避免数据可靠性和一致性的问题,刘工的方案采用 Redis 作为数据库缓存,请说明基本的Redis 与原有关系数据库的数据同步方案。

    【问题 3】 (8 分)

            请给出 Redis 分布式存储的 2 种常见方案和Redis 集群切片的几种常见方式。

    【解答】

    【问题1】

    • 分布式数据库缓存指的是在高并发环境下,为了减轻数据库压力和提高系统响应时间,在数据库系统和应用系统之间增加的独立缓存系统。
    • (1)多种数据结构
    • (2) 不支持
    • (3) 客户端哈希分片/一致性哈希
    • (4) 不支持(虽然新版redis支持,但是考试是不支持的)
    • (5) 有,私有内存池
    • (6) 不支持

    【问题2】

    • 可靠性和一致性问题原因:
      • MemCache没有持久化功能,所以掉电数据会全部丢失,而且无法直接恢复,这存在可靠性问题。
      • MemCache不支持事务,所以操作过程中可能产生数据的不一致性。
    • 同步方案:读取数据时,先读取Redis中的数据,如果Redis没有,则从原数据库中读取,并同步更新Redis中的数据。写回时,写入到原数据库中,并同步更新至Redis中。

    【问题3】

    • redis分布式存储方案
      • 哨兵模式
      • 集群模式
    • Redis 集群切片的几种常见方式
      • 一致性哈希:通过一致性哈希算法,将数据分布到多个节点上,每个节点负责一定范围的数据。
      • 哈希槽:整个数据集被划分为 16384 个哈希槽,每个节点负责其中一部分哈希槽的数据。
      • 分片规则:基于自定义的分片规则将数据划分到不同的节点上。

    2020:Redis数据类型+持久化方式+淘汰机制

    阅读以下关于数据库缓存的叙述,在答题纸上回答问题1至问题3。
    某互联网文化发展公司因业务发展,需要建立网上社区平台,为用户提供一个对网络文化产品(如互联网小说、电影、漫画等)进行评论、交流的平台。该平台的部分功能如下:
    (a)用户帖子的评论计数器;
    (b)支持粉丝列表功能;
    (c)支持标签管理;
    (d)支持共同好友功能等;
    (e)提供排名功能,如当天最热前10名帖子排名、热搜榜前5排名等;
    (f)用户信息的结构化存储;
    (g)提供好友信息的发布/订阅功能。
    该系统在性能上需要考虑高性能、高并发,以支持大量用户的同时访问。开发团队经过综合考虑,在数据管理上决定采用Redis+数据库(缓存+数据库)的解决方案。

    【问题1】 (10分)

            Redis支持丰富的数据类型,并能够提供--些常见功能需求的解决方案。请选择题干描述的(a)~(g) 功能选项,填入表中(1)~ (5)的空白处。

    Redis 数据类型与业务功能对照表
    数据类型存储的值可实现的业务功能
    String字符串、整数或浮点数(1)
    List列表(2)
    Set无序集合(3)
    Hash包括键值对的无序散列表(4)
    ZSet有序集合(5)

    【问题2】 (7 分)

            该网上社区平台需要为用户提供7X24小时的不间断服务。同时在系统出现宕机等故障时,能在最短时间内通过重启等方式重新建立服务。为此,开发团队选择了Redis持久化支持。Redis有两种持久化方式,分别是RDB(Redis DataBase) 持久化方式和AOF (Append OnlyFile)持久化方式。开发团队最终选择了RDB方式。请用200字以内的文字,从磁盘更新频率、数据安全、数据一致性、重启性 能和数据文件大小五个方面比较两种方式,并简要说明开发团队选择RDB的原因。

    【问题3】 (8 分)

           缓存中存储当前的热点数据,Redis为每个KEY值都设置了过期时间,以提高缓存命中率。为了清除非热点数据,Redis 选择“定期删除+惰性删除”策略。如果该策略失效,Redis 内存使用率会越来越高,一般应采用内存淘汰机制来解决。请用100字以内的文字简要描述该策略的失效场景,并给出三种内存淘汰机制。

    【解答】

    【问题1】

    • (1)String
      • (a)实现计数器的增加
    • (2) List
      • (b)每个用户的粉丝列表可以表示为一个列表
      • (g)每个用户的发布/订阅列表可以表示为一个列表
    • (3)Set
      • (c)每个帖子的标签可以表示为一个集合
      • (d)每个用户的好友集合可以表示为一个集合
    • (4)Hash
      • (f)每个用户的信息可以表示为一个哈希
    • (5)ZSet
      • (e)可以将帖子的热度或者用户的活跃度表示为分数

    【问题2】

    • 磁盘更新频率:
      • RDB:可配置,通常是秒级,适合对数据更新要求不是很高的场景;
      • AOF:每条命令后立即,更新频率较高,但数据更实时;
    • 数据安全:
      • RDB:低,由于是周期性快照,一旦发生故障,可通过最近的快照进行数据恢复;
      • AOF:高,即使宕机也能恢复所有数据
    • 数据一致性:
      • RDB:强一致性,保证数据的完整性;
      • AOF:最终一致性;
    • 重启性能:
      • RDB:快,只需加载最近的快照即可;
      • AOF:慢,因为需要重放所有写入操作;
    • 数据文件大小
      • RDB:小,因为只保存了快照,不需要额外的日志文件。
      • AOF:大,因为需要记录所有写入操作历史。
    • 最短时间内通过重启等方式重新建立服务,使用RDB方式更好。

    【问题3】

    • 失效场景:
      • 当redis内存使用超出了配置的最大内存限制,即使用淘汰机制。
    • 三种策略:

      • LRU (Least Recently Used): 淘汰最近最少使用的键,删除使用的时间戳最远的
      • LFU (Least Frequently Used): 淘汰使用频率最低的键,删除计数器最少的
      • FIFO (First In First Out): 淘汰最先进入内存的键,删除创建时间最早的

    2019: 缓存一致性+缓存击穿+布隆过滤器

    阅读以下关于分布式数据库缓存设计的叙述,在答题纸上回答问题1至问题3
            某初创企业的主营业务是为用户提供高度个性化的商品订购业务,其业务系统支持PC端、手机 App 等多种访间方式。系统上线后受到用户普遍欢迎,在线用户数和订单数量迅速增长,原有的关系数据库服务器不能满足高速并发的业务要求。为了减轻数据库服务器的压力,该企业采用了分布式缓存系统,将应用系统经常使用的数据放置在内存,降低对数据库服务器的查询请求,提高了系统性能。在使用缓存系统的过程中,企业碰到了一系列技术问题。

    【问题1】(11 分)

            该系统使用过程中,由于同样的数据分别存在于数据库和缓存系统中,必然会造成数据同步或数据不一致性的问题。该企业团队为解决这个问题,提出了如下解决思路:应用程序读数据时,首先读缓存,当该数据不在缓存时,再读取数据库;应用程序写数据时,先写缓存,成功后再写数据库;或者先写数据库,再写缓存。王工认为该解决思路并未解决数据同步或数据不一致性的问题,请用 100 字以内的文字解释其原因。王工给出了一种可以解决该问题的数据读写步骤如下:
    读数据操作的基本步骤:
    1、根据 key 读缓存;
    2、读取成功则直接返回;
    3、若 key 不在缓存中时,根据 key(a);
    4、读取成功后,(b):
    5、成功返回。
    写数据操作的基本步骤:
    1、根据 key 值写(c);
    2、成功后,(d)
    3、成功返回;
    请填写完善上述步骤中(a)-(d)处的空白内容。

    【问题 2】(8 分)

            缓存系统一般以key/value 形式存储数据,在系统运维中发现,部分针对缓存的查询,未在缓存系统中找到对应的key,从而引发了大量对数据库服务器的查询请求,最严重时甚至导致了数据库服务器的宕机。经过运维人员的深入分析,发现存在两种情况:

    (1)用户请求的key值在系统中不存在时,会查询数据库系统,加大了数据库服务器的压力;
    (2)系统运行期间,发生了黑客攻击,以大量系统不存在的随机 key 发起了查询请求,从而导致了数据库服务器的宕机。

            经过研究,研发团队决定,当在数据库中也未查找到该key 时,在缓存系统中为key 设置空值,防止对数据库服务器发起重复查询。请用 100 字以内文字说明该设置空值方案存在的问题,并给出解决思路。

    【解答】

    【问题1】

    • (a) 从数据库读取数据;
    • (b) 将读取到的数据存入缓存;
    • (c) 更新数据库中的数据;
    • (d) 更新缓存中的数据。

    【问题2】

    • 设置空值可能会导致缓存系统中存储了大量无效的空值数据,占用了宝贵的缓存空间,增加缓存系统的负担。
    • 解决思路采用布隆过滤器对请求进行过滤,将已确定不存在的 key 过滤掉,减少对数据库的查询压力。

    2022:缓存同步分案+缓存分片+

            某大型电商平台建立了一个在线B2B商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率。但是在运营过程中,发现会出现很多跨仓储中心调货从而延误货物运送的情况。为此,该企业计划新建立一个全国仓储货物管理系统,在实现仓储中心常规管理功能之外,通过对在线B2B商店系统中订单信息进行及时的分析和挖掘,并通过大数据分析预测各地仓储中心中各类货物的配置数量,从而提高运送效率,降低成本。
            当用户通过在线B2B商店系统选购货物时,全国仓储货物管理系统会通过该用户所在地址、商品类别以及仓储中心的货物信息和地址,实时为用户订单反馈货物起运地(某仓储中心)并预测送达时间。反馈送达时间的响应时间应小于1秒。
            为满足反馈送达时间功能的性能要求,设计团队建议在全国仓储货物管理系统中采用数据缓存集群的方式,将仓储中心基本信息、商品类别以及库存数量放置在内存的缓存中,而仓储中心的其它商品信息则存储在数据库系统。

    【问题1】(9分)

            设计团队在讨论缓存和数据库的数据一致性问题时,李工建议采取数据实时同步更新方案,而张工则建议采用数据异步准实时更新方案。
            请用200字以内的文字,简要介绍两种方案的基本思路,说明全国仓储货物管理系统应该采用哪种方案,并说明采取该方案的原因。

    【问题2】(9分)

            随着业务的发展,仓储中心以及商品的数量日益增加,需要对集群部署多个缓存节点,提高缓存的处理能力。李工建议采用缓存分片方法,把缓存的数据拆分到多个节点分别存储,减轻单个缓存节点的访问压力,达到分流效果。
            缓存分片方法常用的有哈希算法和一致性哈希算法,李工建议采用一致性哈希算法来进行分片。请用200字以内的文字简要说明两种算法的基本原理,并说明李工采用一致性哈希算法的原因。

    【问题3】(7分)

            全国仓储货物管理系统开发完成,在运营一段时间后,系统维护人员发现大量黑客故意发起非法的商品送达时间查询请求,造成了缓存击穿。张工建议尽快采用布隆过滤器方法解决。请用200字以内的文字解释布隆过滤器的工作原理和优缺点。

    【解答】

    【问题1】

            实时同步更新方案:每次数据发生变化时,立即将这些变化同步到缓存和数据库中。
            异步准实时更新方案:在数据变更后,不是立即进行同步,而是将变更记录在队列中,并在设定的时间间隔或条件下批量处理这些变更。

            全国仓储货物管理系统对实时性要求较高,需要在1秒内反馈送达时间。如果采用数据实时同步更新方案,每次更新数据都需要同步更新缓存和数据库,会增加系统的负载,影响响应时间。因此,应该采用数据异步准实时更新方案。

    【问题2】

            哈希算法是一种将任意长度的输入数据转换为固定长度的输出数据的算法。

            一致性哈希算法是一种改进的哈希算法,它能够在节点增加或删除时尽量减少对缓存数据的迁移。

            随着业务的发展,缓存节点的数量可能会频繁变动,一致性哈希算法具有更高的缓存命中率、更少的数据迁移和更好的扩展性。

    【问题3】

            布隆过滤器工作原理基于多个哈希函数对元素进行处理,将元素映射到位数组中的多个位置,并标记这些位置为1。当查询一个元素时,如果所有对应位置都为1,则认为元素可能存在于集合中;如果任一位置为0,则元素一定不在集合中。

    优点:

    1. 具有很高的空间效率,尤其适合存储大量数据。
    2. 查询操作快速,因为只需检查位数组中的几个位置。
    3. 可以扩展以适应不同的误判率和数据集大小。

    缺点:

    1. 存在一定的误判率:可能会错误地判断某个不存在的元素为存在于集合中。
    2. 不可删除:因为删除会导致其他元素的判断出现问题
  • 相关阅读:
    windows开启远程桌面
    时序分析基础(6)——input delay时序分析
    阿里云Linux系统MySQL8忘记密码修改密码
    Effective Modern C++[实践]->在创建对象时注意区分()和{}
    代码随想录三刷day46
    如何用CSS实现10种现代布局
    BAT大厂的架构大数据你有了解么?解析大数据技术及算法
    C语言描述数据结构 —— 带头双向循环链表
    分布式事务:XA和Seata的XA模式 | 京东物流技术团队
    将CString里的连续字符串压缩为一个
  • 原文地址:https://blog.csdn.net/lizz861109/article/details/127636137