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

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

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

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

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

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

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

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

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

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

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

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

d59d07ebc38a475bb703a1075798533a.png
异步调用的例子

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

2fcebc79d0a32b273ef9301e143b46bb.png

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

总结

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



推荐阅读
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 微信小程序中的ActionSheet和Picker组件详解
    本文详细介绍了微信小程序中ActionSheet和Picker组件的使用方法及示例代码,帮助开发者更好地理解和应用这些组件。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • 阿里面试题解析:分库分表后的无限扩容瓶颈与解决方案
    本文探讨了在分布式系统中,分库分表后的无限扩容问题及其解决方案。通过分析不同阶段的服务架构演变,提出了单元化作为解决数据库连接数过多的有效方法。 ... [详细]
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • 专业人士如何做自媒体 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 单片机中的锁存器工作原理解析及其应用
    本文详细解析了单片机中锁存器的工作原理,并探讨了其在实际应用中的重要作用。通过分析锁存器的结构和功能,文章揭示了其在数据存储和信号传输中的关键作用,为相关领域的工程师提供了宝贵的参考。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • HTML 页面中调用 JavaScript 函数生成随机数值并自动展示
    在HTML页面中,通过调用JavaScript函数生成随机数值,并将其自动展示在页面上。具体实现包括构建HTML页面结构,定义JavaScript函数以生成随机数,以及在页面加载时自动调用该函数并将结果呈现给用户。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
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社区 版权所有