蓝鲸6.1 CMDB 事件推送的开源替代方案

这篇具有很好参考价值的文章主要介绍了蓝鲸6.1 CMDB 事件推送的开源替代方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文来自腾讯蓝鲸智云社区用户:木讷大叔爱运维

背景

在蓝鲸社区“社区问答”帖子中发现这么一个需求:

蓝鲸6.1 CMDB 事件推送的开源替代方案,开源,数据库,mysql,运维

究其原因,我在《不是CMDB筑高墙,运维需要一定的开发能力!》一文中已经介绍,在此我再简单重复下:

  • 蓝鲸5.1 自带“事件推送”功能,当配置信息发生变化的时候,实时通知到关联的系统中;
  • 蓝鲸6.1 不再提供“事件推送”功能,而是由“监听资源变化事件”的一个 CMDB API 实现,需要我们自行查询;

CMDB 版本的迭代,或许说明老版本的“事件推送”已经不符合蓝鲸的设计理念,作为此功能的对接使用者感同深受:

  • 事件推送功能全面性,基本覆盖了CMDB全场景的信息变化;
  • 事件推送更类似一个图形化的API,通过界面就让开发者知道该如何使用;
  • “简单的背后的逻辑复杂化”,这是在对接事件推送接口的第一感受;
  • 由于功能的全面性,意味着数据格式的多样性,对接过程你懂得;

通过对事件推送功能对接过程的回顾以及对替代服务resource watch的使用对比,就非常理解蓝鲸社区推陈出新的做法了!

需求

既然是小伙伴们“插眼关注”的问题,与其等待答案,不如我们自己去寻找答案!

API分析

该 watch 功能的主要特性包括:

  • 在有限的时间内(目前为 3 小时,可能会调整,请勿依赖此时间)为用户提供高可用的数据变更 watch 服务。
  • 在有限时间内,用户可以根据自己上一次事件的 cursor(游标)进行事件回溯或者追数据,适用于异常数据回溯,或者系统变更进行数据补录。
  • 支持根据时间点进行变更数据回溯,支持根据游标进行变更数据回溯,支持从当前时间点进行数据变更 watch。
  • 支持根据事件类型进行 watch 的能力,包括增、删、改。事件中包含全量的数据。
  • 支持主机与主机关系数据变化的事件 watch 能力。
  • 采用短长链的设计,当用户通过游标进行事件 watch 时,如果没有事件,则会保持会话连接,在 20s 内有事件变更则直接直接将事件推回。避免用户不断请求,同时保证用户能及时的拿到变更的数据。
  • 支持批量事件 watch 能力,提升系统吞吐能力。
  • 支持定制关注的事件数据字段,满足用户轻量级的 watch 需求。

链接:https://bk.tencent.com/docs/document/6.1/190/14399

事先先行

对接CMDB属于事件驱动,因此事件先行,先来分析通过API都能获取哪些事件:

  • host 代表主机详情事件
  • host_relation 代表主机的关系事件(主要使用)
  • biz 代表业务详情事件
  • set 代表集群详情事件
  • module 代表模块详情事件
  • process 代表进程详情事件
  • object_instance 代表通用模型实例事件
  • mainline_instance 代表主线模型实例事件
  • biz_set 代表业务集事件
  • biz_set_relation 代表业务集和业务的关系事件

以上事件未必都能用到,我们只要按需获取即可,这也体现了watch服务的灵活性!

动作其次

每类事件都有其相应的动作:

  • create 创建
  • delete 删除
  • update 更新

我们的工作重点就是从事件中将增、删、改的动作分离出来,对下游系统进行事件回放,从而保证数据同步。

时间/事件回溯

虽然时间回溯最长间隔为3小时,我们还是希望对不同粒度的事件进行区分,原则如下:

  • host_relation 主机关系事件,实时生效;
  • module 模块事件,实时生效;
  • set 集群事件、biz 业务事件等,可适当在不同时间间隔生效;

时间回溯保证我们能查到历史数据,而事件回溯的cursor游标能够保证我们避免重复的事件。
因此我们对于时间/事件回溯要有一个清醒的理解!

功能需求

通过API的分析,其实我们的功能需求也就同时梳理了出来:

  • 核心目标:CMDB驱动资产同步,按业务/集群/模块/主机的结构与下游系统实现关系对应;
  • 事件驱动:
    1)biz 业务名同步;
    2)set 集群名同步;
    3)module 模块名同步;
    4)host_relation 主机关系同步;
    5)其他名称或关系同步;

开发框架

根据”监听资源变化事件“接口的特性,我梳理了下开发过程的几个要点:

  • 对于事件的获取、与下游系统同步,这是两个步骤。不需要等待同步完成再去获取事件,要进行解耦
    1)事件获取,异步执行;
    2)与下游系统对接,同步执行;
  • 不同事件变化的频繁度不同,我们要按需获取,因此就需要一个调度器,可自定义调度计划;

通过以上分析,我们初步确认了python + celery + rabbitmq的几个组件:

  • celery 用于对不同时间回溯间隔的调度;
  • rabbitmq 通过交换机、路由、队列分别保存celery调度的任务;
  • python对不同事件结果封装统一的数据与其他运维系统进行资产同步;

其具体的实现流程如下图:
蓝鲸6.1 CMDB 事件推送的开源替代方案,开源,数据库,mysql,运维

具体部署

依赖组件

1.Python 3.9
2.Celery
3.Rabbitmq 保存celery调度任务

安装

1.python环境

conda create -n resource-watch python=3.9
source activate resource-watch
pip install  requests celery pyamqp flower kombu

2.rabbitmq环境

# 安装rabbitmq
yum install rabbitmq-server
systemctl start rabbitmq-server
systemctl enable rabbitmq-server

# 开启 RabbitMQ 的web管理界面
rabbitmq-plugins enable rabbitmq_management
# 创建admin用户并授权
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p '/' admin '.' '.' '.*'
rabbitmqctl list_users
rabbitmqctl list_user_permissions admin
systemctl restart rabbitmq-server

# 访问rabbitmq管理界面
http://ip:15672

1.路由队列

针对不同事件,使用不同的队列

交换机 路由 队列 备注
cmdb cmdb.host_relation cmdb.host_relation 主机关联关系事件
cmdb cmdb.module cmdb.module 模块事件
cmdb cmdb.set cmdb.set 集群事件
cmdb cmdb.biz cmdb.biz 业务事件

2.运行

cd /app/resource-watch
# 启动beat,将定时任务发送至worker
celery -A celery_cmdb beat -l INFO --detach

# 启动worker,异步执行任务,绑定相应事件队列
celery -A celery_cmdb worker -Q cmdb.host_relation -l INFO -c 1 -D
celery -A celery_cmdb worker -Q cmdb.module -l INFO -c 1 -D
celery -A celery_cmdb worker -Q cmdb.set -l INFO -c 1 -D
celery -A celery_cmdb worker -Q cmdb.biz -l INFO -c 1 -D

# 启动flower,任务查看

总结

整个开发过程比较重要的是“对不同事件结果数据的封装”,除了部分开发经验外,就是要不断的试错,这样才能保证我们完成对最终的数据格式的解析,从而更好的匹配下游运维子系统!文章来源地址https://www.toymoban.com/news/detail-851319.html

到了这里,关于蓝鲸6.1 CMDB 事件推送的开源替代方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 企业级PaaS低代码快开平台源码,基于 Salesforce Platform 的开源替代方案

    PaaS低代码快开平台是一种快速开发应用系统的工具,用户通过少量代码甚至不写代码就可以快速构建出各种应用系统。 随着信息化技术的发展,企业对信息化开发的需求正在逐渐改变,传统的定制开发已经无法满足企业需求。低代码开发平台,让开发者可以基于平台快速搭

    2024年02月15日
    浏览(50)
  • NLP:palm-rlhf-pytorch(一种类ChatGPT的开源替代方案PaLM+RLHF)的简介、安装、使用方法之详细攻略

    NLP:palm-rlhf-pytorch(一种类ChatGPT的开源替代方案PaLM+RLHF)的简介、安装、使用方法之详细攻略 目录 palm-rlhf-pytorch(一种类ChatGPT的开源替代方案PaLM+RLHF)的简介 palm-rlhf-pytorc的安装 palm-rlhf-pytorc的使用方法 1、基础用法       palm-rlhf-pytorch是基于PaLM架构的RLHF(人类反馈强化学习)的实现

    2024年02月06日
    浏览(44)
  • LAION-AI 的新开源 ChatGPT 替代方案:个高端消费类 GPU 上运行的大型语言模型Open Assistant 评测

    语言模型近年来取得了长足的进步,其中一个新发布的模型是 OpenAssistant 和 ChatGPT,无需介绍。为了比较这些模型的功能,我们在两个平台上进行了一系列测试,以了解它们在不同类别中的表现。 今天(2023 年 4 月 12 日) Github上的热门话题是Open Assistant(简称 OA),它是由

    2023年04月23日
    浏览(39)
  • TI EDI 项目数据库方案开源介绍

    TI EDI 工作流简介 TI EDI到SQL Server示例流具有预配置的端口,用于从TI的EDI集成规范转换以下交易集: 850 采购订单,企业 - TI 855 采购订单确认,TI - 企业 860 采购订单变更,企业 - TI 865 采购订单变更确认,TI - 企业 856 发货通知,TI - 企业 810 发票,TI - 企业 820 付款单,企业 - TI 本文示例

    2024年02月08日
    浏览(32)
  • Tesla EDI 项目数据库方案开源介绍

    近期为了帮助广大用户更好地使用 EDI 系统,我们根据以往的项目实施经验,将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后,只需要下载我们整理好的示例代码,并放置在知行之桥指定的工作区中,即可开始使用。 今天的文章主要为大家介绍 Tesla EDI 项目,了解

    2024年02月11日
    浏览(37)
  • BBA EDI 项目数据库方案开源介绍

    近期为了帮助广大用户更好地使用 EDI 系统,我们根据以往的项目实施经验,将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后,只需要下载我们整理好的示例代码,并放置在知行之桥指定的工作区中,即可开始使用。 今天的文章主要为大家介绍 BBA EDI 项目,了解

    2024年02月08日
    浏览(33)
  • 20分钟了解物联网开源数据库部署解决方案

    本文针对物联网数据存储提供解决方案的思路,项目特点:结构化数据、传感器节点多(100)、传感器类型多(30)、采样频率高(1HZ),在此背景下,一般的关系型数据库已经不能够支撑数据存储,基于免费开源的软件完成数据存储工作,提高数据的读写能力。 1)多源异构

    2023年04月11日
    浏览(33)
  • Lowe‘s EDI 项目数据库方案开源介绍

    近期为了帮助广大用户更好地使用 EDI 系统,我们根据以往的项目实施经验,将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后,只需要下载我们整理好的示例代码,并放置在知行之桥指定的工作区中,即可开始使用。 今天的文章主要为大家介绍 LOWE\\\'S EDI 项目,了

    2024年02月09日
    浏览(33)
  • 支持华为GaussDB数据库的免费开源ERP:人力资源管理解决方案概述

    开源智造所推出的Odoo SuperPeople数字化解决方案将HR和薪资数据与财务、项目规划、预算和采购流程连接起来,消除了多套系统给企业带来的信息孤岛问题。 ——复星集团 人力资源中心 高经理 开源智造·Odoo SuperPeople 人力资源管理解决方案提供了一套领先同行且功能应用完整

    2024年01月16日
    浏览(93)
  • 6.1 SpringBoot解决跨域,我推荐这2种超实用方案

    在文章【2-2】中,我和你介绍了支持跨域的最简单方法,即在Controller上增加@CrossOrigin注解。通过这个方法࿰

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包