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

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

同步调用的优点与缺点

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

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

异步调用

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

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

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

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

异步调用的例子

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

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

总结

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

socket同步和异步通信区别_程序员必知必会,同步通信与异步通信,你了解多少...相关推荐

  1. 静态方法与非静态方法的区别_程序员必看之ThinkPHP5中model与Db的区别

    在ThinkPHP5的使用过程中,很多使用者刚接触到数据库操作时,不能很好调用相关的方法进行数据库的交互.下面就分享一下ThinkPHP5中Db与模型的区别 关于db与model的选择 使用DB方式是 ...

  2. gdbstub中的基本命令_程序员应该知道的 20 个 Linux 系统管理命令

    在充满新工具和多样化开发环境的世界中,任何开发人员或工程师都必须学习一些基本的系统管理命令,以下这 20 个基本的系统管理命令可以帮助开发人员排除故障.优化应用程序.提供重要的系统信息等,是每个程序员 ...

  3. 程序员应知必会的思维模型之 18 林纳斯定律 (Linus‘s Law)

    林纳斯定律 (Linus's Law) 足够多的眼睛,就可让所有问题浮现.–Eric S. Raymond 简单地说,能够看到问题的人越多,有人解决过相关的问题或事情的可能性就越高. 最初该定律是用来 ...

  4. 程序员应知必会的思维模型之 7 邓巴数字 (Dunbar‘s Number)

    邓巴数字 (Dunbar's Number) 邓巴数字是对一个人能够保持稳定社会关系的人数的认知极限--在这种关系中,一个人知道每个人是谁,也知道每个人与其他人的关系如何.而对这一数字的确切值则有着一 ...

  5. 程序员应知必会的思维模型之 25 普特定律 (Putt‘s Law)

    普特定律 (Putt's Law) 技术由两类人主导,一类是纯粹的管理人员, 一类是纯粹的技术人员. 普特定律常常遵循普特推论: 每一个技术层次,假以时日,能力将逆转. 这些结论表明,由于各种选择标准 ...

  6. 程序员应知必会的思维模型之 19 梅特卡夫定律 (Metcalfe‘s Law)

    梅特卡夫定律 (Metcalfe's Law) 在网络理论中,系统的价值约等于系统用户数的平方. 这个定律基于一个系统中可能的连接对数量,并且与里德定律 (Reed's Law) 十分相近.奥德利兹科 ...

  7. 程序员应知必会的思维模型之 15 技术成熟度曲线 (The Hype Cycle or Amara‘s Law)

    技术成熟度曲线 (The Hype Cycle or Amara's Law) 我们倾向于过高估计技术在短期内的影响,并低估长期效应.–罗伊·阿马拉 (Roy Amara) 技术成熟度曲线是高德纳咨询 ...

  8. 程序员应知必会的思维模型之 23 帕金森定理 (Parkinson‘s Law)

    帕金森定理 (Parkinson's Law) 在工作能够完成的时限内,工作量会一直增加,直到所有可用时间都被填满为止. 基于官僚机构的研究背景,该定律被应用于软件开发中.该理论认为,团队在截止日期之 ...

  9. 程序员应知必会的思维模型之 21 墨菲定律 (Murphy‘s Law / Sod‘s Law)

    墨菲定律 (Murphy's Law / Sod's Law) 凡是可能出错的事就一定会出错 出自 爱德华·A·墨菲 , 墨菲定律 说明了如果一件事有可能出错,那么就一定会出错. 这是一句开发人员间的 ...

最新文章

  1. 关于《Android应用开发揭秘》中早期版本中联系人例子错误的解决办法
  2. linux内核centos6.9,CentOS6.9手动编译并更新Kernel内核版本
  3. 关于MyEcplise中常见的问题和解决方案
  4. SqlServer与.NET的数据类型映射关系图
  5. csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别...
  6. Wireshark文档阅读笔记-TCP 4 times close解析与实例
  7. python爬取歌词_利用Python网络爬虫抓取网易云音乐歌词
  8. 使用Maven在jar中包含依赖项
  9. 怎样提高团队管理能力7
  10. 基于canvas的前端图片压缩
  11. 十大Ajax框架(排名不分先后)
  12. C语言求解一元二次方程代码
  13. 基于阿里云服务器使用kubeadm搭建k8s集群
  14. 换机潮爆发,5G手机+5G超级SIM卡成趋势
  15. revit附加模块 sat_revit附加模块怎么弄?如何解决Revit附加模块加载失败问题
  16. 三菱IPM驱动芯片PSS15S92\PSS20S92分析
  17. uview中button细边框去除问题
  18. Java判断字符串是否为数字(正负、小数)
  19. android手机iPhone对比,iPhone 6与Android旗舰手机的身材大对比
  20. js获取父元素、子元素、兄弟元素的方法

热门文章

  1. 1.6 多项式回归-机器学习笔记-斯坦福吴恩达教授
  2. 准备入门IC的全局观念系列-上
  3. 编译Android源码前的一个步骤
  4. 学的不是写代码,学的是编程思维!
  5. andy the android ppt,新概念同步测试1.ppt
  6. 基于MATLAB的costas载波同步+gardner时间同步,QPSK调制
  7. SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。
  8. 面状县级行政区划转地级行政区划,并关联属性字段
  9. 长亭技术专栏 安全攻防技术分享
  10. 万能的Entry,两个变量的Model/JavaBean再也不用写了!