托管服务提供商提供的云计算
分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? Cache Aside Pattern 最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。 更新的时候,先更新数据库,然后再删除缓存。 为什么是删除缓存,而不是更新缓存? 原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。 比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。 另外更新缓存的代价有时候是很高的。是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于比较复杂的缓存数据计算的场景,就不是这样了。如果你频繁修改一个缓存涉及的多个表,缓存也频繁更新。但是问题在于,这个缓存到底会不会被频繁访问到? 举个栗子,一个缓存涉及的表的字段,在 1 分钟内就修改了 20 次,或者是 100 次,那么缓存更新 20 次、100 次;但是这个缓存在 1 分钟内只被读取了 1次,有大量的冷数据。实际上,如果你只是删除缓存的话,那么在 1 分钟内,这个缓存不过就重新计算一次而已,开销大幅度降低,用到缓存才去算缓存。 其实删除缓存,而不是更新缓存,就是一个 lazy 计算的思想,不要每次都重新做复杂的计算,不管它会不会用到,而是让它到需要被使用的时候再重新计算。像 mybatis,hibernate,都有懒加载思想。查询一个部门,部门带了一个员工的 list,没有必要说每次查询部门,都里面的 1000 个员工的数据也同时查出来啊。80% 的情况,查这个部门,就只是要访问这个部门的信息就可以了。先查部门,同时要访问里面的员工,那么这个时候只有在你要访问里面的员工的时候,才会去数据库里面查询 1000 个员工。 最初级的缓存不一致问题及解决方案
问题:先修改数据库,再删除缓存。如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致。 同样的,使用区块链的人们则用行动表达自己对这项技术的信任——即使是纯投机者也是如此。至少他们相信比特币能让自己迅速致富。人们会根据声誉选择钱包与交易所,我们甚至会根据算法的声誉评估并选择信任特定区块链项目。 但笔者个人之所以对这一切抱悲观态度,是因为只要随便看看使用区块链的各类供应链安全系统,就会意识到,区块链并不属于其中的必要功能。这类项目的成功,只是开发出一套每个人都能随时访问的数据输入软件平台。另外,即使是真正实现了全面分布的区块链,人们也有可能选择怀疑。比如有些企业不信任IBM或者马士基,连带也不信任他们的区块链平台。 不合逻辑?可能是吧,但信任就是一种微妙的东西,无法简单通过算法与协议来代替。其中有着更深层次的社交思考。 当然,区块链将以某种方式消除信任需求的观点仍然普遍存在。最近,笔者收到一家公司发来的电子邮件,提到他们使用区块链实现了安全消息传递。“我们使用区块链消除了对信任的需求。”好吧,这说明他们既不了解区块链的功能、也不清楚信任体系的基本结构。 那么,我们需要公链吗?几乎是不怎么需要。区块链无法解决那些大家认为它能够解决的安全问题,而它能解决的安全问题、又不是困扰着大家的实际问题……对区块链过度信任本身,反而有可能构成安全风险。另外,区块链效率低下、难以扩展。笔者研究过许多区块链应用程序,发现它们都可以在不使用区块链的前提下,实现相同的安全性——只是这样一来,就没有宣传噱头了。 老实讲,加密货币也没什么用处。投机者们只是想靠这个快速致富,也有少部分不喜欢使用政府法定货币,其中包括想要在黑市上用加密货币交易违禁品的罪犯。 要回答是否需要区块链这个问题,大家不妨先问问自己:区块链是否以有意义的方式改变了信任体系,抑或只是把信任体系换了层皮?它会加强现有的信任关系,还是试图将其颠覆?如果新系统出现信任滥用,那么引发的后果是比传统系统更轻微、还是更严重?最后,如果压根不使用区块链,你的系统会怎么样?
通过这一系列问题,很多朋友可能会像笔者一样发现公链解决方案背后的谎言。这是件好事,相信我,这是件好事。 (编辑:长春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |