同步异步通讯和消息队列

什么是同步通讯?

  同步通讯就像打电话,小明和小王正在连线,那么小李打进来肯定是打不通的,需要小明打完电话,小李才能进行连线。

  那么在我们最初写代码时也是这个道理,当我们用户发起一个请求时,请求选择需要的服务,需要的服务再去调其他服务,当所有流程都做完之后返回结果给用户。

同步异步通讯和消息队列_第1张图片

 

 什么是异步通迅?

  相对于同步通讯,异步通讯像是发消息,小王在与小明聊天时也可以接收小李的信息,回完小明的消息就可以回小李的消息。

  在微服务中可以对用户购买商品做一些处理来提高效率,我们可以下完订单就返回购买成功,剩下的事情交给后台来做。

同步异步通讯和消息队列_第2张图片

同步通讯的优缺点

   同步通讯的优点显而易见,时效性好,我们在做一件事之后可以马上得到结果,在代码当中如果出问题了我们也可以去追踪相应的服务解决问题。

  存在的问题:

  1.当我们同时有多个用户下订单怎么办,假如下订单50ms,发货100ms,减少库存100ms,那么一个用户就要等待250ms,后续的用户也要等待

  2.在请求的高峰期会导致服务处理不了那么多请求而出现问题

  3.在执行后续业务时,前面的业务也会占用系统内存等待结果

  4.并且在后续业务如果有一个业务不能执行就会造成下订单也被卡死,造成级联失败

  4.如果在后续开发中需要加入新的业务,比如增加积分,发放优惠券,就要去修改前面的代码,显然这样做代码耦合度很高。

异步通讯优缺点

  相对与同步通讯,异步通讯在处理后续业务时使用了消息队列。

同步异步通讯和消息队列_第3张图片

   1.当有许多用户来下订单时,每一个用户只需要等待50ms来下订单,然后这个订单信息会存储在消息队列当中

  2.后续的业务能处理多少,我就给你多少,完成流量削峰,即使一个时间段有很多请求,压力都由消息队列中间件抗着,后续业务还是按能力执行

  3.在后续业务不能执行时也不会造成下订单出问题,不会出现级联失败问题

  4.如果需要增加新的业务,我们只需要在消息队列里注册就像,你注册了订单过来时就会告诉你完成相关操作,没有注册那么就不通知你,这样在业务的增添与减少过程中也不需要改之前的代码。

  当然,异步通讯也缺点,就是太依赖于消息队列这个中间件,如果消息队列出问题了,整个业务也会出问题,并且在后续业务有问题时,也不好去追踪问题。

同步通讯和异步通讯对比

  同步异步通讯和消息队列_第4张图片

  同步和异步我们择优而用,因为在很多时候,我们没有那么多的高并发。

消息队列

  什么是消息队列?对于刚刚的例子来说,消息队列是一个储存订单信息的东西,当有订单存在时,消息队列就会按照顺序去通知后面在消息队列注册的服务完成后续请求。

  在高并发时,MQ(Message Queue)就尤为重要了,因为整个业务都依赖于消息队列,消息队列的安全性、吞吐量、消息延迟等,常用的消息队列技术有以下几种

同步异步通讯和消息队列_第5张图片

 

你可能感兴趣的:(微服务,微服务,架构,云原生)