阅读以下关于数据库缓存的叙述,在答题纸上回答问题1至问题3。
【说明】
某大型电商平台建立了一个在线 B2B 商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率。但是在运营过程中,发现会出现很多跨仓储中心调货从而延误货物运送的情况。为此,该企业计划新建立一个全国仓储货物管理系统,在实现仓储中心常规管理功能之外,通过对在线 B2B 商店系统中订单信息进行及时的分析和挖掘,并通过大数据分析预测各地仓储中心中各类货物的配置数量,从而提高运送效率,降低成本。
当用户通过在线 B2B 商店系统选购货物时,全国仓储货物管理系统会通过该用户所在地址、商品类别以及仓储中心的货物信息和地址,实时为用户订单反馈货物起运地(某仓储中心)并预测送达时间。反馈送达时间的响应时间应小于1秒。
为满足反馈送达时间功能的性能要求,设计团队建议在全国仓储货物管理系统中采用数据缓存集群的方式,将仓储中心基本信息、商品类别以及库存数量放置在内存的缓存中,而仓储中心的其它商品信息则存储在数据库系统。
【问题1】(9分)
设计团队在讨论缓存和数据库的数据一致性问题时,李工建议采取数据实时同步更新方案,而张工则建议采用数据异步准实时更新方案。
请用200字以内的文字,简要介绍两种方案的基本思路,说明全国仓储货物管理系统应该采用哪种方案,并说明采取该方案的原因。
【问题2】(9分)
随着业务的发展,仓储中心以及商品的数量日益增加,需要对集群部署多个缓存节点,提高缓存的处理能力。李工建议采用缓存分片方法,把缓存的数据拆分到多个节点分别存储,减轻单个缓存节点的访问压力,达到分流效果。
缓存分片方法常用的有哈希算法和一致性哈希算法,李工建议采用一致性哈希算法来进行分片。请用200字以内的文字简要说明两种算法的基本原理,并说明李工采用一致性哈希算法的原因。
【问题3】(7分)
全国仓储货物管理系统开发完成,在运营一段时间后,系统维护人员发现大量黑客故意发起非法的商品送达时间查询请求,造成了缓存击穿。张工建议尽快采用布隆过滤器方法解决。请用200字以内的文字解释布隆过滤器的工作原理和优缺点。
【问题1】
实时方案:当数据库数据更新时,同时更新内存的缓存数据。
异步准实时更新方案:当数据库数据更新时,不立即更新缓存数据,而是将需要更新的操作记录成日志,再逐步排队完成更新。
本题中,建议采用准实时方案,理由是:题目中对性能有严格要求,要求1s内完成。实时同步方案最大的问题在于同步并发时的性能不可控。所以准实时方案才能确保该要求能实现。
【问题2】
哈希分片:通过对key进行hash操作,可以把数据分配到不同实例,这类似于取余操作,余数相同的,放在一个实例上。
一致性哈希分片:哈希分片的改进,把存储结点和需要存储的数据都存放在一个hash环上,数据根据hash值在hash环上按正时针方向找到对应的数据存储结点上。
一致性哈希分片的方式在扩充缓存结点时,只需要对少量数据进行存储位置的更新,而哈希分片需要对几乎所有数据进行存储位置更新。
【问题3】
布隆过滤器通过一个很长的二进制向量和一系列随机映射函数来记录与识别某个数据是否在一个集合中。如果数据不在集合中,能被识别出来,不需要到数据库中进行查找,所以能将数据库查询返回值为空的查询过滤掉。
优点:
1、占用内存小
2、查询效率高
3、不需要存储元素本身,在某些对保密要求比较严格的场合有很大优势
缺点:
1、有一定的误判率,即存在假阳性,不能准确判断元素是否在集合中。
2、不能获取元素本身
3、一般情况下不能从布隆过滤器中删除元素
【问题1】实时方案与异步准实时更新方案的区别在于实时方案需要同时更新缓存数据,而异步准实时更新方案则是先生成日志再逐步完成更新,但是实时同步方案最大的问题在于同步并发时的性能不可控。而题目中对性能有严格要求,要求1s内完成。所以应该选择异步准实时更新方案。
【问题2】哈希算法也叫散列算法,简单一句话概括, 就是可以把任意长度的输入信息通过算法变换成固定长度的输出信息, 输出信息也就是哈希值。主要特点:1、不可逆。从哈希值不能推导出原始数据, 所以Hash算法广泛应用在现代密码体系中。2、效率高。在处理比较大的原生值时,也能快速的计算出哈希值。3、无规律。原始输入信息修改一点信息, 得到的哈希值也是大不相同的。一致性哈希算法将整个哈希值组织成为一个抽象圆环,称之为哈希环。哈希函数的输出值一般在0到INT_MAX(通常为1-2^32)之间,这些输出可以均匀地映射到哈希环上。相比普通的哈希分片,一致性哈希在处理分片中添加或删除节点时,可以有效避免大量数据的迁移。
【问题3】布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难,但是没有识别错误的情形。直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。