目录
同步调用:
比如这里的支付服务,需要等待订单服务、短信服务...执行完毕才能执行,这样支付整个流程完毕需要500ms
然后如果订单、仓储等其中一个服务挂掉了,那么支付服务请求请求不了,挂掉的服务越来越多,级联失败;——>服务提供者出现问题,那么整个微服务都会出现故障;
资源浪费:消费者需要等待服务提供者响应,不能干其他事情只能干等;
耦合度较高:每次加入新的需求,还需要动原来的代码——>比如:订单加了一个用户积分,那么Feign模块中还要加相关代码,以便订单模块调用,订单模块还需要+调用用户积分的代码:需要改动订单代码;
再来一个场景:比如说,我们要删除某个业务,需要将支付服务中的调用某个业务的相关代码删除;
异步调用
利用了一个Broker进行事件通知
优点:
级联失败问题得到解决:比如订单服务挂了,它并不会影响支付服务,自己重启就行了
耦合度低:因为支付服务不需要调用其他服务了,而是通过发布事件,Broker对其他事务进行通知,你支付服务该干嘛干嘛,发布完消息返回用户支付成功——>支付服务发布支付成功消息给到Broker,然后Broker进行通知——>对其他服务,然后其他服务执行即可;
吞吐量提升:因为不存在服务之间的调用,所以时间较少(发布信息),能发送的数据就能够越多——>牺牲:消息的延迟,从发送到接收
流量削峰:Broker作为缓冲,将并发请求保存起来,然后通过微服务里面的实现的功能,对请求进行放行——>从而达到流量削峰的效果
缺点:
异步调用只是通知你干一件事情,并不知道你干没干完(通过Broker发送请求让你干事情,从而达到解耦的效果)
流量削峰:
Broker作为缓冲区对请求进行缓存;
初识MQ
RabbitMQ:一般用于业务之间的通信,安全稳定。
KafKa:一般用于海量数据处理,单机吞吐量高:每秒钟能发送的数据大小来分析