【扫盲】消息队列

# 什么是消息队列

消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,只不过队列中存放的内容是message而已。

“消息”是在两个独立个体间传送的数据单位。这两个个体可以是两台计算机,也可以是两个进程,也可以是一个进程的两个线程。

“消息”可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。

队列”是在消息的传输过程中的通道,是保存消息的容器,根据不同的情形,可以有先进先出,优先级队列等区别 。


# 为什么需要消息队列

两个原因,异步处理和解耦。

在数据高并发环境下,来不及同步处理,请求往往会发生堵塞现象,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会越积越多,从而触发too many connections错误。

通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

另外,非基于消息队列的系统,其运行速度取决于系统中最慢的组件的速度(注:短板效应)。

而基于消息队列可以将系统中各组件解除耦合,这样系统就不再受最慢组件的束缚,各组件可以异步运行从而得以更快的速度完成各自的工作。

除此之外消息队列也可以抑制性能波峰的产生,在瞬时业务增长产生时保持性能曲线的平滑。


# 栈和队列

概念很简单,栈 (Stack)是一种后进先出(last in first off,LIFO)的数据结构,而队列(Queue)则是一种先进先出 (fisrt in first out,FIFO)的结构,如下图:


What is Stack and Queue

关于站长

Cion

95后北漂程序员,产品,摄影,写作,思考。

能干的人解决问题,智慧的人绕过问题。
茫茫网海,感谢与你相遇!
交换友链 和我做邻居吧!

相关文章

赞助商

x

推荐文章