同步与异步

作者: _Away_y | 来源:发表于2018-12-13 18:15 被阅读10次

背景

不仅仅是因为现在微服务架构盛行,之前的服务之间协作进行通信也面临这样的选择,到底用同步的方式还是用异步的方式呢?这个基础性的选择会不可避免地引导我们使用不同的实现。

同步

使用同步方案,发起一个远程服务调用后,调用方会阻塞自己并等待整个操作的完成。

协作风格为请求/响应。即客户端发起一个请求,然后等待响应。

但是这个风格也适用于异步通信,如我可以发送一个请求,然后注册一个回调,当服务端操作结束后,调用该回调。

适用场景

  • 极其关心调用结果
  • 实现复杂的异步方案得不偿失

相关的架构风格

编排.png

这里首先说明一下,使用编排的架构风格不一定就是采取的请求/响应模式。但是基本情况会使用这种相应模式。

它的特征就是有一个服务作为中心大脑,由它来保证整套流程的运行。

然而缺点是,承担流程编排的服务作为中心控制点承担了太多的职责,它会成为网状结构的中心枢纽及很多逻辑的起点。这种方法就会导致出现少量的上帝服务,而与它打交道的那些服务会沦为贫血的、基于CRUD的服务。

相关技术

RPC

Remote Procedure Call 远程过程调用

核心特点是使用本地调用的方式和远程进行交互。即允许我们进行一个本地调用,但事实上结果是由某个远程服务器产生的。

优点
  • 易于使用,大多RPC实现会帮助生成服务端和客户端的桩代码
缺点
  • 开发人员混淆远程调用和本地调用,忽略对远程调用的优化
  • 比较脆弱,很不适应修改且客户端和服务器的部署无法分离

REST

REpresentational State Transfer 表述性状态转移

REST本身没有提到底层应该使用什么协议,但是我们通常都是使用HTTP。

优点
  • 客户端和服务端解耦
  • 适用于大流量场景
缺点
  • 因为客户端需要不断地发现链接、请求、再发现链接直到找到自己想要进行的操作,所以客户端和服务端通信的次数会比较多
  • 需要自己实现HTTP客户端
  • 性能相对Thrift(一种RPC技术)二进制协议相比会差很多
  • 不能做到低延迟

异步

使用异步方案,调用方发出一个远程服务调用后,不需要阻塞等待操作的完成就可以返回。

协作风格为基于事件。即客户端不是发起请求,而是发布一个事件,然后期待其他的协作者接收到该消息,并且知道该怎么做。我们从来不告知任何人去做任何事情。基于事件的系统天生就是异步的。

整个系统都很聪明,业务逻辑并非集中存在于某个核心大脑,而是平均地分布在不同的协作者中。

基于事件的协作方式耦合性很低。

适用场景

  • 远程任务运行时间比较的长
  • 需要低延迟的情况

相关的架构风格

协同.png

协同服务的话如上图所示,可以仅仅由某个服务使用异步的方式触发一个事件。然后就会有相应的协作服务去做处理。这种方式可以显著的消除耦合,如果其他的服务也关心这个事件,简单地订阅这个事件就可以了。

然而它的缺点是不太容易的看到明显的业务流程视图,需要做一些额外的工作来监控流程,以保证其正确地运行。如构建一个与编排那张图所展现的流程相匹配额监控系统。实际的监控活动是针对每个服务的,但最终需要把监控到的结果映射到业务流程中。从而我们可以得知系统是如何运作的。

相关技术

RMQ

ATOM

相关文章

  • UNIX 的5种IO模型介绍

    IO模型同步、异步、阻塞、非阻塞socket阻塞与非阻塞,同步与异步 同步和异步 同步/异步主要针对C端-同步就像...

  • 简单理解异步,非阻塞和 IO 复用

    1.1 同步与异步 同步与异步的理解 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式。同步: 当一个...

  • clk分类与介绍

    1、同步电路与异步电路 首先来谈谈同步电路与异步电路。那么首先就要知道什么是同步电路、什么是异步电路? 对于同步时...

  • 高并发原理研究和探索

    详细了解同步与异步,阻塞与非阻塞。 1、同步与异步 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式。...

  • NIO基础之同步、异步、阻塞、非阻塞

    这里区分几个概念,也是常见但是容易混淆的概念,就是标题中的同步、异步、阻塞、非阻塞。 一、同步与异步 同步与异步,...

  • 多线程处理(问题使用方法)

    一、同步与异步、串行与并发: 首先我们要明白:什么是同步、异步?什么是并发、串行?同步、异步是提交任务的一种方式,...

  • 侃侃高并发的实现原理

    为了更加形象的说明同步异步、阻塞非阻塞,我们以实物买奶茶来说明为例。 并发处理的前身 一:同步与异步 ①同步与异步...

  • 📕 史上最实用的JS笔记

    1. 同步与异步 同步和异步的区别是什么?分别举一个同步和异步的例子 同步会阻塞代码执行,而异步不会阻塞代码执行。...

  • 异步编程

    同步与异步 同步:按代码顺序依次执行 异步:先执行同步代码,完成后再执行异步代码 事件循环与消息队列:当代码执行到...

  • 同步、异步、阻塞与非阻塞

    同步与异步 首先来解释同步和异步的概念,这两个概念与消息的通知机制有关。也就是同步与异步主要是从消息通知机制角度来...

网友评论

    本文标题:同步与异步

    本文链接:https://www.haomeiwen.com/subject/fmibhqtx.html