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

socket同步和异步通信区别_分布式系统简单讲,同步通信与异步通信,程序员面试必备...

我们常常说,分布式系统需要进行解耦操作,解耦操作最简单的就是把现有的系统拆出几个独立的模块,并把这些模块在不同的机器部署起来。虽然说&#x

我们常常说,分布式系统需要进行解耦操作,解耦操作最简单的就是把现有的系统拆出几个独立的模块,并把这些模块在不同的机器部署起来。虽然说,分布式系统更加健壮,但往往也引入其他问题,其中,最为麻烦的问题之一就是不同的系统之间如何进行调用的问题。

我们称不同机器、不同模块之间的调用为RPC调用,根据实时性的不同,又分为同步调用与异步调用。如何理解同步调用跟异步调用呢?我们可以理解为打电话与发短信,我们在和一个人进行电话通信的时候,打电话是实时的,当你说话之后,对方立马就能收到,并对你做出回应,而发短信呢?对方可能会稍等一会才会给你回信。一般我们只能跟一个人进行实时的通话,别人打进来会占线,而短信则没有这种情况,你可以同时接收多条短信,并逐步回信。

358689f9c92e1fb31a60cd9b887ad6fd.png
同步调用的优点与缺点

同步调用的优点非常的明显,那是逻辑非常清晰,编写代码非常的简单,但是缺点也是非常的明显,同步调用有着下面这些缺点。

  • 同步调用一般只能做到一对一,很难做到一对多。
  • 同步调用非常依赖被调用方,被调用方的吞吐会影响到整个整个系统的吞吐。并且,当调用方发起远程调用的时候,整个线程都会阻塞,等待被调用方的返回。
  • 同步调用实际上并没有想象中那么健壮,当一个下游系统奔溃的时候,非常容易形成多米诺骨牌效应,引起整个系统的雪崩。
异步调用

异步通信,正是为了解决同步调用中的诸多问题。

首先,异步通信非常容易做到一对多。举个简单的例子,在电商交易系统中,用户成单的时候,需要获取非常多的资源,除了要获取用户的基本信息、收货地址、商品信息、商品库存、卖家信息还要获取一些优惠、反垃圾信息,如果系统是同步调用的,那么我们只能够串行等待所有系统的返回,如果我们能改成异步通信,那么就能同时对多个系统发起查询。

其次,异步通信的系统吞吐量更大,上述例子,对每一个系统的查询,我们都需要等到对方的返回,假如我们有5个下游系统,每个下游系统都需要30ms处理数据,串行化需要150ms才能完成一次操作,假如我们使用异步通信,并且5个系统互补依赖,那么我们可能只要30ms就能得到返回的结果。

最重要的是,异步通信让我们的系统更加的健壮。有些业务的逻辑非常的重,同步调用容易造成服务的雪崩。举个简单的例子,我们在微信等聊天软件上使用群发功能,如果这个群的人数超过一定数量,通常都会使用异步处理,否则,如果群里有2000人,我们都要往2000个用户投递信息,一旦群里突然有红包等刷屏操作,就非常容易把系统打垮。

d59d07ebc38a475bb703a1075798533a.png
异步调用的例子

在现实的生产开发中,异步调用也是非常常见的。例如我们我们常用的第三方支付,当用户支付完成之后,并不是立马接收到到用户的回调,而是先给用户返回成功,后续再由第三方支付进行回调。

2fcebc79d0a32b273ef9301e143b46bb.png

又如我们经常在开发中使用各种MQ,也是常见的异步调用的一种常见的实现方式。

总结

相对于同步调用,异步调用的优点非常的明显,那异步调用又存在什么样的问题呢?异步调用有没有存在其他实现难处呢?欢迎大家关注我,下一次,我们来聊一聊,异步调用中的难点。



推荐阅读
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 阅读本文大约需要3分钟。微信8.0版本的发布带来了许多令人振奋的新功能,如烟花特效和改进的悬浮窗,引发了用户的热烈反响。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Java多重继承的替代方案及设计考量
    本文探讨了Java为何不支持多重继承,并深入分析了其背后的原理和替代方案。通过理解Java的设计哲学,开发者可以更好地利用接口和其他特性来实现复杂的类结构。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
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社区 版权所有