Openstack 中的消息总线 & AMQP
目录
消息总线
Openstack 采用了面向服务的开发模式(有别于面向对象和面向过程),需要我们去考虑各个服务之间和各项目之间是如何传递消息的。
- Restful API:项目之间的通信。
- 消息总线:项目内部的服务之间的通信。
使用这种架构模式的好处在于:保证了各个项目对外提供服务的 API 接口可以被不同的客户端类型所调用。即,只要可以调用这个 API 接口,那么 Client 是使用什么技术来实现,Service 都不会受到影响,也不需要作出改变。Server 和 Client 做到了模块化的分离。除此之外,还能够保证项目内部通信接口的可扩展性和可靠性,可以支持大规模的部署。
消息总线:可以实现一些服务向总线发送信息,其他的服务从总线上获取消息的效果。就类似于回转寿司的回转带,所有人都可以往回转带上放寿司和取寿司,这样的话只需要有足够的位置,就能够随时加入或减少客人,而且并不会影响整个寿司店的运作。
消息总线的原理
项目内部各服务进程之间的通信使用了:oslo.messaging库所提供的函数方法。同时还需要以下两种技术作为支撑。
远程过程调用 RPC:一个服务进程可以调用其他远程服务进程的方法。调用的方式:
call():远程方法会被同步执行,调用者会被阻塞直到返回方法的结果,在一些调用时间较长的场合中使用会对效率又很大的影响。( call() 调用的远程服务的方法会被马上执行,在执行的过程中还会把调用者的进程阻塞掉,知道返回结果为止。)
cast():远程服务的方法会被异步执行,调用者不会被阻塞,结果也无须立即返回,可以在一个合适的时机(人为干预)去执行并返回结果。所以也要求调用者利用其他的方法来查询这次远程调用的结果。
事件通知:某一个服务进程将事件通知发送到消息总线上,所有在消息总线上且对该事件通知感兴趣的服务进程都可以将该事件通知获取并进行处理,执行的结果并不需要返回给事件发送者。这种方式不仅可以在项目组件内部的进程服务通信间实现,还可以在项目之间的通信中实现(EG. Ceilometer)。
AMQP
AMQP高级消息队列协议:是一个基于应用层的,用于异步消息传递的协议规范。其功能包括了: 消息的导向/ 消息的队列/ 消息的路由/ 消息的可靠性/ 消息的安全性。不同的AMQP实现方式之间可以通过定义消息在网络上传输时的字节流格式来进行互相操作。
在一个实现了 AMQP协议 的中间件消息队列服务中,如:RabbitMQ。当由生产者发出的不同的消息被发送到 RabbitMQ Server 中的 Queue 时,RabbitMQ 会根据不同的条件把 Queue 中的请发传递给不同的消费者。如果消费者无法接收,那么这个消息,就会自动的把消息缓存在内存或者磁盘中。这些操作是由 RebbitMQ 中的 Exchange 和 Queue 来实现的( Exchange或Queue的数量不定 ):
Excange(信息交换):决定了消息的路由转发,根据接收到的消息中的 Info (从消息属性/消息头/消息体中提取)来与绑定表匹配(消息的 routing key 和 Queue 的 binding key 匹配)以此来决定将消息转发到哪一个 Queue 中,然后消费者再从 Queue 中获取消息并进行处理。
Queue(消息队列):作为 消息存储 和 分发 实体,负责将消息缓存在内存或者磁盘中,并且按照一定的顺序将这些消息分发给一个或多个消费者。
注:Excange 负责将消息转发到 Queue 中,转发的判断依据是从消息中获取的routing key 与 Queue 中的 binding key 匹配结果。
Openstack 中的消息总线 & AMQP的更多相关文章
- 记一次有关spark动态资源分配和消息总线的爬坑经历
问题: 线上的spark thriftserver运行一段时间以后,ui的executor页面上显示大量的active task,但是从job页面看,并没有任务在跑.此外,由于在yarn mode下, ...
- JMS中的消息通信模型
1. MQ简介: 消息队列(Message Queue,简称MQ),是应用程序与应用程序之间的一种通信方法.应用程序通过发送和检索出入列队的针对应用程序的数据 - 消息来通信,而无需专用连接来链接它们 ...
- 探索 OpenStack 之(14):OpenStack 中 RabbitMQ 的使用
本文是 OpenStack 中的 RabbitMQ 使用研究 两部分中的第一部分,将介绍 RabbitMQ 的基本概念,即 RabbitMQ 是什么.第二部分将介绍其在 OpenStack 中的使用. ...
- 开源消息总线ActiveMQ
一.消息中间件MOM(Message-Oriented Middleware) 消息中间件是解决异步分布式系统中通讯和排队问题的中间件技术.它利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数 ...
- springcloud(九):配置中心和消息总线(配置中心终结版)
我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...
- SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版
前言 在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心( ...
- SpringCloud基于消息总线的配置中心
@https://www.cnblogs.com/ityouknow/p/6931958.html Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点 ...
- SpringCloud消息总线
我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...
- springcloud 入门 9 (消息总线)
Spring cloud bus: Spring cloud bus通过轻量消息代理连接各个分布的节点.这会用在广播状态的变化(例如配置变化)或者其他的消息指令.Spring bus的一个核心思想是通 ...
随机推荐
- Python 工程师技能图谱skill-map
# **Python 工程师技能图谱** ## **入门**- 笨办法学Py- 官方教程- Hitchhiker- coursera * codeskulptor.org ## **进阶/脚本** # ...
- PHP-文件和目录操作
目录操作 创建目录:mkdir(目录地址, 权限, 是否递归创建 = false); 删除目录:rmdir(目录地址);(仅仅可以删除空目录,不支持递归删除) 移动(改名):rename(旧地址, 新 ...
- libVEX学习
VEX IR是一种更加接近于compiler使用的中间语言/中间表示,它是不依赖于特定体系架构的. 1. Code Blocks code blocks是VEX处理代码的一个单元,使用IRSB结构体表 ...
- HDU 1724 Ellipse (自适应辛普森积分)
题目链接:HDU 1724 Problem Description Math is important!! Many students failed in 2+2's mathematical tes ...
- 【LCT维护子树信息】uoj207 共价大爷游长沙
这道题思路方面就不多讲了,主要是通过这题学一下lct维护子树信息. lct某节点u的子树信息由其重链的一棵splay上信息和若干轻儿子子树信息合并而成. splay是有子树结构的,可以在rotate, ...
- 力扣算法——134GasStation【M】
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...
- Django 自定义模型管理器(Manager)及方法
转载自:https://www.cnblogs.com/sui776265233/p/11571418.html 1.自定义管理器(Manager) 在语句Book.objects.all()中,ob ...
- 【目录】ASP.NET Core 基础教程
ASP.NET Core 基础教程 ASP.NET Core 基础教程 ASP.NET Core 简介 ASP.NET Core Windows 环境配置 ASP.NET Core macOS 环境配 ...
- 【总】IdentityServer4 32篇汇总
随笔分类 - IdentityServer4 IdentityServer4 常见问题 - 用户拒绝授权后报错 摘要: 1.问题说明 在 IdentityServer4 Web 授权中,一般会有一个显 ...
- android中的BroadCastReceiver
BroadCastReceiver组件本质是一种全局的监听器,用于监听系统全局的广播消息.由于BroadCastReceiver是一种全局的监听器,因此他可以非常方便的实现系统之间不同组件之间的通信. ...