某企业是为城市高端用户提供高品质蔬菜生鲜服务的初创企业,创业初期为快速开展业务,该企业采用轻量型的开发架构(脚本语言+关系型数据库)研制了一套业务系统。业务开展后受到用户普遍欢迎,用户数和业务数量迅速增长,原有的数据库服务器已不能满足高度并发的业务要求。为此,该企业成立了专门的研发团队来解决该问题。张工建议重新开发整个系统, 采用新的服务器和数据架构,解决当前问题的同时为日后的扩展提供支持。但是,李工认为张工的方案开发周期过长,投入过大,当前应该在改动尽量小的前提下解决该问题。李工认为访问量很大的只是部分数据,建议采用缓存工具 MemCache 来减轻数据库服务器的压力,这样开发量小,开发周期短,比较适合初创公司,同时将来也可以通过集群进行扩展。然而,刘工又认为李工的方案中存在数据可靠性和一致性问题,在宕机时容易丢失交易数据,建议采用 Redis 来解决问题。在经过充分讨论,该公司最终决定采用刘工的方案。
在李工和刘工的方案中,均采用分布式数据库缓存技术来解决问题。请说明分布式数据库缓存的基本概念。下表中对 MemCache 和 Redis 两种工具的优缺点进行了比较,请补充完善表 4-1 中的空(1)~ (6)。
MemCache | Redis | |
数据类型 | 简单kv结构 | (1) |
持久性 | (2) | 支持 |
分布式存储 | (3) | 多种方式 |
多线程支持 | 支持 | (4) |
内存管理 | (5) | 无 |
事物支持 | (6) | 有限 |
刘工认为李工的方案存在数据可靠性和一致性的问题,请说明原因。为避免数据可靠性和一致性的问题,刘工的方案采用 Redis 作为数据库缓存,请说明基本的Redis 与原有关系数据库的数据同步方案。
请给出 Redis 分布式存储的 2 种常见方案和Redis 集群切片的几种常见方式。
阅读以下关于数据库缓存的叙述,在答题纸上回答问题1至问题3。
某互联网文化发展公司因业务发展,需要建立网上社区平台,为用户提供一个对网络文化产品(如互联网小说、电影、漫画等)进行评论、交流的平台。该平台的部分功能如下:
(a)用户帖子的评论计数器;
(b)支持粉丝列表功能;
(c)支持标签管理;
(d)支持共同好友功能等;
(e)提供排名功能,如当天最热前10名帖子排名、热搜榜前5排名等;
(f)用户信息的结构化存储;
(g)提供好友信息的发布/订阅功能。
该系统在性能上需要考虑高性能、高并发,以支持大量用户的同时访问。开发团队经过综合考虑,在数据管理上决定采用Redis+数据库(缓存+数据库)的解决方案。
Redis支持丰富的数据类型,并能够提供--些常见功能需求的解决方案。请选择题干描述的(a)~(g) 功能选项,填入表中(1)~ (5)的空白处。
数据类型 | 存储的值 | 可实现的业务功能 |
---|---|---|
String | 字符串、整数或浮点数 | (1) |
List | 列表 | (2) |
Set | 无序集合 | (3) |
Hash | 包括键值对的无序散列表 | (4) |
ZSet | 有序集合 | (5) |
该网上社区平台需要为用户提供7X24小时的不间断服务。同时在系统出现宕机等故障时,能在最短时间内通过重启等方式重新建立服务。为此,开发团队选择了Redis持久化支持。Redis有两种持久化方式,分别是RDB(Redis DataBase) 持久化方式和AOF (Append OnlyFile)持久化方式。开发团队最终选择了RDB方式。请用200字以内的文字,从磁盘更新频率、数据安全、数据一致性、重启性 能和数据文件大小五个方面比较两种方式,并简要说明开发团队选择RDB的原因。
缓存中存储当前的热点数据,Redis为每个KEY值都设置了过期时间,以提高缓存命中率。为了清除非热点数据,Redis 选择“定期删除+惰性删除”策略。如果该策略失效,Redis 内存使用率会越来越高,一般应采用内存淘汰机制来解决。请用100字以内的文字简要描述该策略的失效场景,并给出三种内存淘汰机制。
三种策略:
阅读以下关于分布式数据库缓存设计的叙述,在答题纸上回答问题1至问题3
某初创企业的主营业务是为用户提供高度个性化的商品订购业务,其业务系统支持PC端、手机 App 等多种访间方式。系统上线后受到用户普遍欢迎,在线用户数和订单数量迅速增长,原有的关系数据库服务器不能满足高速并发的业务要求。为了减轻数据库服务器的压力,该企业采用了分布式缓存系统,将应用系统经常使用的数据放置在内存,降低对数据库服务器的查询请求,提高了系统性能。在使用缓存系统的过程中,企业碰到了一系列技术问题。
该系统使用过程中,由于同样的数据分别存在于数据库和缓存系统中,必然会造成数据同步或数据不一致性的问题。该企业团队为解决这个问题,提出了如下解决思路:应用程序读数据时,首先读缓存,当该数据不在缓存时,再读取数据库;应用程序写数据时,先写缓存,成功后再写数据库;或者先写数据库,再写缓存。王工认为该解决思路并未解决数据同步或数据不一致性的问题,请用 100 字以内的文字解释其原因。王工给出了一种可以解决该问题的数据读写步骤如下:
读数据操作的基本步骤:
1、根据 key 读缓存;
2、读取成功则直接返回;
3、若 key 不在缓存中时,根据 key(a);
4、读取成功后,(b):
5、成功返回。
写数据操作的基本步骤:
1、根据 key 值写(c);
2、成功后,(d)
3、成功返回;
请填写完善上述步骤中(a)-(d)处的空白内容。
缓存系统一般以key/value 形式存储数据,在系统运维中发现,部分针对缓存的查询,未在缓存系统中找到对应的key,从而引发了大量对数据库服务器的查询请求,最严重时甚至导致了数据库服务器的宕机。经过运维人员的深入分析,发现存在两种情况:
(1)用户请求的key值在系统中不存在时,会查询数据库系统,加大了数据库服务器的压力;
(2)系统运行期间,发生了黑客攻击,以大量系统不存在的随机 key 发起了查询请求,从而导致了数据库服务器的宕机。
经过研究,研发团队决定,当在数据库中也未查找到该key 时,在缓存系统中为key 设置空值,防止对数据库服务器发起重复查询。请用 100 字以内文字说明该设置空值方案存在的问题,并给出解决思路。
某大型电商平台建立了一个在线B2B商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率。但是在运营过程中,发现会出现很多跨仓储中心调货从而延误货物运送的情况。为此,该企业计划新建立一个全国仓储货物管理系统,在实现仓储中心常规管理功能之外,通过对在线B2B商店系统中订单信息进行及时的分析和挖掘,并通过大数据分析预测各地仓储中心中各类货物的配置数量,从而提高运送效率,降低成本。
当用户通过在线B2B商店系统选购货物时,全国仓储货物管理系统会通过该用户所在地址、商品类别以及仓储中心的货物信息和地址,实时为用户订单反馈货物起运地(某仓储中心)并预测送达时间。反馈送达时间的响应时间应小于1秒。
为满足反馈送达时间功能的性能要求,设计团队建议在全国仓储货物管理系统中采用数据缓存集群的方式,将仓储中心基本信息、商品类别以及库存数量放置在内存的缓存中,而仓储中心的其它商品信息则存储在数据库系统。
设计团队在讨论缓存和数据库的数据一致性问题时,李工建议采取数据实时同步更新方案,而张工则建议采用数据异步准实时更新方案。
请用200字以内的文字,简要介绍两种方案的基本思路,说明全国仓储货物管理系统应该采用哪种方案,并说明采取该方案的原因。
随着业务的发展,仓储中心以及商品的数量日益增加,需要对集群部署多个缓存节点,提高缓存的处理能力。李工建议采用缓存分片方法,把缓存的数据拆分到多个节点分别存储,减轻单个缓存节点的访问压力,达到分流效果。
缓存分片方法常用的有哈希算法和一致性哈希算法,李工建议采用一致性哈希算法来进行分片。请用200字以内的文字简要说明两种算法的基本原理,并说明李工采用一致性哈希算法的原因。
全国仓储货物管理系统开发完成,在运营一段时间后,系统维护人员发现大量黑客故意发起非法的商品送达时间查询请求,造成了缓存击穿。张工建议尽快采用布隆过滤器方法解决。请用200字以内的文字解释布隆过滤器的工作原理和优缺点。
实时同步更新方案:每次数据发生变化时,立即将这些变化同步到缓存和数据库中。
异步准实时更新方案:在数据变更后,不是立即进行同步,而是将变更记录在队列中,并在设定的时间间隔或条件下批量处理这些变更。
全国仓储货物管理系统对实时性要求较高,需要在1秒内反馈送达时间。如果采用数据实时同步更新方案,每次更新数据都需要同步更新缓存和数据库,会增加系统的负载,影响响应时间。因此,应该采用数据异步准实时更新方案。
哈希算法是一种将任意长度的输入数据转换为固定长度的输出数据的算法。
一致性哈希算法是一种改进的哈希算法,它能够在节点增加或删除时尽量减少对缓存数据的迁移。
随着业务的发展,缓存节点的数量可能会频繁变动,一致性哈希算法具有更高的缓存命中率、更少的数据迁移和更好的扩展性。
布隆过滤器工作原理基于多个哈希函数对元素进行处理,将元素映射到位数组中的多个位置,并标记这些位置为1。当查询一个元素时,如果所有对应位置都为1,则认为元素可能存在于集合中;如果任一位置为0,则元素一定不在集合中。
优点:
缺点: