Polling agent
central agent和compute agent分别运行在control和compute机器上,通过定期调用其他服务的api来完成数据采集。二者的区别只是所负责的数据来源。统称为polling agent。
polling agent的功能用一句话概括就是,周期性的向其他服务主动拉取需要的数据,并将数据发送到消息队列。
这时候,站在设计者的角度,我们就要考虑以下几个问题:
1.怎么执行拉取
2、向哪些服务拉取数据
3、对于某个服务收集哪些数据以及如何收集
notification agent
notification用一句话概括功能就是监听消息队列啥歌的其他openstack组件产生的通知数据,加工处理后将数据发送出来。主要完成下面几件事:
1、监听消息队列,收集数据
2、对原始数据进行加工
3、将处理后的数据发送出去
notification以pipeline的形式完成上述工作,更详细的解释就是:
(1)采用yaml格式的pipeline文件定义了每一个消息队列上的通知(notification)从手机到处理再到发送的每一步行为
(2)每一步的行为中通过一定的标识关联特定的处理插件
(3)针对每一个消息会按照pipeline的定义流过合适的插件,每个插件的输出是下一步插件的输入,就像工业生产中的流水线一样
上述行为都以插件的形式存在,主要有以下几种插件:
notification插件:监听消息队列上的某种通知数据
transformer插件:将获得的通知数据,按pipeline定义做某种转化处理,这些处理可能聚合,可能是形式转化
publisher插件:将transformer处理后的数据发送到pipeline定义的地方
这些插件按对应的namespace定义在setup.cfg配置文件中,并通过stevedore在运行时动态加载。
代码分析:
首先在setup.cfg中找到notification的入口函数
然后进到main函数开始分析,prepare_service做了一些初始化的工作,比如初始化日志,加载配置文件登登。
下面几句配置并启动了notification.NotificationService。
然后pipeline.setup_pipeline()加载了pipelime以及tranformer,publisher相关插件加载
_configure_main_queue_listenners()加载了notification插件并注册请了消息队列上的listener