关于消息队列一些问题

2021-10-24  本文已影响0人  编程人生

1.集中式和分布式对比

集中式Centralized 就是一个应用的所有功能都集中一套程序中。有一个中心化节点,可能是一台机器或多台机器组成,所有的存储,计算都在主机上完成。

分布式:Distributed  ,分布式由一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点。

集中式特点:

1.架构简单  2.可靠性高  3.强一致性   4.可维护性好

分布式特点:1.解决了性能 可用性 扩展性问题 。2. 架构设计更加复杂  3.运维更加复杂 

2.分布式出发点是什么?

1.高性能 (high performance) 包含三点(1.高吞吐   2.低延迟     3.高并发)

2.高可用  (high available )高成功率(正常服务时间占比:请求成功次数比例)

3.可扩展 (scalability)(可伸缩性)

3.分布式依赖技术?

1.存储 需要解决节点故障:进程cash  断电  磁盘损坏问题。

2.通信 需要解决网络故障  断网  延迟  丢包 乱序 

3.计算  一个业务流程多个 系统执行或者多个任务 ,多个节点执行

4.解决思路

1.分片(partition) 2.冗余 (replication)副本机制

5.副本一致性问题(consistency)

CAP理论  BASE理论   ZAB协议  Paxos 算法  Raft算法  

6.分布式技术

服务协调  zookeeper 

异步消息通信  1.RabbitMQ  2.KafKa  3 .RocketMQ 

NoSQL存储 Redis 

任务调度:Elastic-job     xxl-job

数据存储: Mycat   Shard'ing-JDBC

负载均衡  :Nginx

文件系统:GFS    HDFS

日志:ELK

通信:Netty

RPC:Dubbo

容器:docker  k8s

为什么要用MQ?

异步  解耦  削峰 

AMQP协议

AMQP协议(Advanced Message Queuing Protocol) 高级消息队列协议

AMQP 实现:openAMQ Apache Qpid RedhatEnterprise MRG  AMQPinfrastructure  MQ Zyre

RabbitMQ 消息队列

RabbitMQ 支持 : AMQP  STOMP MQTT HTTP  WebSockets 协议

RabbitMQ  是用 Erlang 语言开发

直连类型 Direct  指定一个路由键 适用一些业务非常明确的场景

主题 Topic  使用支持通配符的绑定键 。适用于根据业务主题过滤消息的场景

* 代表一个代词

junior.# 以junior 开头 点后可以有单词 也可以没有单词

#.netty 以 .netty 结尾

senior.* 以senior开头 后跟.加一个单词

*.jvm  以 .jvm结尾  一个单词开头

广播Fanout  无绑定键, 使用于通用类业务消息

消费端限流  prefetch count 预处理消息数量

上一篇 下一篇

猜你喜欢

热点阅读