软考2018高级架构师下午案例分析第4题:关于MemCache、Redis数据同步、分布式存储、集群切片

【说明】

​ 某企业是为城市高端用户提供高品质蔬菜生鲜服务的初创企业,创业初期为快速开展业务,该企业采用轻量型的开发架构(脚本语言+关系型数据库)研制了一套业务系统。业务开战后收到用户普遍欢迎,用户数和业务数量迅速增长,原有的数据库服务器已不能满足高度并发的业务要求。为此,该企业成立了专门的研究团队来解决该问题。

​ 张工建议重新开发整个系统,采用新的服务器和数据架构,解决当前问题的同时为日后的扩展提供支持。但是,李工认为张工的方案开发周期过长,投入过大,当前应该在改动尽量小的前提下解决该问题。李工认为访问量很大的只是部分数据,建议采用缓存工具 MemCache ;来减轻数据库服务器的压力,这样开发量小,开发周期短,比较适合初创公司,同时将来也可以通过集群进行扩展。然而,刘工又认为李工的方案中存在数据库可靠性和一致性问题,在宕机时容易丢失交易数据,建议采用 Redis 来解决问题。经过充分讨论,该公司最终决定采用刘工的方案。

【问题1】

​ 在李工和刘工的方案中,均采用分布式数据库缓存技术来解决问题。请用 100 字以内的文字解释说明分布式数据库缓存的基本概念。

​ 表 4-1 中对 MemCache 和 Redis 两种工具的优缺点进行了比较,请补充完善表 4-1 中的空(1)~(6)。

​ 表 4-1 MemCache 与 Redis 能力比较:

MemCache Redis
数据类型 简单 key/value 结构 (1)
持久性 (2) 支持
分布式存储 (3) 多种方式,主从、Sentinel、Cluster 等
多线程支持 支持 (4)
内存管理 (5)
事务支持 (6) 有限支持

答案:

分布式数据库缓存指的是在高并发环境下,为了减轻数据库压力和提高系统响应时间,在数据库系统和应用系统之间增加的独立缓存系统。

(1)丰富/多种数据结构;

(2)不支持;

(3)客户端哈希分片/一致性哈希;

(4)不支持;

(5)私有内存池/内存池;

(6)不支持。

【问题2】

​ 刘工认为李工的方案存在数据可靠性和一致性的问题,请用 100 字以内的文字解释说明。

​ 为避免数据可靠性和一致性的问题,刘工的方案采用 Redis 作为数据库缓存,请用 200 字以内的文字说明基本的 Redis 与原有关系数据库的数据同步方案。

答案:

李工采用的方案中,采用 MemCache 作为缓存系统,但 MemCache 无法进行持久化,数据不能备份,只能用于缓存使用,数据全部存在于内存,一旦重启数据会全部丢失。刘工的方案中,采用 Redis 作为数据库缓存,解决了该问题。

刘工的方案中,保留原有关系数据库,将 Redis 仅作为缓存,即热点数据缓存在 Redis 中,核心业务的结构化数据存储在原有院系数据库中。需要解决热点数据在原关系数据库和 Redis 的数据同步问题,由于 Redis 只作为缓存,因此给出原关系数据库到 Reids 的方案即可。该方案的基本操作如下:

1.读操作。读缓存 Redis,如果数据不存在,从原关系数据库中读数据,并将读取后的数据值写入到 Redis;

2.写操作。写原关系数据库,写成功后,更新或者失效掉缓存 Redis 中的值。

【问题3】

​ 请用 300 字以内的文字,说明 Redis 分布式存储的两种常见方案,并解释说明 Redis 集群切面的几种常见方式。

答案:

Redis 分布式存储的常见方案有:

1.主从(Master/Slave)模式;

2.哨兵(Sentinel)模式;

3.集群(Cluster)模式。

(注意:这块儿不熟悉的一定要去看!)

Redis 集群切面的常见方式有:

1.客户端实现分片。分区逻辑在客户端实现,采用一致性哈希来决定 Redis 节点。

2.中间件实现分片。在应用软件和 Redis 中间,例如 Twemproxy、Codis 等,由中间件实现服务到后台 Redis 节点的路由分派。

3.客户端服务端协作分片。Redis Cluster模式,客户端可采用一致性哈希,服务端提供错误节点的重定向服务。

整理完毕,完结撒花~

猜你喜欢

转载自blog.csdn.net/qq_33204709/article/details/127840060