昨天的文章里提到了微服务间通信的方式,今天会进一步讨论一下,在分布式架构中,我们如何选择异步和同步来进行服务间的调用。

总结下来,异步的使用场景可以总结如下:

1、不影响主线程逻辑,不涉及共享资源,或对共享资源只读,即非互斥操作

关于这一条,继续用订单服务与供应链服务的例子,订单下单成功后,主流程直接返回成功,将该订单的详情通过MQ,异步推送给供应链系统,供应链系统后续执行的结果并不影响订单的生成流程。

如果服务A同步调用服务B,那么A和B就是紧密耦合的,而紧耦合的系统其可伸缩性特征是各服务必须要保持一个节奏,要伸缩服务A必须同时伸缩服务B,同步调用的服务在可用性方面也面临着同样的问题。反过来说,如果服务A和B的通信是异步的,不管是通过MQ或者批处理还是其他什么手段,可以各自根据系统的情况,执行必要的伸缩操作。而且,此时服务A和B的是相互独立的,即使服务B不能正常使用,服务A仍然能够继续工作。

2、服务间交互的数据,在时序上的没有严格关系

订单服务传送给供应链服务的订单数据,比如说订单A和订单B,他们传给供应链系统的时序,并不影响供应链服务处理流程,对最终的业务结果没有任何影响。再举一个例子,就是我们的站内推送和各种消息,所有这些消息发放给客户端,并不在乎消息发送给某个客户的先后顺序,只要保证消息最终能顺利发送完毕即可,所以推送给消息服务会采用异步的形式。

【醒目】反过来说,如果需要结果的处理始终和前文保持在一个上下文内,必须要使用同步。

3、IO操作或者需要大量计算等耗时操作

这个情况主要用于前端AJAX的情况,先将成功状态返回,几秒后,将详情返回,局部刷新页面。对于网站或者交易系统,消耗数据或执行的延迟时间来换取用户的延迟时间是值得的,因为用户的体验会因此得到提升。活动跟踪、单据开付和报表等处理过程显然都应该属于后台活动,很多步骤可以进一部分解成异步运行,任何可以晚点再做的事情都应该晚点再做。

多说一句,异步性可以从一定程度上降低系统投入的成本。常规的同步操作需要系统必须按照负载的峰值来配备基础设施,即使在大促做年度活动的时间周期里任务最重的时刻,系统也必须有能力立即完成处理。将处理过程转变为异步的流,系统就不需要按照峰值来配备,只需要满足平均负载。异步队列可以将处理任务分摊到较长的时间里,起到削峰的作用。系统的负载变化越大,曲线越多尖峰,就越能从异步处理中得益。

希望以上关于异步的总结能对你有用,通过异步的方式优化系统的伸缩性。如果大家有更好的建议,欢迎指正。

扫描二维码或手动搜索微信公众号: ForestNotes

欢迎转载,带上以下二维码即可

分布式架构中异步的使用场景相关推荐

  1. 分布式架构中常见理论以及如何才能设计出高可用的分布式架构?

    分布式架构中常见理论以及如何才能设计出高可用的分布式架构? 一.前言 我们就来聊一聊目前主流的分布式架构以及分布式架构中常见理论以及如何才能设计出高可用的分布式架构好了.分布式架构中,SOA和微服务架 ...

  2. 盘点Zookeeper在分布式架构中的应用

    近日了解到 Kafka 正在酝酿重大更新,可能会提供自管理的元数据仲裁机制以消除对 Zookeeper 的依赖,社区呼吁也相当强烈.那么一般而言 Zookeeper 在分布式系统中扮演什么角色?目前 ...

  3. 分布式架构中分布式事务

    本地事务无法解决,所以才引入了分布式事务,所谓的分布式事务是指分布式架构中多个服务的节点的数据一致性.

  4. 微服务分布式架构中,如何实现日志链路跟踪

    摘要:接口设计出来返回结果值和编码,还有哪些是需要我们优化的结果参数?微服务分布式架构中,如何实现日志链路跟踪? 本文分享自华为云社区<微服务分布式架构中,如何实现日志链路跟踪?>,作者: ...

  5. 微服务分布式架构中,如何实现日志链路跟踪?

    本文主要讲解了spring cloud微服务使用Feign作为微服务间的通讯框架的情况下,如何使用统一的日志ID来追踪一次请求日志,高效排查日志.核心解决了以下问题: 1.代码无入侵 2.线程池(主/ ...

  6. 一致 先验分布 后验分布_浅谈Loki分布式架构中的一致性哈希

    云原生小白 看到上面蓝色字了么?关注下吧! Loki在分布式部署的模式下,保存Ingester服务的状态主要有3个渠道,分别是etcd.consul和基于gossip协议的memberlist.不管L ...

  7. 负载均衡在分布式架构中是怎么玩起来的?

    什么是负载均衡(Load balancing) 在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但随着业务量越来越大,无论性能还是稳定性上都有了更大的挑战.这时候我们就会想到通过扩容的方式来 ...

  8. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  9. 分布式架构中数据一致性常见的几个问题

    前言 针对分布式架构下的数据一致性,大家也许会问这样的问题:跨系统间分布式事务如何解决?系统内多个服务的分布式事务如何解决?一个服务内多个数据源/数据库的分布式事务如何解决?--这些问题大家是很容易理 ...

最新文章

  1. 客户网页WIZnet无线解决方案 之 太阳能逆变器
  2. Python-OS平台编程
  3. nginx配置文件防盗链
  4. MSE与MAE的区别与如何选择
  5. Python 日期计算:计算某日期前几天,后几天的日期,也可以计算小时,分钟之后的日期时间
  6. python 文件复制中出现 Python3之由通用字符名称“\u202A”表示的字符不能在当前代码页中表示出来
  7. android注解处理技术APT
  8. 浏览器原理学习笔记1-浏览器进程
  9. c语言5的阶乘流程图_求n流程图(求n的阶乘的算法框图)
  10. 达梦数据库启动、停止,集群环境监视器服务启动、停止,查看各机器状态
  11. shell美元符_Linux Shell中的美元符号$ | 学步园
  12. How to Backdoor Federated Learning
  13. 生成二维码及微信长按识别二维码
  14. 央视解说之韩乔生巅峰之作--夏普
  15. 小马哥---高仿红米note 主板型号W9-MP-V 1.2字库损坏 软件修复实例
  16. mac环境 java找不到或无法加载主类
  17. css icon旋转
  18. 1.8.8 配置防盗链
  19. Flex常用布局,了解一下
  20. 地下暗管探测技术方案——探地雷达(暗管探测仪)

热门文章

  1. 蚂蚁金服面试经历-临场发挥
  2. Git 同一个Git HostName 配置多个sshkey
  3. MySQL分库分表使用Snowflake全局ID生成器(3rd)
  4. Keepalived+LVS+Nginx负载均衡之高可用
  5. 一点历史--Python
  6. Kendo UI常用示例汇总(九)
  7. mysql主从复制的简单配置
  8. Oracle 11G for redhat 自启动脚本
  9. 如何防止apk程序被反编译
  10. Extensible Messaging and Presence Protocol (XMPP): Core