详解:同步架构和异步架构的区别及消息队列

分布式消息队列是是大型分布式系统不可缺少的中间件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。

对于一个架构师来说,在大型系统设计中,会经常需要面对同步和异步等架构问题,搞明白这些问题,能更好地实现程序并行执行,减少等待或无效操作,以及充分利用计算机的性能!

 

本文将详细讲解:

1.同步架构和异步架构的区别

2.异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列

3.异步架构的两种主要模型:点对点模型和发布订阅模型。

4.消息队列的好处

5.消息队列相关产品

 

建议用10min通读,搞懂分布式消息队列的核心内容。

 

一、同步架构和异步架构的区别

 

1.同步调用     

 

是指从请求的发起一直到最终的处理完成期间,请求的调用方一直在同步阻塞等待调用的处理完成。

 

如图,在这个例子中客户端代码ClientCode,需要执行发送邮件sendEmail这样一个操作,它会调用EmailService进行发送,而EmailService会调用SmtpEmailAdapter这样一个类来进行处理,而这个类会调用远程的一个服务,通过SMTP和TCP协议把请求发送给它。

 

而远程服务器收到消息以后会对消息进行一系列的操作,然后将邮件发送出去,再进行返回。Adapter收到返回后,再返回给EmailService,EmailService收到返回后再把返回结果返回给Clientcode。

  

ClientCode在sendEmail发出请求后,就一直都阻塞在这里,等待最终调用结果的返回,是成功还是失败。因为这个过程是阻塞等待的,所以这个过程也就是同步调用。

               

2.异步调用

 

是指在请求发起的处理过程中,客户端的代码已经返回了,它可以继续进行自己的后续操作,而不需要等待调用处理完成,这就叫做异步调用。

 

 

异步调用过程,同样看刚刚发送邮件的例子,用户Clientcode调用EmailService以后,EmailService会把这个调用请求发送给消息队列,然后就立即返回了。Clientcode收到返回以后继续向下处理,不会继续阻塞等待。实际上消息发送到Queue后,还没有被处理,我们看到后面的消息消费,其实要比EmailService

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux消息队列是一种进程间通信(IPC)方式之一。它是一个简单的消息传递机制,用于在进程之间传递数据。消息队列是一种先进先出(FIFO)的数据结构,它允许一个进程向队列中添加消息,另一个进程从队列中读取消息。 Linux消息队列由三部分组成: 1. 消息队列标识符:它是一个整数,用于标识消息队列。 2. 消息结构体:它包含要传递的数据和数据的长度。 3. 操作函数:用于创建、读取、写入和删除消息队列。 Linux消息队列的操作函数主要有以下几个: 1. msgget():创建或打开一个消息队列。 2. msgsnd():向消息队列中添加消息。 3. msgrcv():从消息队列中读取消息。 4. msgctl():控制和删除消息队列。 使用Linux消息队列的步骤如下: 1. 使用msgget()函数创建或打开一个消息队列,并获取消息队列标识符。 2. 使用msgsnd()函数向消息队列中添加消息。 3. 使用msgrcv()函数从消息队列中读取消息。 4. 使用msgctl()函数控制和删除消息队列。 Linux消息队列的优点是可以实现进程之间的异步通信,不需要像管道和FIFO一样进行同步。同时,消息队列可以缓存消息,当一个进程没有准备好读取消息时,消息不会被丢失。但是,Linux消息队列的缺点是如果发送者发送的消息大小超过了消息队列的大小,消息将被截断。此外,消息队列的使用会占用一定的系统资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值