【说明】
某企业是为城市高端用户提供高品质蔬菜生鲜服务的初创企业,创业初期为快速开展业务,该企业采用轻量型的开发架构(脚本语言+关系型数据库)研制了一套业务系统。业务开战后收到用户普遍欢迎,用户数和业务数量迅速增长,原有的数据库服务器已不能满足高度并发的业务要求。为此,该企业成立了专门的研究团队来解决该问题。
张工建议重新开发整个系统,采用新的服务器和数据架构,解决当前问题的同时为日后的扩展提供支持。但是,李工认为张工的方案开发周期过长,投入过大,当前应该在改动尽量小的前提下解决该问题。李工认为访问量很大的只是部分数据,建议采用缓存工具 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模式,客户端可采用一致性哈希,服务端提供错误节点的重定向服务。
整理完毕,完结撒花~