热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

同步调用与异步调用分析

服务与服务间的调用方式分为两种同步调用、异步调用。同步调用可以理解为A打电话给B,需要实时响应,异步调用类似A给B发送邮件,B不需要马上回


       服务与服务间的调用方式分为两种同步调用、异步调用。同步调用可以理解为A打电话给B,需要实时响应,异步调用类似A给B发送邮件,B不需要马上回复。这两种调用方式应该说都有的优缺点。但是在面对一个高并发吞吐量的系统,异步方式比同步方式可以大大增加系统的吞吐量。A,B,C,E 可以同时给F发送邮件,F可以不在线,不用立即回复。对于服务化后服务与服务之间的调用也类似这样一个原理。同步调用虽然只是耦合外部接口,实时性上会高于异步调用,但是会带来很多的问题。
1.调用方的吞吐量受限于被调用方的吞吐量,一旦某个服务响应特别慢,那么整个调用链的性能都会受到影响。
2.同步调用会导致线程被阻塞,你想想当一个调用需要等待另外一个服务响应回来时,相当于线程被阻塞在哪里,服务的线程资源是很可观,我们用户可以有成千上万个,但是我们服务器缺不允许启动1w个线程。这样会导致整个系统的性能都耗费在等待返回结果的这一个过程中。
3.服务与服务之间的调用只能是1对1的关系,想要做到一对多是很困难的。
4.被调用方一定失败,会导致服务发起方也跟着失败,从而引起雪崩的问题。


        异步调用相对于同步调用来说,虽然在理想的情况下请求响应时间会慢与同步调用,但是可以加大系统的吞吐量,还可以简化系统与系统之间的耦合性,即使被调用方宕机了也不影响业务发起方。
在资源服务器有限的情况下,在针对大促的时候可以,异步调用的模式把一些非关键的服务器挪作他用,例如用户下单成功后通知物流系统,发送下单成的消息这些服务全部停止掉,挪给订单服务器使用。因为这些服务直接停了也不会影响系统的正常下单逻辑。我们只需要保存好这些消息,当系统不那么繁忙的时候在把之间挪作他用的服务器在重新启动回来,这样下单成功通知、物流通知系统又可以恢复正常的流转。当然异步调用的好处远不止以上说的这些,什么样的场景适合这类方式,还需要大家多多的思考,不知道大家有没了解过saga,异步调用的最终模型其实就是saga(服务编排),这里面其实也并不是否定同步调用的不好,同步从整个理解逻辑上来说是很直观的。如果一个系统里面所有的通讯都走异步其实也是很恐怖的他的代价其实也是蛮大的,所以应用异步应该在系统的瓶颈位置上,领域边界上,而不是所有的调用都是异步,这样的开发量太大了,得不偿失。又或者我们的系统压根就是一个简单的管理系统,要求没那么高,同步的模型也是ok的,因地制宜,什么马配什么鞍,一定要给捷达增加一个法拉利V8的引擎不是不行,适合自己的项目,适合的场景才是追重要的。


推荐阅读
  • Maven快照版本管理及更新策略详解
    本文深入探讨了Maven中的快照版本管理和更新策略,解释了快照版本与正式版本的区别,并提供了如何配置快照更新策略的方法,以确保项目依赖始终保持最新。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文探讨了服务器系统架构的性能评估方法,包括性能评估的目的、步骤以及如何选择合适的度量标准。文章还介绍了几种常用的基准测试程序及其应用,并详细说明了Web服务器性能评估的关键指标与测试方法。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文详细探讨了在Java TCP编程中,如何理解和测量并发连接数、请求数及并发用户数,并提供了实际应用中的测试方法和优化建议。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
author-avatar
流浪汉中的小男人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有