算法与数据结构体系课Liuyubobobo

#1

download:算法与数据结构体系课Liuyubobobo

消息队列概述
消息队列是在消息传输期间保存消息的容器。它用于接收消息并将它们存储为文件。消息队列作为高并发系统的核心组件之一,可以帮助业务系统解构,提高开发效率和系统稳定性。
一个消息队列可以由一个或多个使用者使用,它包含以下3个元素:

生产者:消息生产者,负责生成消息并将其发送给代理。
Broker:消息处理中心,负责消息的存储、确认、重试等。通常,它包含多个队列。
消费者:消息消费者,负责从代理获取消息并相应地处理它们。

主要有以下优点:

移峰填谷:主要解决瞬时写压力大于应用服务能力导致的消息丢失、系统崩溃等问题;
系统解耦:解决重要性和能力水平不同的系统之间的依赖所导致的全局处理阻塞;
提高性能:当有一对多调用时,可以向消息系统发送消息,让消息系统通知相关系统;
累计电压测量:线路上有些环节不好测量,可以通过累计一定量的消息,释放出来进行测量。

用我自己的话来说,一个简短的总结就是:

提高性能的异步处理
更好的可扩展性
削峰填谷
隔离和自愈
系统解耦

消息队列应用程序场景

应用场景抽象

异步通信:一些业务不希望或不需要立即处理消息。消息队列提供了一种异步处理机制,允许用户将消息放入队列中,但不立即进行处理。将尽可能多的消息放入队列,然后在需要时处理它们。
解耦:降低项目间的强依赖性,适应异构系统。在项目开始阶段,预测项目未来会满足什么需求是极其困难的。通过消息系统,在处理流程中间插入一个隐式的基于数据的接口层,两边的处理流程都必须实现这个接口。当应用程序发生变化时,两端的处理过程可以独立扩展或修改,只要保证它们遵守相同的接口约束。
冗余:在某些情况下,处理数据的过程会失败。除非数据被持久化,否则将会丢失。消息队列保存数据,直到数据被完全处理,从而避免了数据丢失的风险。在许多消息队列所采用的“插入-获取-删除”范例中,在从队列中删除消息之前,您的处理系统需要清楚地表明该消息已经被处理,以确保您的数据被安全地存储,直到您使用它。
可扩展性:因为消息队列将您的处理解耦,所以只要添加额外的处理,就很容易增加消息队列和处理的频率。不需要修改代码和调整参数。便于分布式扩容。
过载保护:应用在流量剧增的情况下仍需继续发挥作用,但这种突发流量无法提取和预测;为了处理这样的瞬间峰值访问量而投入资源待命,无疑是巨大的浪费。消息队列的使用可以使关键组件承受突发的访问压力,而不是因为突发的过载请求而完全崩溃。
可恢复性:当系统的某些组件出现故障时,不会影响整个系统。消息队列减少了进程之间的耦合,因此即使处理消息的进程挂起,加入队列的消息仍然可以在系统恢复后得到处理。
顺序保证:在大多数使用场景中,数据处理的顺序非常重要。大多数消息队列本质上是有序的,可以保证数据按特定的顺序处理。
缓冲区:在任何重要的系统中,都会有需要不同处理时间的元素。消息队列通过缓冲层帮助最有效地执行任务,缓冲层有助于控制和优化系统中数据流的速度。以调整系统的响应时间。
数据流处理:分布式系统产生的海量数据流,如业务日志、监控数据、用户行为等。实时或者批量的收集汇总这些数据流,然后进行大数据分析,是互联网的一项必备技术。通过消息队列来完成这样的数据采集是最好的选择。

常见应用场景

以上主要介绍了消息队列的四大优势,下面描述消息队列的实际应用场景:

峰值负载均衡:当上下游系统的处理能力有差距时,将消息队列作为通用的“载体”,在下游系统有能力处理时再进行分发处理。大型活动,如秒杀、抢红包、企业开门等,都会带来高流量脉冲,很可能由于没有做出相应的防护,导致系统过载甚至崩溃;或者由于太多限制导致太多请求失败,影响用户体验。RocketMQ可以提供调峰填谷服务来解决这些问题。
异步解耦:消息队列降低了服务之间的耦合性,不同的服务可以通过消息队列进行通信,而不用担心彼此的实现细节。交易系统作为淘宝/天猫的核心系统,会吸引下游数百个业务系统的关注。包括物流、购物车、积分、流量计算分析等。,整体业务系统庞大复杂;RocketMQ可以实现异步通信和应用解耦,保证主站服务的连续性。
订单:证券交易过程中的时间优先原则,交易系统中订单创建、支付和退款的过程,航班中旅客登机报文的处理,类似于先进先出(FIFO)原则。RocketMQ提供的订单消息是保证消息的FIFO。
日志处理:日志处理是指在日志处理中使用消息队列,比如Kafka应用,解决大量日志传输的问题。
通信:消息队列一般都内置了高效的通信机制,所以也可以用于纯消息通信,比如点对点的消息队列或者聊天室。
广播:如果没有消息队列,每有一个新的业务方接入,我们就要接入一个新的接口。有了消息队列,我们只需要关心消息是否被传递到队列中。至于谁想订阅,那是下游的事情,无疑大大减少了开发和联调的工作量。
分布式缓存同步:对于数据库和缓存数据之间的超时没有很好的控制,可以通过消息队列异步通知缓存数据的变化。双11的大促产品需要实时感知价格变化,大量并发访问会导致会场页面响应时间较长;由于带宽瓶颈,集中式缓存限制了商品变化的访问流量。通过RocketMQ构建分布式缓存,可以实时通知商品数据的变化。
分布式交易一致性:交易系统、红包等场景需要保证数据的最终一致性。RocketMQ引入的大量分布式事务,既能实现系统间的解耦,又能保证最终的数据一致性。
大数据分析:数据在“流”中产生价值。传统的数据分析大多基于批量计算模型,无法做到实时的数据分析。将RocketMQ与流计算引擎相结合,可以方便地实现业务数据的实时分析。