交通运输部回应自动驾驶
本文要介绍的是 2019 年 SOSP 期刊中的论文 —— KVell: the Design and Implementation of a Fast Persistent Key-Value Store[^1],该论文实现的 KVell 是为现代 SSD 开发的键值存储系统,与使用 LSM 树(Log-structured merge-tree)或者 B 树的主流键值存储不同,KVell 为了充分利用新设备的性能并降低 CPU 的开销使用了完全不同的设计。 作为软件工程师,我们直接与硬件打交道的概率其实很少,大多数时间都会通过操作系统以和 POSIX 间接操作不同的硬件。虽然看起来过去 10 年磁盘等存储硬件的演变与更新非常缓慢,但是实际上:
产消息 既然引入了MQ这个组件,必然意味着同时存在消息的生产者和消费者,这也是典型的订阅模式。在消息数据的整个生命周期中,会依次经过生产者=》MQ=》消费者,三个主要部分。在生产者角度,消息的可靠投递是首要的任务,由于网络的不可靠性,所以消息理论上是不可能100%都投递成功的,针对这种情况,一般的解决方案就是消息重传。 当然重传机制并非无限制的重传,可以根据业务制定具体的重传策略,比如:可以设置最大重传次数为10次,而重传的时间间隔依次增加。这种方案虽然简单,但是带来的副作用就是消息重复投递的问题。 为什么需要幂等性消费 幂等是一个数学上的概念理论,它的意思是多次执行同一个操作和执行一次操作,最终得到的结果是相同的。 举一个业务不恰当但是很准确的栗子:你的女朋友出轨一次和出轨多次,对于你来说,结果其实是一样的:你被绿了。所以出轨一次和出轨多次的结果对于你来说是相同的。 对于MQ来说,退一万步讲,就算MQ的消息无重复投递的问题,在消费端的业务中,那些对于消息消费敏感的业务,我们在设计程序架构的时候也要把消息的幂等性消费考虑在其中,比如:用户购买商品赠送红包或者积分的业务场景,这样的场景对于消息的重复消费很敏感,如果程序处理不当,出现重复给用户送红包的情况,估计程序员又要背锅来祭天了。 幂等性其实很好做 任何业务场景接口的幂等性设计,都要找出幂等性产生的数据标识。 MQ消息的重复性问题,从消息的整个流转过程来看,大体上可以在两个方向来解决:
灵魂拷问
随着系统的复杂性不断增加,多数系统都会引入MQ来进行解耦,其实从引入MQ的初衷来说,多数系统是为了解耦多个模块带来的复杂性,而有些“架构师”却说的:为了解决性能问题。。。当然我不排除MQ有流量削峰的作用,我只是说大部分系统引入MQ最初的初衷应该是系统解耦。
当一个大的单体系统逐渐被拆分为多个小系统,也就是所谓的微服务拆分之后,无论是微服务之间的通信,还是分布式事务,几乎都需要MQ的支持,这也充分体现了分布式系统中MQ的重要性。这个时候整个系统间的交互就类似于下图所示 (编辑:淮南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |