解决的问题

一项技术的产生必然是为了解决问题而生,了解了一项技术解决的问题,就能够很轻松的理解这项技术的设计根本,从而更好地理解与使用这项技术。



消息中间件和RPC从根本上来说都是为了解决分布式系统的服务间通信问题,我们的服务从最初的单体应用发展到SOA架构到现在的微服务架构,必不可少的就是服务间通信,但从最初的设想,服务间通信仅仅就是一次请求响应调用而已,为什么发展出如此多的消息中间件与RPC技术,我们是否真的需要学习这么多的消息中间件技术?



答案是肯定的,接下来我们将分析我们为什么要了解及使用如此多的服务间通信技术,以及他们究竟都解决了哪些问题,在什么场景下他们是必不可少的。

消息中间件 VS RPC

首先来说一下什么是消息中间件和RPC,简单来说,他们最主要的区别是,完成一次服务间通信需要的组件数量,本篇文章我们先来讨论一下消息中间件的优势与使用场景

RPC

消息中间件





从上面两幅图可以清晰地看出消息中间件比RPC要多了一个组件,那就是消息中间件本身,从而我们也能想到,使用消息中间件通信时,相较于使用RPC通信,会有更多的组件运维成本,也会增加一次通信的通信延迟,那么我们为什么要使用消息中间件?一个很重要的原因就是,他为我们增加了消息堆积能力,而这个能力提供给我们了很重要的流量削峰,高可用以及广播等问题的解决方案。

流量削峰

流量削峰是指在发生突发性流量增长时,并不会让下游服务(接收请求的服务)出现超负荷并发从而导致宕机等风险,MQ(消息队列)的解决方案是将流量暂缓存至自己的Queue中,将稳定的持续的将流量发送给消费者。







(在发生流量突增时,下游服务的实时消息处理量,RPC(上),MQ(下))



上面的图展示的是不同时间段下游服务的请求量曲线,可以看出,通过RPC进行请求的下游服务在短时间内会接收大量超出最高负载的请求,从而可能引发大量的请求超时和CPU 100%导致的服务宕机等情况。而通过MQ进行通信时,若MQ发现接收到的请求超出消费者的最大负载时,则会将请求暂存至消息队列中,并将请求保持在一个持续稳定的量发送给消费者(下游服务),从而保证了系统的稳定。



流量削峰在面对例如秒杀等场景就显得尤为重要,例如淘宝的双十一整点秒杀,12306的整点放票等活动,消息队列均起到的重要作用,我们也就可以很好地理解,为什么12306在推出排队系统后,服务宕机的概率被大大减小了(虽然体验依旧是一团糟...

浅谈服务间通信【MQ在分布式系统中的使用场景】的更多相关文章

  1. 微服务浅谈&服务治理的演变过程

    这两天对互联网的架构演变进行了简单了解,并对微服务的出现很感兴趣,所以对相关知识进行了简单的整理与总结. 本篇文章先简单介绍了互联网架构的演变,进而介绍了服务化,最后介绍了微服务及最新的服务网格(Se ...

  2. 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless

    作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...

  3. 007. 服务间通信 RPC & REST over HTTP(s) & 消息队列

    服务间通信 服务间通信的几种方式: RPC.REST over HTTP(s).消息队列.  https://www.jianshu.com/p/2a01d4383d0b RPC https://bl ...

  4. SpringCloud使用Feign实现服务间通信

    SpringCloud的服务间通信主要有两种办法,一种是使用Spring自带的RestTemplate,另一种是使用Feign,这里主要介绍后者的通信方式. 整个实例一共用到了四个项目,一个Eurek ...

  5. Spring Cloud netflix feign【服务间通信】

    一.简介 1,进程间通讯的本质是交换消息 2,服务间通信的两种方式 (1)RESTFul风格 (2)RPC风格 (3)两种风格的比较 3.基于RESTFul风格服务调用模型 4.基于Spring Cl ...

  6. eShopOnContainers 知多少[11]:服务间通信之gRPC

    引言 最近翻看最新3.0 eShopOncontainers源码,发现其在架构选型中补充了 gRPC 进行服务间通信.那就索性也写一篇,作为系列的补充. gRPC 老规矩,先来理一下gRPC的基本概念 ...

  7. gRPC-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) 场景:A服务主动发起 ...

  8. CAP-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) gRPC-微服务间通 ...

  9. 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作

    目录 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 NLP相关的文本预处理 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 之所以心血来潮想写这篇博客,是因为最近在关注N ...

随机推荐

  1. android 高仿京东

    android 高仿京东源码,两年前的作品,最近发现一些老代码,发布出来给初学者学习,下面附上几张展示的效果,有需要的请到下面地址下载,记得stare哦 https://github.com/xian ...

  2. 菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章

    菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章 cheungmine, 2014-10-26 在上一章中,我们准备好了计算机和软件.本章开始部署hadoop 高可用集群. 2 部署 ...

  3. kettle 的表输出 table output

    kettle的表输出: 双击后,看设置, 1,在connecttion后面,点击new里新建一个.设定各个选项值,如选择mysql类型,则配置hostname,database name,端口, 用户 ...

  4. 安装docker及配置Android开发环境

    安装docker 官方原来的安装docker的脚本https://get.docker.com/已经过时,现在使用的是https://get.docker.com/,命令如下: curl -s htt ...

  5. HBase replication使用

    hbase-0.90.0的一个重要改进是引入了replication机制,使它的数据完整性得到了进一步的保障.虽然这一功能还不太完善,但是今后必然会变得更加重要. hbase的replication机 ...

  6. objective-c中关于类型编码的解释

    在某些情况下,我们需要动态的向一个类插入一个实例方法(也可以是一个类方法):这时我们可以用class_addMethod函数来完成: BOOL class_addMethod ( Class cls, ...

  7. ubuntu 输入用户名密码又回到登陆界面

    问题描述: 输入正确的用户名密码,登陆后又返回登陆界面,重复出现. 问题解决: 环境变量出错,重新配置环境变量. 1.进入命令行模式Ctrl+Alt+F*,然后输入用户名密码: 2.登进去之后,以管理 ...

  8. python select.select模块通信全过程详解

    要理解select.select模块其实主要就是要理解它的参数, 以及其三个返回值.select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,第2个是监控和接 ...

  9. 使用swagger管理接口

    swagger 配置 1.pom 增加jar包依赖 <dependency> <groupId>io.springfox</groupId> <artifac ...

  10. 关于JavaScript的那些话

    1.初学者动手环境----推荐Chrome的控制台(F12调用)2.JS中两个非常重要的数据类型是对象和数组.3.JavaScript 程序是用Unicode字符集编写的.4.JavaScript是区 ...