=Start=
缘由:
了解一下现在常用的消息队列中间件的原理、特点,然后选出适用的消息队列中间件。
正文:
参考解答:
- ZeroMQ
适用场景:待添加 - RabbitMQ
适用场景:待添加 - ActiveMQ/Apollo
适用场景:待添加 - Kafka
适用场景:待添加 - RocketMQ
适用场景:待添加
参考链接:
- 消息队列中间件学习笔记 #全面给力
http://blog.just4fun.site/mq-note.html - 常用消息队列对比 #全面
http://www.howardliu.cn/middleware/the-different-between-some-distributed-message-queue/ - 消息中间件及WebSphere MQ入门
https://www.ibm.com/developerworks/cn/websphere/library/techarticles/loulijun/MQnewer/MQnewer.html - 消息队列MQ – Apache ActiveMQ
http://www.blogs8.cn/posts/A1O4ce1 - 消息队列中的消息是并行执行的,那如果消息之间有顺序依赖怎么办呢?
https://www.zhihu.com/question/27707687
https://www.zhihu.com/topic/19708788/top-answers - 消息队列的使用场景是怎样的?
https://www.zhihu.com/question/34243607
RabbitMQ, ZeroMQ, Kafka 是一个层级的东西吗, 相互之间有哪些优缺点?
https://www.zhihu.com/question/22480085
Kafka,Mq,Redis作为消息队列使用时的差异?
https://www.zhihu.com/question/43557507
=END=
《 “常用消息队列中间件” 》 有 18 条评论
干货:这也许是最全面透彻的一篇RabbitMQ指南!
https://mp.weixin.qq.com/s/OABseRR0BnbK9svIPyLKXw
`
1、RabbitMQ 历史
2、RabbitMQ 应用场景
3、RabbitMQ 系统架构
4、RabbitMQ 基本概念
5、RabbitMQ 细节阐明
`
http://www.jianshu.com/u/2766e4cfc391
Tair和Redis的对比
https://mp.weixin.qq.com/s?__biz=MzAwNTQ4MTQ4NQ==&mid=2453559411&idx=1&sn=109ea0c90fd556eaddc76b0d492b9b43
消息队列技术点梳理(思维导图版)
http://neoremind.com/2018/03/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%E6%8A%80%E6%9C%AF%E7%82%B9%E6%A2%B3%E7%90%86/
`
1. 整体架构
2. RPC通信
3. 高性能保证
4. 高可用保证
5. 扩展性保证
6. 协议
7. 消费关系
8. 消息堆积能力
9. 可靠投递
10. 可靠消费
11. 消息类型
12. 消息查询
13. 生态融合
14. 管理工具
`
同为分布式缓存,为何Redis更胜一筹?
https://mp.weixin.qq.com/s/vJ5KKhns3eBTsrXCttvZow
`
1.数据类型
2.线程模型
3.持久机制
4.客户端
5.高可用
6.对队列的支持
7.事务
8.数据淘汰策略
9.内存分配
`
消息中间件选型分析
https://mp.weixin.qq.com/s/ad7jibTb5nTzh3nDQYKFeg
如何看待消息中间件的选型
https://mp.weixin.qq.com/s/0l_dm3owIKkc-n-FNyEmwA
MQ,互联网架构解耦神器
https://mp.weixin.qq.com/s/2PFd4xQ9F9S_9g23WtyFGw
`
当调用方需要关心执行结果,通常使用RPC调用。
但如果调用方不关心执行结果,却仍然使用RPC调用,会引发上下游极大的耦合与瓶颈。
关注下游执行执行结果,用RPC;
不关注下游执行结果,用MQ,不用RPC。
`
创业公司CTO谈创业公司技术选型
https://mp.weixin.qq.com/s/gz3UWwNmMjoJf2TQVR_0Dw
`
技术选型的通用原则
原则1:能否简化开发任务?
原则2:是否符合组织内的主流技术路线?
原则3:是否普及程度高或者学习曲线平缓?
原则4:能否得到有效地支持?
原则5:是否有助于规范开发流程?
总结:
技术选型是技术领导日常工作的一部分,但就不同阶段的公司而言,技术选型的标准并非一成不变的。针对公司不同阶段的关注的重点,本文简单谈及了相应的标准和原则,同时结合自身给出了相应的实例。
说到底,技术要为业务服务,技术选型不能是技术人的自嗨,更不能是“面向简历”的决策结果。只有把握了这个最终原则,我们才能真正客观的看待当前的技术问题,相对客观的履行作为公司技术带头大哥的职责。
最后,虽然全文以“公司”为名,但其实只要将公司两字换成其他,比如“业务线”,其实也未尝不可。比如,成熟公司内部的创新,其整个过程与创业公司的发展其实非常类似,这种情况下,只要大领导支持,当然也可以采用相对激进的做法进行小范围内的“不符合公司当前主流技术路线”的技术选型。
`
互联网公司和团队的技术选型
https://blog.devopszen.com/tech-selection
`
互联网技术爆炸的时代
效率:开发效率优先还是运行效率优先
成熟和常见技术优先
小众技术不等于新技术
成熟的小众技术
适度尝试新技术
避免重造轮子
团队大小对技术选型的影响
团队成员经验对技术选型的影响
技术帮派之正视技术的优点和缺点
没有银弹
`
Java消息队列总结只需一篇解决ActiveMQ、RabbitMQ、ZeroMQ、Kafka
http://blog.51cto.com/13941961/2177281
消息中间件kafka与activemq、rabbitmq、zeromq、rocketmq的比较
https://zyl.me/blog/2078
消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
http://blog.didispace.com/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%E9%80%89%E5%9E%8B%E5%88%86%E6%9E%90/
在中间件技术选型前,我们该思考些什么?
https://mp.weixin.qq.com/s/1r2aHtkx9VTpTWcOcnyYCw
`
导致选型失败的原因有哪些?
1、| 缺乏估算
简单来说就是对技术模型维度的分析,考虑某个组件是否有可能达到我们想要的目的,确认它是否真的做到了。
2、| 实验不够
既然是估算,那就有可能存在偏差。比如一个语言虽说具有自动管理内存的功能,但并不代表它在所有场景下都会起作用,因此需要实际场景实验,毕竟用实际数据说话是最靠谱的。
3、| 轻视经验
在技术选型上,我一向忌讳 “在百度搜一下,觉得差不多了就照抄” 的方式,尤其对于中间件这类基础服务来说,忽视经验的举动都是危险行为,在还没弄清楚原理与本质之前,如何才能确定这项技术是否经得起产线的考验?
中间件技术选型前的三项思考
思考一:标准功能
思考二:非功能特性
思考三:技术标准
`
腾讯组织架构整改引思考:中小团队要怎样搭建架构?(内容其实就是技术选型,而且主要是基于Windows系统)
https://mp.weixin.qq.com/s/7yqx3czCAas-Z0WofQaRgA
https://github.com/das2017?tab=repositories
关于技术选型方法论的探索
https://mp.weixin.qq.com/s/Z7jK8XnKnoY-FiP4inGjsA
`
影响技术选型的因素主要有四个,分别是项目因素、团队因素、版权因素和技术因素。
技术因素是选型中最重要的因素,技术因素又分为标准功能、非功能性特征、技术标准、技术支持四个方面。
1.可量化因素及其所占权重
2.大范围的搜寻候选技术
3.利用必要因素筛选
4.可量化因素打分评定
`
数据库中间件详解
https://mp.weixin.qq.com/s?__biz=MzA5MDA5Njk0NQ==&mid=2456618601&idx=1&sn=c10839f1797e7be1ea41f005b57432df
`
1 数据库拆分过程及挑战
互联网当下的数据库拆分过程基本遵循的顺序是:垂直拆分、读写分离、分库分表(水平拆分)。每个拆分过程都能解决业务上的一些问题,但同时也面临了一些挑战。
1.1 垂直拆分
1.2 读写分离
1.2.1 读写分离的优点
通过配置多个slave节点,可以有效的避免过大的访问量对单个库造成的压力。
1.2.2 读写分离的挑战
1、对于DBA而言,多了很多集群运维工作
2、对于开发人员而言
1.3 分库分表
1.3.1 分库分表的好处
1、存储能力的水平扩展
2、写能力的水平扩展
1.3.2 分库分表的挑战
挑战1:基本的数据库增删改功能
挑战2:分布式id
挑战3:分布式事务
挑战4:动态扩容
1.4 小结
在上面我们已经看到了,读写分离和分库分表带来的好处,但是也面临了极大的挑战。如果由业务开发人员来完成这些工作,难度比较大。因此就有一些公司专门来做一些数据库中间件,对业务开发人员屏蔽底层的繁琐细节,开发人员使用了这些中间件后,不论是读写分离还是分库分表,都可以像操作单库单表那样去操作。
2 主流数据库中间件设计方案
2.1 设计方案
典型的数据库中间件设计方案有2种:proxy、smart-client。
2.1.1 proxy模式
2.1.2 smart-client模式
2.2 业界产品
proxy实现——目前的已有的实现方案有:
阿里巴巴开源的cobar
阿里云上的drds
mycat团队在cobar基础上开发的mycat
mysql官方提供的mysql-proxy
奇虎360在mysql-proxy基础开发的atlas(只支持分表,不支持分库)
当当网开源的sharing-sphere
目前除了mycat、sharing-sphere,其他几个开源项目基本已经没有维护,sharing-sphere前一段时间已经进去了Apache 软件基金会孵化器。
smart-client实现——目前的实现方案有:
阿里巴巴开源的tddl,已很久没维护
大众点评开源的zebra,大众点评的zebra开源版本代码已经很久没有更新,不过最近美团上市,重新开源大量内部新的功能特性,并计划长期维持。
当当网开源的sharding-jdbc,目前算是做的比较好的,文档资料比较全。和sharding-sphere一起进入了Apache孵化器。
蚂蚁金服的zal
等等
`
万亿级消息背后: 小米消息队列的实践
https://mp.weixin.qq.com/s/uHDa5e3HUEwyMFcsbbwKWQ
`
今天的主题主要包括以下几个方面的内容:
业务背景:消息队列在小米落地的业务背景
架构与关键问题:小米自研分布式消息队列 Talos 的架构和关键问题
性能与资源优化:业务爆发式增长,Talos 在性能和资源方面的挑战与实践经验
平台化效率:举例 Talos 在平台化过程中提升效率的一些实践
未来规划:小米消息中间件的规划和愿景
`
究竟什么时候该使用MQ?
https://mp.weixin.qq.com/s/_kXoRBAotb4GXoDTqTObYQ
`
任何脱离业务的组件引入都是耍流氓。引入一个组件,最先该解答的问题是,此组件解决什么问题。
# 什么时候不使用MQ?
当调用方需要关心消息执行结果时,通常不使用MQ,而使用RPC调用。
# 究竟什么时候使用MQ呢?
典型场景一:数据驱动的任务依赖
典型场景二:上游不关心执行结果
典型场景三:上游关注执行结果,但执行时间很长
`
分布式ID生成方案
https://colobu.com/2020/02/21/ID-generator/
`
1、UUID/GUID
2、递增的整数
3、随机数
4、随机字符串
5、Twitter的snowflake算法
6、MongoDB ObjectID
以上各方法的优缺点及其说明。
`
RocketMQ Dashboard使用文档
https://github.com/apache/rocketmq-dashboard/blob/master/docs/1_0_0/UserGuide_CN.md
`
Apache RoccketMQ 最先进的仪表板提供了出色的监控能力。用户可以清楚地看到客户端和应用程序的事件、性能和系统信息的各种图表和统计数据。
可以通过不断请求这个Web系统的特定页面批量获取指定topic的数据,间接实现一个rocketmq消费客户端的功能。
`
RocketMQ Dashboard 后台里有根据topic查询/消费日志的接口,需要从Nginx层面进行关注和监控
rocketmq-dashboard ConsumerController.java
https://github.com/apache/rocketmq-dashboard/blob/master/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java
https://github.com/apache/rocketmq-dashboard/blob/master/src/main/java/org/apache/rocketmq/dashboard/controller/MessageController.java
`
@RequestMapping(value
/queryMessagePageByTopic.query
/queryMessageByTopic.query
/queryMessageByTopicAndKey.query
`
RocketMQ Dashboard
https://rocketmq.apache.org/docs/deploymentOperations/04Dashboard/
`
http_host 中包含 rocketmq 的关键字;
uri 以 .query 字符串结尾:
`