烟台做网站价格石家庄正定网站建设
news/
2025/9/24 0:34:06/
文章来源:
烟台做网站价格,石家庄正定网站建设,网店推广要多少钱,wordpress加速优化插件1、PTP模型
Point-to-Point#xff0c;点对点通信模型。PTP是基于队列(Queue)的#xff0c;一个队列可以有多个生产者#xff0c;和多个消费者。消息服务器按照收到消息的先后顺序#xff0c;将消息放到队列中。队列中的每一条消息#xff0c;只能由一个消费者进行消费点对点通信模型。PTP是基于队列(Queue)的一个队列可以有多个生产者和多个消费者。消息服务器按照收到消息的先后顺序将消息放到队列中。队列中的每一条消息只能由一个消费者进行消费消费之后就会从队列中移除。 需要注意的是尽管这里使用Queue的概念但并不是先进入队列消息一定会被先消费。在存在多个下游Consumer情况下一些消息中间件例如ActiveMQ为了提升消费能力会将队列中的消息分发到不同Consumer并行进行处理。这意味着消息发送的时候可能是有序的但是在消费的时候就变成无序了。为了保证消费的有序一些MQ提供了**专有消费者”或者排他消费者”**的概念在这种情况下队列中的消息仅允许一个消费者进行消费如果存在多个消费者那么从中选择一个。但是这意味着在消息在处理中没有了并行性。如果消息量很多的情况下将会产生消息积压。为了解决专有消费者”的性能问题一些消息中间件采用分区的概念来解决性能问题我们将在后文进行介绍。
2、Pub/Sub模型
publish-and- subscribe 即发布订阅模型。在Pub/Sub模型中生产者将消息发布到一个主题(Topic)中订阅了该Topic的所有下游消费者都可以接收到这条消息。如下图 通常情况下一个条消息只要被消费一次就行了那么什么情况下需要所有的消费者都对这条消息进行消费呢最典型的情况就是需要在内存中对数据进行缓存并需要实时进行更新。例如笔者做过一个违禁词系统对用户输入的评论内容进行违禁词汇检测。这个违禁词系统部署了在N台服务器上为了提升检测性能每台机器都会将违禁词库全量加载到内存中词库的更新是通过发送MQ消息来完成的。由于采用Pub/Sub模型每台机器的consumer都可以接收到这条消息直接在内存中更新敏感词库即可。
3、Partition模型
为了解决在PTP模型下有序消息需要通过专有消费者”消费带来的性能问题一些消息中间件如rocketmqkafka采用了Partition模型即分区模型如下所示 生产者发送消息到某个Topic中时最终选择其中一个Partition进行发送。你可以将Parition模型中的分区理解为PTP模型的队列不同的是PTP模型中的队列存储的是所有的消息而每个Partition只会存储部分数据。对于消息者此时多了一个消费者组的概念Paritition会在同一个消费者组下的消费者中进行分配每个消费者只消费分配给自己的Paritition。上图演示了不同的消费者可能会分配到不同数量的Paritition。Paritition模式巧妙的将PTP模型和Pub/Sub模型结合在了一起
对于PTP模型
一条消息只会由一个消费者进行消费而Partition模型中每个分区最终也只会有一个消费者进行消费。对于通过专有消费者来保证全局消费有序的场景在Partition模型中只需保证创建的Topic只有一个Partition即可这个Paritition最终也只会分配其中一个消费者。另外在绝大部分场景下我们没有必要保证全局有序例如一个订单产生了3条消息分别是订单创建订单付款订单完成。消费时要按照这个顺序消费才能有意义。但是订单之间是可以并行消费的例如将订单1产生的3条消息发送到Partiton 1将订单2产生的3条消息发送到Partition 2如此便达到了不同订单之间的并行消费。
对于Pub/Sub模型
一条消息所有的下游消费者都可以进行消费。在Paritition模型中只需要为每个消费者设置成不同的消费者组即可。然而过多的消费者组会给消息中间件运维带来麻烦。所以一些消息中间件结合了Partition模型和Pub/Sub模型。例如RocketMQ支持为消费者组设置消费模式如果是集群模式就按照上述描述进行消费如果是广播模式就按照Pub/Sub模型进行消费。当然Partition模型也不全是优点其最大的限制在于Partition数量是固定的(虽然可以调整)且只可以分配给其中一个消费者。当消费者的数量大于Partition数量时这些多出来的消费者将无法消费到消息。一些消息中间件对此进行了优化例如rocketmq支持单个partition的并行消费。即在对单个消费者内同时启动多个线程来消费这个Partition中的数据当然前提是要求消息不是有序的对于有序的消息只能使用一个线程按顺序消费这个Partition中的数据。
4、Transfer模型
Paritition模型中的消费者组概念很有用同一个Topic下的消息可以由多个不同业务方进行消费只要使用不同的消费者组即可不同消费者组消费到的位置单独记录互不影响。 但是Paritition模型还是限制了消费者数量不能多于分区数。因此又有了另外一种消费模型笔者称之为Transfer模型如下图所示 生产者还是将消息发送到Topic中针对一个Topic可以创建多个通道这里称之为channel。与分区不同的是发送到Topic中的每条消息都会转发到每个channel因此每个channel都有这个Topic的全量数据。当然没有必要把真的把消息体完整的拷贝一份到channel中可以只记录一下消息元数据表示有一条放到这个channel中了。消费者在消费消息时必须指定从哪个channel消费。多个消费者消费同一个channel时每条消息只会有一个消费者消费达到这一点与PTP模型类似。事实上我们可以认为消费了同一个channel的消费者就自动组成了一个消费者组。但是与Partition模型不同的是这里没有分区的概念因此消费者的数量可以是任意的。事实上GO语言编写的NSQ消息中间件采用的就是这种模型。当然这种模型与PTP一样也不能保证被消息有序除非通过类似于”专用消费者”的概念。
最后
面试是跳槽涨薪最直接有效的方式马上金九银十来了各位做好面试造飞机工作拧螺丝的准备了吗
掌握了这些知识点面试时在候选人中又可以夺目不少暴击9999点。机会都是留给有准备的人只有充足的准备才可能让自己可以在候选人中脱颖而出。
如果你需要这份完整版的面试笔记只需你多多支持我这篇文章。
——对文章进行点赞评论关注我然后再点击这里免费领取 ava-p7)**
[外链图片转存中…(img-RgGVc8BW-1626176201274)]
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914370.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!