ZStack消息流分析

2024-01-14 14:48
文章标签 分析 消息 zstack

本文主要是介绍ZStack消息流分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从前端发起一个控制消息,到后台MN(Managementnode)接受处理,中间经历了哪些流程,消息是怎样一步步传输的?这篇博客,我们就以创建虚拟机为例,看看消息是怎么一步步处理的。

Zstack的消息都是通过消息中间件RabbitMQ来进行的传递。前端发起了http请求,实际上是通过RabbitMQ进行的实际的转发。发送到后台MN部分,由RabbitMQ接受解析,从而进行处理。

基本的大的步骤,肯定是先Dashboard发起一个控制消息,然后Managementnode接收到这个消息,然后具体地去做处理。最后返回处理结果给Dashboard。我们接下来一个个去梳理。

场景:前端发起创建虚拟机VM的请求

第一部分:Dashboard发起请求

创建虚拟机的消息名称是:APICreateVmInstanceMsg。首先是Dashboard向MN发起请求。那么是怎么发送过去的呢?是直接通过RESTful形式请求吗?其实不是的,是通过消息中间件RabbitMQ传输的。

可以在dashboard/web.py中查看发送远程消息请求代码:

   def send(self, msg):if self.STATUS_READY != self._status:raise Exception('the rabbitmq connection is not ready yet')try:with kombu.producers[self.conn].acquire(block=True) as producer:producer.publish(msg, exchange=self.P2P_EXCHANGE, routing_key=self.API_SERVICE_ID)except Exception as ce:if self._is_connection_error(ce):log.warn('lost connection to %s, %s' % (self._current_url, str(ce)))self._do_initalize_in_thread()raise

可以看到这里是一个producer生成者向MQ发送了一个消息。那这个消息格式长什么样呢?Here you are:
这里写图片描述

这个消息是一个创建虚拟机的消息。这是发送的Message的主体部分。可以看出这是一个符合json格式的消息,包含了创建一个虚拟机所需要的所有信息。当后台在收到这个消息的时候会根据这个消息进行虚拟机创建。那么后台是怎么收到的呢?

其实在发送消息的时候,因为是发送给RabbitMQ的,因此需要指定消息的label(RabbitMQ的知识)。在发送消息的时候,在dashboard工程下的web.py(335)行的send方法可以看到,发送给RabbitMQ消息的label是serviceID。这个serviceID是每种类别的消息,可以从api_messages.py里面看到有哪些类别。同一个类别的消息会发给该类对应的消息分发器去分发处理消息。
因此这里由于我们是创建虚拟机消息,可以看到label是header,因此这里我们猜测,Managementnode在启动时,会创建队列名叫“header”的queue。这样前台把消息传个RabbitMQ的时候,就可以直接转到对应的队列里面去了。

那后台是如我们猜想的那样吗?

第二部分:Managementnode接受请求

Updating

这篇关于ZStack消息流分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/605537

相关文章

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

消息认证码解析

1. 什么是消息认证码         消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。         消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。         根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

Java中的大数据处理与分析架构

Java中的大数据处理与分析架构 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论Java中的大数据处理与分析架构。随着大数据时代的到来,海量数据的存储、处理和分析变得至关重要。Java作为一门广泛使用的编程语言,在大数据领域有着广泛的应用。本文将介绍Java在大数据处理和分析中的关键技术和架构设计。 大数据处理与

段,页,段页,三种内存(RAM)管理机制分析

段,页,段页         是为实现虚拟内存而产生的技术。直接使用物理内存弊端:地址空间不隔离,内存使用效率低。 段 段:就是按照二进制文件的格式,在内存给进程分段(包括堆栈、数据段、代码段)。通过段寄存器中的段表来进行虚拟地址和物理地址的转换。 段实现的虚拟地址 = 段号+offset 物理地址:被分为很多个有编号的段,每个进程的虚拟地址都有段号,这样可以实现虚实地址之间的转换。其实所谓的地

mediasoup 源码分析 (八)分析PlainTransport

mediasoup 源码分析 (六)分析PlainTransport 一、接收裸RTP流二、mediasoup 中udp建立过程 tips 一、接收裸RTP流 PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本,具体地址为:mediasoup-demo/broadcaste

Java并发编程—阻塞队列源码分析

在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了D

线程池ThreadPoolExecutor类源码分析

Java并发编程:线程池的使用   在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。   那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?

ConcurrentHashMap之源码分析

集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅