聊一聊微服务之间的通讯方式
介绍
同步通讯与异步通讯属于微服务调间用的两种方式,其两种方式会应用于不同的场景,使用的合理可以是系统性能翻倍增长。
同步
同步调用是在某个服务调用后,会之间调用其他服务,在此之间会之间等待所以的服务完成调用,这几就是同步调用。
缺点
耦合性
有一个很神奇的生物,叫做产品经理,经常脑洞大开。有时候开发人员觉得,已经开发完了没有问题了,但这个是产品经理总觉缺点什么,加个短信吧。这时,你就得加个发短信的业务,就得在支付服务里改动代码添加,发短信代码。假如说有一天添加了优惠价的功能,支付后是不是的扣除响应的优惠,你以为到这就结束了,加个积分系统,促使他下次还来买。等等这样需求该来该去谁受的了,所以呢这就是耦合性。性能下降
当支付服务耗时 50 ms、订单服务耗时 150ms等,那么支付整个动作耗时就是加起来的总和。当大量的并发进来了,系统抗的住吗,这个就是性能下降吞吐量也下降。资源浪费
当进行支付服务完成后,调用订单服务、仓库服务、休息服务,此事支付服务就在干等着啥也不干,也会一直占用着系统资源。当请求少了还没什么,当请求多了十万、百万等。这就是资源的利用率,资源浪费。
- 级联失败
当用支付同步调用时,如果我们的仓促服务抗不住这么大的并发,就会对后面的请求造成阻塞,一两等多了之后,就会对支付服务造成系统异常,影响正常业务,出现系统bug。这就是级联失败问题。
总结
所以综上所述,虽然同步调用有着很高的时效性,但也会带来各种各样的问题。任何技术都有自己的优点与缺点,在合适的场景下使用,即是最合理的。
异步
上面讲解了同步调用,它存在着众多的不足。可以使用异步调用进行解决,但异步也不是完美的,它也有着对应的缺点。
异步调用的实现方式,最常用的就是事件驱动。
记得上面将的同步调用吧,支付服务调用之后,会调用订单等,支付一直会等待着直到全部服务完成调用。而异步是支付服务支付成功后,发布一个事件,之后立马返回结果给用户。
说到这可能有人会问,那其他服务不调用了吗?不,当然调用,记得支付成功后发布的事件吧
其他的服务会订阅这个事件,从而触发一系列的服务调用。
优点
- 服务解耦
如果有一天产品经理,想添加一个积分功能,之需要添加积分服务模块,订阅事件即可。
如果有一天产品经理觉得短信成本有点高,想去掉,此时将短信服务取消订阅即可。
这两种情况,不像同步时,去更改支付服务里面的代码对吧。这就是服务解耦。
性能提升,吞吐量提高
异步调用时,此时我们的总耗时已经不再是所有的服务总和,而是支付服务+发布事件耗时 60 ms。至于其他服务调用及每个服务抗并发的能力等会根据自身进行消费处理。这样就提升了吞吐量,系统的性能也得到的提升。没有强依赖关系,没有级联问题
异步调用,当仓储服务异常时,只是这一个服务异常,没有影响支付服务。因为支付完成后,发布个事件,没有像同步一样调用仓储服务,会应为仓储服务异常,而导致支付服务失败。流量削峰
当只有一个用户请求时,支付服务、订单服务、仓储服务、短信服务可以进行快速的请求。
突然,有大量用户支付,一下子来个三个甚至更多,如果我们的擦仓储服务处理并发只能处理两个,那么borker就会给他两个,处理完成后会再向,borker进行拿取根据自身的消费能力进行处理。
如果使用同步,三个甚至更多一下子给到仓储服务,此时仓储服务会因为并发而系统异常,从而导致支付服务失败。不能处理后边的并发请求。
异步情况下,borker就像一个大坝一样拦着,起到一个缓冲左右,订单、仓储等根据自身能进行处理。所以这就是流量削峰。比如秒杀系统经常这样使用架构。
缺点
看完了优点,可能有的同学会发现,无论是解耦。流量削峰等都依赖了 borker。
如果说在并发情况下扛不住那么高的并发 borker 挂了,此时系统是不是就瘫痪了,所以们对 borker 有着极高的可用性及并发性的要求。日常使用的有 kafka、rabbitMQ 。
使用场景
如果说在支付完成后,需要使用等待其他服务调用的结果,这必须得用同步,因为异步只是通知去做事件,支付成功后,其他服务接口支付服务不知道不清楚。
如果对之后的结果,我不需要知道而且对并发要求高、吞吐量要求高、还需解除之间的耦合,这样就的使用异步。
聊一聊微服务之间的通讯方式相关推荐
- 微服务之间的调用方式RestTemplate和FeignClient
SpringCloud服务间的调用有两种方式:RestTemplate和FeignClient.不管是什么方式,他都是通过REST接口调用服务的http接口,参数和结果默认都是通过jackson序列化 ...
- 微服务之间的最佳调用方式
上一篇:3600万中国人在抖音"上清华" 0.2T架构师学习资料干货分享 茉莉花,别名:茉莉,拉丁文名:Jasminum sambac (L.) Ait,木犀科.素馨属直立或攀援灌 ...
- 【微服务】服务之间的调用方式
文章目录 常见的远程调用方式有两种 RPC和HTTP对比 RPC有几个特点 HTTP其实就是一种网络传输协议 微服务之间相互调用的三种最常见方式 RestTemplate方式 引入Nacos注册中心 ...
- 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别
内容大纲: 1.介绍Restful.SOAP.RPC.SOA以及微服务 2.重点谈谈SOA与微服务的区别 3.以及为什么要使用微服务架构 什么是Restful Restful是一种架构设计风格,提供了 ...
- Restful、SOAP、RPC、SOA、微服务之间的区别
一.介绍Restful.SOAP.RPC.SOA以及微服务 1.1.什么是Restful? Restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构,而满足这些约束条件和原则的应用程序或 ...
- 通俗地理解面向服务的架构(SOA)以及微服务之间的关系
SOA是一种软件的应用架构方法,它基于面向对象,但又不是面向对象,整体上是面向服务的架构.SOA由精确的服务定义.松散的构件服务组成,以及业务流程调用等多个方面形成的一整套架构方法. 这话是不是听起来 ...
- feign调用多个服务_Spring Cloud多个微服务之间调用代码实例
这篇文章主要介绍了Spring Cloud多个微服务之间调用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 现在又一个学生微服务 user ...
- Spring Cloud【Finchley】实战-03订单微服务与商品微服务之间的调用
文章目录 Spring Cloud[Finchley]专栏 概述 HTTP方式之RestTemplate 方式一 (直接使用restTemplate访问URL,url写死) 方式二 (使用LoadBa ...
- 微服务的正确理解方式
为什么80%的码农都做不了架构师?>>> 概述 微服务是一种架构,其中的大型.复杂的软件应用程序由一个或多个更小的服务组成.每个微服务仅负责完成一项代表一种小业务能力的任务.这 ...
- SOA和微服务之间的区别
近几年,我们有很多文章对SOA和微服务之间的不同点和相似点进行了分析.有些人认为SOA有很多地方是值得微服务学习的,而有些人则认为区别对待微服务和SOA会更好.而Neal Ford认为,将单体迁移到面 ...
最新文章
- 强大的shell常用命令集锦
- linux学习笔记(一):查看系统、硬件信息
- 视觉SLAM学习--简易版(B站网友)
- H.264 中很有用的一些概念
- 加载一张图片到ImageView到底占据多少内存
- 可以用数学来证明的中文
- python列表_Python列表列表的所有组合
- 云南智慧医院一卡通建设解决方案,昆明数字化医疗办公、就诊、用餐、停车一卡通用
- 肌营养不良最新研究进展(2021年)
- 动态规划——最大连续子序列和
- java二维数组货柜,装箱布局三维可视化控件开发sup*/sup
- U盘中毒数据丢失如何快速恢复
- **遇到“Cannot create file “不要慌**
- redis mysql 雪崩_Redis缓存雪崩问题
- DSO(1)——DSO论文详细解读
- 个人的敏感信息需要怎么进行安全保护的一些思考记录
- 计算机控制系统开发,浓密过程计算机控制系统设计与开发
- python自动化(三)web自动化:2.web自动化工具selenium讲解
- 树莓派 Raspberry Pi 4 来了,价格不变,性能倍增
- 淘宝运营 淘宝选关键词的六种方法
热门文章
- Uniapp video标签autoplay不生效问题(进入页面瞬间)
- 001_linux基础命令
- 购车指南首次买车必看系列之(二): 产权篇
- 使用js jquery去搭建完成京东购物车
- ret2shellcode 的泄露puts@got表
- JetBrain Clion下载安装及配置环境
- ubuntu之使用wine微信之无法发送图片
- Django模板渲染错误
- 如何安装torch、Pytorch、torchversion
- 联想z5可以刷鸿蒙系统吗,联想z5引用adb刷Project Treble通刷第三方rom教程(亲测成功)...