消息中间件MQ(一)概念及常识

1.概念和用途:Message Queue顾名思义就是消息队列。打个比方去快餐店点餐,每个人点餐可能只要10s,但如果三个人同时向服务员点餐,服务员就可能会乱了,三个顾客还可能会吵起来,这件事就没法30s内解决,那么很简单,排队点餐就好办了。所以MQ最核心的功能就是削峰蓄洪。其他特征则是围绕这一功能衍生出来的,
(1)比如如何维持排队的人不乱套(持久化和重发和事务支持)
(2)如何容纳更多的人排队(堆积能力)
(3)如果实在接待不了这么多人怎样让后来的人去其他地方安置(限流机制)等等。

2.MetaQ与Kafka的对比。Kafka性能远胜于MetaQ,为什么还要造出个MetaQ呢?因为MetaQ支持tag过滤,在电商系统里tag过滤特性对性能的提升比单机的吞吐量和堆积能力还更重要。

3.MetaQ与ActiveMQ的对比。侧重谈前者,后者遵循AMQP协议。MetaQ串行化写盘快(随机读可以做内存缓存),pull拉式订阅解放了broker的路由压力,逻辑队列只存索引信息非常轻。这里解决的问题,是性能的问题,持久化时如何写得快而准、如何读得快,消息堆积时如何能堆更多,投递时如何又灵活又快又省资源(cpu和带宽)。

4.JMS与AMQP。JMS是java接口规范。AMQP是跨越语言的MQ标准,并规划了路由到投递的分层设计。

5.共性。投递次数的语义完全是共性,基本都是至少投递一次的语义,要支持至多投递一次并不难但是场景很少,要支持准确投递一次很难且代价太大,何不让应用自己去做接口等。事务则是取舍,能支持事务的都会牺牲一些性能,不支持事务的一般都会更轻快。广播等其他特性,要看具体的应用场景。

所以,如何深入学习一套MQ中间件?掌握其持久化的形式(kv或串行写盘等等)、堆积的能力(队列的底层数据结构)、投递方式(push的路由规则或pull的寻址及过滤)、高可用主从模式即可。

参考文献
1.如何深入理解一套MQ消息中间件.https://www.cnblogs.com/syjkfind/p/7979713.html

猜你喜欢

转载自blog.csdn.net/weixin_42480489/article/details/82951828