前言
昨天发了一篇文章是对于
machinery
的入门教程,有一位读者在留言中问我 这个和 kafka 有什么区别?一时我也有点懵,这两个的概念很近,到底有什么不同呢?依据我本人的了解,简略剖析了一下,有不足之处欢送指出。
音讯队列
音讯队列这个概念其实在我之前的文章:手把手教姐姐写音讯队列,本人入手用 go 写一个简易版的音讯队列,有趣味的小伙伴们能够看一下这篇文章。回归正题,咱们再来介绍一下什么是音讯队列。
音讯队列,个别咱们会简称它为 MQ(Message Queue)。他是由两个单词组成,咱们应该对队列 (Queue) 很相熟吧。队列是一种先进先出的数据结构。再配合上音讯,音讯队列能够简略了解为:把要传输的数据放在队列中。应用较多的音讯队列有 ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。这里咱们就不具体解说音讯队列实现细节,这不是本文的主题,只晓得概念就能够了。理解了什么是音讯队列,咱们一起来看看他在什么场景应用。
场景
音讯队列中间件是分布式系统中重要的组件,次要解决利用耦合,异步音讯,流量削锋等问题。这里举一个音讯队列的应用场景:日志解决。
日志解决是指将音讯队列用在日志解决中,比方 Kafka 的利用,解决大量日志传输的问题。架构简化如下:
- 日志采集客户端,负责日志数据采集,定时写入
Kfaka
队列。 Kfaka
音讯队列,负责日志数据的接管,存储和转发。- 日志解决利用,订阅并生产 kafka 队列中日志数据。
工作队列
既然音讯队列称为 MQ,那么工作队列咱们就能够叫其 TQ(Task Message)。工作队列能够简略了解为:把要执行的工作放在队列中。应用较多的工作队列有 machiney
、Celery
、goWorker
、YTask
。每一个工作队列都有本人的特点,这里就不细讲了。我写了一篇machinery
入门教程,并且翻译了一篇 machinery
中文文档,有须要的公众号自取。具体任务队列的细节就不讲了。这不是本文的主题,上面咱们看一看工作队列的应用场景。
场景
工作队列是用来执行一个耗时工作。大家可能都应用过马爸爸的花呗,每当咱们还款时,就会减少本人的芝麻信用分。这就能够用到工作队列来计算用户的积分和等级了。架构简化如下:
- 用户还款,当用户还款胜利时,发送一个计算用户积分计算的工作到工作队列。
- 工作队列,能够是
mq
,也可是redis
,用来存储工作。 - 工作执行者,工作的执行者,监听工作队列,当工作队列中有工作时,便会执行。
区别
音讯队列和工作队列,我感觉最大的不同就是理念的不同:工作队列传递的是 ” 工作 ”,音讯队列传递的是 ” 音讯 ”。工作队列能够说是音讯队列的二次开发。
通过下面两个场景例子,咱们能够总结一下两者区别:
- 音讯队列更侧重于音讯的吞吐、解决,具备有解决海量信息的能力。另外利用音讯队列的生产者和消费者的概念,也能够实现工作队列的性能,然而还须要进行额定的开发解决。
- 工作队列则提供了执行工作所需的性能,比方工作的重试,后果的返回,工作状态记录等。尽管也有并发的解决能力,但个别不适用于高吞吐量疾速生产的场景。其实工作队列和近程函数调用很像,不过和 rpc 调用不同,他的调用不是网络申请的形式,而是通过利用音讯队列传递工作信息。
综上所述,集体认为工作队列就是音讯队列在异步场景下的深度二次开发,依据理论我的项目开发依据理论场景做相应抉择即可。
后言
以上全是集体了解,有什么不对的,欢送指出。
好啦,这一篇文章到这就完结了,咱们下期见~~。心愿对你们有用。可增加我的 golang 交换群,咱们一起学习交换。
结尾给大家发一个小福利吧,最近我在看 [微服务架构设计模式] 这一本书,讲的很好,本人也收集了一本 PDF,有须要的小伙能够到自行下载。获取形式:关注公众号:[Golang 梦工厂],后盾回复:[微服务],即可获取。
我翻译了一份 GIN 中文文档,会定期进行保护,有须要的小伙伴后盾回复 [gin] 即可下载。
本人翻译了一份 machinery
官网中文文档,会定期维护,有须要的小伙伴后盾回复 [machinery] 即可下载。
我是 asong,一名普普通通的程序猿,让 gi 我一起缓缓变强吧。我本人建了一个 golang
交换群,有须要的小伙伴加我vx
, 我拉你入群。欢送各位的关注,咱们下期见~~~
举荐往期文章:
- machinery 入门看这一篇(异步工作队列)
- 这个缓存更新的套路你都晓得吗?
- 手把手教姐姐写音讯队列
- 常见面试题之缓存雪崩、缓存穿透、缓存击穿
- 详解 Context 包,看这一篇就够了!!!
- go-ElasticSearch 入门看这一篇就够了(一)
- 面试官:go 中 for-range 应用过吗?这几个问题你能解释一下起因吗
- 学会 wire 依赖注入、cron 定时工作其实就这么简略!
- 据说你还不会 jwt 和 swagger- 饭我都不吃了带着实际我的项目我就来了