消息队列总结

1.为什么要使用消息队列?

1.通过异步处理提高系统性能;削峰、减少响应所需时间

如果不使用消息队列时,用户请求的大量数据直接写入到数据库中,在高并发的情况下,写入能力骤降,响应变慢;使用消息队列后,用户请求后可以立即加入到队列,然后返回给用户,数据库通过消息队列消费消息,因此响应速度能得到大幅改善。

消息队列具有很好的削峰作用的功能——即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。

用户请求数据后,由于异步操作,比如消费消息后与数据库的操作可能出现失败的情况,这种情况我们就不能直接提示用户操作成功,需要通过后置处理来提醒用户成功或失败。

2..降低系统耦合性

模块之间不存在直接调用,可扩展性更好。消费队列是利用发布-订阅模式工作,生产者发布消息,一个或多个消费者消费消息,新增业务只需要订阅消息从而实现网站业务的可扩展性设计。

2.使用消息队列带来的一些问题

系统可用性降低:加入MQ之后,需要考虑消息丢失或者说MQ挂掉等等的情况

系统复杂性提高:需要保证消息不被重复消费,处理消息丢失的情况、保证消息传递的顺序性等等问题

一致性问题:我上面讲了消息队列可以实现异步,消息队列带来的异步确实可以提高系统响应速度。但是,万一消息的真正消费者并没有正确消费消息怎么办?这样就会导致数据不一致的情况了!

3.JMS

JMS(JAVA Message Service,Java消息服务)API是一个消息服务的标准或者说是规范。ActiveMQ 就是基于 JMS 规范实现的。

JMS两种消息模型:1.点对点;2.发布/订阅

JMS 五种不同的消息正文格式:

StreamMessage -- Java原始值的数据流

MapMessage--一套名称-值对

TextMessage--一个字符串对象

ObjectMessage--一个序列化的 Java对象

BytesMessage--一个字节的数据流

3.AMQP

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准 高级消息队列协议(二进制应用层协议),是应用层协议的一个开放标准,为面向消息的中间件设计,兼容 JMS。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品,不同的开发语言等条件的限制。RabbitMQ 就是基于 AMQP 协议实现的。

4.常见的消息队列对比

从五个方面分析:

吞吐量:万级的ActiveMQ和RebbitMQ的吞吐量,要比十万甚至百万级别的RocketMQ 和 Kafka 低一个数量级

可用性:都可以实现高可用,ActiveMQ 和 RabbitMQ 都是基于主从架构实现高可用性。RocketMQ 基于分布式架构。 kafka 也是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用

时效性:RabbitMQ 基于erlang开发,所以并发能力很强,性能极其好,延时很低,达到微秒级。其他三个都是ms 级。

功能支持:Kafka 功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用,其他都较为完善

消息丢失:丢失可能性很低

5.什么是 Dubbo?

Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来说 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

6.什么是 RPC?

RPC是远程过程调用,他是一种通过网络从远程计算机请求服务,而不需要了解网络协议,比如两台计算机,A提供一个服务,B提供一个服务,服务A想要调用B的服务,虽然也可以通过HTTP调用实现,但是HTTP可能会处理比较慢,并且优化不好,用RPC就是为了解决这个问题。

7.RPC原理

1.服务消费方调用本地方式提供的服务

2.client stub接收到调用后将调用信息组装成网络消息的传输体

3.client stub找到服务提供方,将消息发送

4.server stub接收到消息后进行解码

5.server stub根据解码结果调用本地服务

7.将本地调用的结果打包成消息发送回client stub

8.client stub对消息进行解密,发送给服务消费方

9.消费方获得结果

时序图

8.为什么要用 Dubbo?

Dubbo的诞生与SOA分布式架构有着密切的联系,SOA面向服务的架构,将系统拆分为服务层、表现层两个部分,服务层对业务逻辑进行处理,表现层只需要处理与页面的交互,业务逻辑都交给服务层进行处理。SOA的两个特色就是服务提供者和服务消费者

Dubbo有四点特性:

1.负载均衡:可部署多台服务器,系统访问时由dubbo决定具体调用哪一台

2.服务调用链路形成:部署的服务越多,服务启动的依赖关系就会模糊,dubbo可以解决我们服务间是如何调用的问题;

3.服务访问压力以及时长统计、资源调度和治理:提供可视化工具,可以对服务进行治理

4.服务降级:如果一台服务挂掉后,会自动调用其他的服务。

9.什么是分布式?

分布式就是将系统的各个模块通过服务的方式,部署到不同服务器上,用以减轻服务器压力,并且可以提高系统并发量和性能。

10.为什么使用分布式?

1.系统拆分为不同的模块便于开发;

2.系统拆分为不同的模块便于系统的维护,提高系统的性能。

11.Dubbo的图解


dubbo

Provider: 暴露服务的服务提供方

Consumer: 调用远程服务的服务消费方

Registry: 服务注册与发现的注册中心

Monitor: 统计服务的调用次数和调用时间的监控中心Container: 服务运行容器

Container: 服务运行容器

重要知识点总结:

注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小

监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示

注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外

注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者

注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表

注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

服务提供者无状态,任意一台宕掉后,不影响使用

服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

12.Dubbo 提供的负载均衡策略

1.基于权重的随机负载均衡机制;2.基于权重的轮询负载均衡机制;3.最少活跃调用数,最慢的服务活跃数计数差大;4.一致性hash

13.zookeeper宕机与dubbo直连的情况

zookeeper宕掉后,dubbo还能基于缓存在一段时间内提供服务。dubbo的健壮性表现在:

1. 监控中心宕掉不影响使用,只是丢失部分采样数据

2. 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务

3. 注册中心对等集群,任意一台宕掉后,将自动切换到另一台

4. 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯

5. 服务提供者无状态,任意一台宕掉后,不影响使用

6. 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容

  • 一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,...
    Java大生阅读 1,013评论 0 11
  • 前言:关于消息队列应该大家都不陌生,在实际的项目中消息队列也无处不在,今天我和大家分享一下关于消息队列的问题。 1...
    java菜阅读 269评论 0 1
  • ##背景:做部门技术分享时,学习整理了消息队列。 一、应用场景 消息队列中间件是分布式系统中重要的组件。主要解决 ...
    zhbom2阅读 817评论 0 1
  • 前言:关于消息队列应该大家都不陌生,在实际的项目中消息队列也无处不在,今天我和大家分享一下关于消息队列的问题。 ...
    lipei_java阅读 1,515评论 0 1
  • 今天有点丧,因为有一些不愉快的事情。 说真的,我真的好烦一直这样子剖析自己的问题,因为不管剖析了多少遍,我还是死性...
    赵合一22阅读 216评论 0 1