热门标签 | 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的引擎不是不行,适合自己的项目,适合的场景才是追重要的。


推荐阅读
  • 本文详细介绍了 MySQL 的查询处理流程,包括从客户端连接到服务器、查询缓存检查、语句解析、查询优化及执行等步骤。同时,深入探讨了 MySQL 中的乐观锁机制及其在并发控制中的应用。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 通过与阿里云的合作,牛客网成功解决了跨国视频面试中的网络卡顿问题,为求职者和面试官提供了更加流畅的沟通体验。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文探讨了在 ASP.NET MVC 5 中实现松耦合组件的方法。通过分离关注点,应用程序的各个组件可以更加独立且易于维护和测试。文中详细介绍了依赖项注入(DI)及其在实现松耦合中的作用。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • MySQL 高性能实战教程
    本课程深入探讨 MySQL 的架构、性能调优、索引优化、查询优化及高可用性等关键领域。通过实际案例和详细讲解,帮助学员掌握提升 MySQL 数据库性能的方法与技巧。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • NTP服务器配置详解:原理与工作模式
    本文深入探讨了网络时间协议(NTP)的工作原理及其多种工作模式,旨在帮助读者全面理解NTP的配置参数和应用场景。NTP是基于RFC 1305的时间同步标准,广泛应用于分布式系统中,确保设备间时钟的一致性。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文详细探讨了 MySQL 中自增 ID 的工作原理,特别是在并发写入场景下如何确保 ID 不会重复,并介绍了相关的优化策略和常见问题。 ... [详细]
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社区 版权所有