问答题
.阅读以下关于分布式数据库缓存设计的叙述,回答问题1~3。
【说明】
某企业是为城市高端用户提供高品质蔬菜生鲜服务的初创企业,创业初期为快速开展业务,该企业采用轻量型的开发架构(脚本语言+关系型数据库)研制了一套业务系统。业务开展后受到用户普遍欢迎,用户数和业务数量迅速增长,原有的数据库服务器已不能满足高度并发的业务要求。为此,该企业成立了专门的研发团队来解决该问题。张工建议重新开发整个系统,采用新的服务器和数据架构,解决当前问题的同时为日后的扩展提供支持。但是李工认为张工的方案开发周期过长,投入过大,当前应该在改动尽量小的前提下解决该问题。李工认为访问量很大的只是部分数据,建议采用缓存工具MemCache来减轻数据库服务器的压力。这样开发量小,开发周期短,比较适合初创公司;同时将来也可以通过集群进行扩展。然而刘工又认为李工的方案中存在数据可靠性和一致性问题,在宕机时容易丢失交易数据,建议采用Redis来解决问题。经过充分讨论,该公司最终决定采用刘工的方案。
问答题
1. [问题1]
在李工和刘工的方案中,均采用分布式数据库缓存技术来解决问题,请说明分布式数据库缓存的基本概念。
表中对MemCache和Redis两种工具的优缺点进行了比较,请补充完善其中的空
1 ~
6 。
| | MemCache | Redis |
| 数据类型 | 简单Key/Value结构 | 1 |
| 持久性 | 2 | 支持 |
| 分布式存储 | 3 | 多种方式,主从、Sentinel、Cluster等 |
| 多线程支持 | 支持 | 4 |
| 内存管理 | 5 | 无 |
| 事务支持 | 6 | 有限支持 |
【正确答案】(1)Redis不仅仅支持简单的K/V类型的数据,同时还提供List、Set、Hash等数据结构的存储。
(2)不支持。
(3)Memcache服务器需要通过hash一致化来支撑主从结构。
(4)Redis把任务封闭在一个线程中,不支持多线程。
(5)按照既定的内存,将内存切割成特定的长度来存储相应的数据。
(6)弱支持,只能保证事务中的每个操作连续执行。
【答案解析】
问答题
2. [问题2]
刘工认为李工的方案存在数据可靠性和一致性的问题,请说明原因。
为避免数据可靠性和一致性的问题,刘工的方案采用Redis作为数据库缓存,请说明基本的Redis与原有关系数据库的数据同步方案。
【正确答案】可靠性方面Memcache不支持数据持久化,断电或重启后数据丢失;一致性方面,Memcache本身不支持分布式,通过使用Hash一致性算法,可以实现分布式存储,但各台Memcache服务器之间互不通信,数据一致性无法保障。
Redis与关系数据库同步方案对于读操作,先读Redis。若没有,则读关系数据库并将值写入Redis;对于写操作,写关系数据库成功后更新Redis中的值。
【答案解析】
问答题
3. [问题3]
请给出Redis分布式存储的两种常见方案和Redis集群切片的几种常见方式。
【正确答案】Redis分布式存储的两种常见方案有主从复制集群和数据分片(Sharding)集群。
Redis集群切片的几种常见方式为客户端分片、Twemproxy、Redis Cluster、Proxy+Redis和Cluster等。
【答案解析】