阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

StackStorm 框架的浅析 (一)

  • 2019-11-15
  • 本文字数:2232 字

    阅读完需:约 7 分钟

StackStorm框架的浅析(一)

故障自愈作为运维领域的热门话题之一,各个公司都会投入大量的人力来开发不同的组件,如何正确、有序的调用不同组件以及避免相同功能组件的开发,是一件亟待解决的问题。StackStrom 是一个基于事件流并自动执行的系统框架,基于此,可以让外部系统产生的事件,有序的、可编排的集合到一起,作为一个完整的事件流去执行,从而解决一些高频次的运维难题。

1 StackStorm 简介

StackStorm 是一个将服务和工具集成在一起的自动化平台,它将现有的基础架构和应用程序环境联系在一起,因此使用者可以更轻松的自动化调用,把注意力集中在需要执行的操作上。



stackstorm 中包含 sensor,rule,action,workflow 等组件,环境内的数据都统一的存在 MongoDB 中,组件之间消息的通信是利用 RabbitMQ 实现的。将各个组件组合在一起并加之依赖文件以及配置文件就形成了一个包,st2 包的结构如下所示:



由包的结构可以看出,每个组件各自形成一个独立的目录,每个组件由一个配置文件以及一个执行文件共同构成。各个组件的具体作用如下:


  • Sensors: 监听和接收外部系统的事件,当某个外部事件出现,trigger 被触发执行,现在只支持 py 文件;

  • Trigger: 是外部事件的具体表现,简单理解为就是事件触发器,衔接 sensor 和 rule,由用户自行定义;

  • Rule: 映射着所有 trigger 到 action 的规则,记录着 criteria 匹配的规则,映射 trigger 实例到 action 的 input;

  • Action: 是 st2 的具体执行动作和步骤,可以使用 py 脚本、执行指定命令;

  • Workflow: 多个 action 的集合,这些 action 被有序的、按照预先定义好的规则先后执行,现在支持 Orquesta 和 Mistral 两种格式;


各个组件之间实际的交互作用如下图所示:


2 st2 中的 packs

packs 是 stackstorm 中最小的部署单元,Pack 中包含 Action,Workflow,Rule 和 Sensor 等等的配置文件,StackStorm 通过 Pack 进行部署和归类。

packs 的查询

通过命令 st2 pack list 可以查询已经安装在环境中的 packs,效果如下:


packs 的安装

在 StackStorm Exchange 中存在很多可用的包,它是 stackstorm 的一个社区,你可以从上面下载你需要的包,当然你也可以自行编写自己的包上传到社区中。stackstorm 的 packs 安装后会将 packs 的文件下载到/opt/stackstorm/packs/<your_pack>目录下。st2 的 packs 的安装方式有很多种。


# 安装某个包的具体的commitst2 pack install cloudflare=776b9a4# 安装某个包的某个具体版本st2 pack install cloudflare=0.1.0# 利用url安装某个包st2 pack install https://github.com/emedvedev/chatops_tutorial=testing
复制代码


下面重点说一下安装自己编写的包,也就是如何安装本地包。


首先自己编写的包必须传到 git 上才能成功安装 其次利用命令 st2 pack install file:/// + 文件目录可以安装本地包,安装效果如下:



可以看到 packs 的安装需要 4 个步骤,第一是下载 packs,事实上虽然我们称之为从本地安装 packs,其实 st2 还是会从 packs 所在的 git 上将代码拉下来,因此这就是为什么我刚刚说自己编写的包必须传到 git 上才能成功安装的原因了;第二步是预览检查包是否有明显的错误;第三步是安装包的依赖环境,st2 对于每个包都会设定一个运行环境,packs 所需要的依赖可以写在 requirements.txt 中,并安装包的过程中一并安装;第四步是注册包,实际上是将包中的各个组件的信息,包中的配置信息以及参数写入 MongoDB 中。

packs 的卸载

st2 中 packs 的卸载十分容易,通过命令 st2 pack remove + < packname>就可以完成,卸载的效果如下:



可以看出 packs 的卸载主要由两个步骤,第一将 packs 的注册信息删除;第二步删掉 packs 的文件;实际上 packs 的安装和卸载是运行了两个相应的 workflow,具体的将在后续专题中讨论。

packs 的注册

是不是安装上 packs 以后就可以直接运行 packs 了呢??当然不是啦(想得美!)还需要手动注册一下 packs 才能执行。具体的操作如下:


首先将.yaml 文件复制到/opt/stackstorm/configs/目录下,注意在安装 packs 前该文件不能存在于/opt/stackstorm/configs/目录下,否则会导致安装失败。


设置该文件的权限为 775。


执行命令 sudo st2ctl reload --register-configs 就可以运行 packs 了。

packs 的编写

这里面我们主要讲解一下 packs 中配置文件的编写方式,对于各个模块的编写规范,将在后续讨论。


packs 除了各个模块外还有 4 个文件需要编写,分别是:requirements.txt,pack.yaml,packname.yaml 以及 config.schema.yaml


requirements.txt


requirements.txt 是依赖文件,在其中记录的是 packs 需要运行的环境中的依赖包,包括包的版本


pack.yaml


pack.yaml 中定义了 pack 的一些基础信息,包括 packname,版本,描述以及作者信息等,具体效果如下:



packname.yaml


对于 packname.yaml 请注意,该文件的名字并不是”packname.yaml“,而是在 pack.yaml 中定义的包的名字作为”packname“,请大家不要误解。这个文件中主要记录着 packs 的一些默认参数,参数可以是整数,小数,字典,数组以及字符串,具体的形式如下:



config.schema.yaml


config.schema.yaml 是默认参数的具体信息,包括参数名称,类型以及描述等,参数类型包括 string,integer,number,list,object,具体形式如下:



其中 required 字段表示该参数是否是必要参数,非必要参数将不会存入 MongoDB 中,secrect 字段表示该参数是否可见的,若为 true 则用户不可见。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/VD026IukUNrL5olEFkCtFg


2019-11-15 10:572059

评论

发布
暂无评论
发现更多内容

危机过后,「表格文档协同」需要具备什么能力?

葡萄城技术团队

大前端 开发者工具 Excel

NIO 看破也说破(三)—— 不同的IO模型

小眼睛聊技术

Java 学习 深度思考 程序员 架构

Git clone过慢问题

JDoe

git

你的团队属于部落的哪个阶段?

Yanel 说敏捷产品

敏捷 敏捷开发 敏捷精髓

如何让团队产生“多米诺骨牌”效应?

Yanel 说敏捷产品

项目管理 敏捷 敏捷开发 敏捷精髓

医院陪护5天的四点感受

赵新龙

身心健康 医院

Try-Catch包裹的代码异常后,竟然导致了产线事务回滚!

牧码哥

Java spring 事务

回"疫"录(12):一“罩”难求

小天同学

疫情 回忆录 现实纪录 纪实

ITerm2 + Oh my ZSH + Powerlevel10k

JDoe

配置

也谈程序员的核心竞争力

我心依然

学习 程序员 竞争力 独立思考 清晰表达

追光逐影:读《我们这一代》

北风

目光聚集之处,金钱必将追随

Tom

学习 个人成长 思考 读书

接口限流算法有哪些,看完这篇又能和面试官互扯了~

不才陈某

Java 分布式 后端

Python程序性能分析和火焰图

ElvinYang

良好的工作习惯——及时存档、备份

小匚

工作效率

错过了初恋,别错过WebFlux

稻草鸟人

stream Spring5 WebFlux Reactive

带你吃透原型设计

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

【解析+示例】2种方法,通过SpreadJS在前端实现甘特图

葡萄城技术团队

大前端 甘特图 SpreadJS 表格控件

DDD 实践手册(6. Bounded Context - 限界上下文)

Joshua

企业架构 设计模式 领域驱动设计 DDD 架构模式

功不唐捐

Janenesome

读书笔记 思考 坚持

每个人都应该知道的性能参数

ElvinYang

用Go替代Python在生产环境中进行数据分析

良少

人工智能 大数据 数据分析 pandas Go 语言

你真的懂"看板文化"么?

Yanel 说敏捷产品

敏捷 敏捷开发 敏捷精髓

工具集系列|值得收藏的几个免费在线学习国外网站

一尘观世界

学习 工具 网站 提升

Linux学习-2020.05.11

Flychen

ShedLock:一个轻量级的定时任务协调组件

kk

定时任务 shedlock

如何高效阅读

ElvinYang

从技术层面理解对于区块链技术的10.24集体学习讲话

Tux Hu

区块链 智能合约 以太坊 加密货币 去中心化网络

游戏夜读 | 如何制作互动剧?

game1night

Java 为什么需要包装类

Rayjun

Java

认识数据产品经理(二 数据产品经理的稀缺性)

马踏飞机747

大数据 互联网 数据分析 产品经理

StackStorm框架的浅析(一)_服务革新_刘毅_InfoQ精选文章