ELVES

自动化运维开发平台
授权协议 Apache
开发语言 Java Google Go
所属分类 管理和监控、 DevOps/运维工具
软件类型 开源软件
地区 国产
投 递 者 伍胡媚
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

介绍

Elves为一套 开源自动化运维开发平台(IT Automatic Develop Platform),面向开发,注重以编程实现运维自动化,致力于为运维研发人员提供便捷的运维自动化业务编程实现环境, Elves自身不提供业务性功能,运维开发人员可根据自身的业务进行应用(APP)的开发来实现相应业务的自动化管理。

特性

灵活的业务(App)编程设计:Elves主要面向运维开发人员,以编程方式实现某业务的自动化操作,Elves与用户间交互以RESTful方式进行,与Apps间交互以进程调用方式进行,理论上支持所有的编程语言,目前Elves提供Python与C#版开发SDK

任务模式:Elves提供及时任务(同步),队列任务(异步,支持依赖),计划任务(异步) 三种任务调度模式,且允许开发者直接将App-worker的执行结果直接反馈至App-processor,以构建C/S架构服务

高可用与高性能:在Elves的设计中各组件为可拔插形式,且极大程度的降低各组件间依赖关系,几乎所有组件均可以独立使用与集群部署

数据交互传输:Elves-Center间各组件的数据传输使用RABBITMQ以队列形式进行交互,Elves-Center与Elves-Agent间数据传输使用Thrift进行交互,开发人员操作Elves(App)使用RESTful方式交互

开发语言与结构:Elves自身以C/S架构设计,Elves-Center(SERVER)由JAVA实现,Elves-Agent(CLIENT)由Golang实现

定位

可能看完以上的介绍甚至看完以下的架构还会有些人有疑问,ELVES到底能做什么,它在运维自动化中扮演什么样的角色,这里来简单介绍一下,了解完后结合[ELVES实践案例]能对ELVES有一个更清晰的认识。

站在运维自动化系统实现角度,运维自动化系统正走在向平台化,更优质的用户体验提升的道路上,往往此类产品均为WEB端或桌面的形式提供运维使用, 这类运维自动化系统若需要与业务操作系统OS或与操作系统上的服务进行交互的时候往往需要自己定义通讯以及调用的实现方式。通过ELVES后,此类运维自动化系统将可以全部面向统一的EVELS API接口,ELVES API的背后为运维所开发的各种业务的实现脚本。

站点运维团队与开发(前端)团队合作角度,运维团队更懂系统,更懂业务并但产品感不强,前端等技能欠缺,开发(前端)团队产品感强,有较好的产品实现技能如前端JS,CCS等,但其不熟悉运维业务,更不了解具体业务实现。通过ELVES,开发(前端)团队将面向面向的ELVES API接口,运维团队将更加专注的面向脚本,面向具体功能的

架构

Elves逻辑上以三大核心组成,分别为"Elves-Center","Elves-Agent","Elves-Apps"

Elves-Apps

Apps的便捷开发为整个系统的核心关注点,Elves-App分为两部分组成,分别为worker与processor,其中Worker运行在Agent端,简单点说如果想实现一个C/S架构的App则需要实现Worker与Processor,若只需要一个C架构的App则仅需要实现Worker。在Worker的指令调用中,我们采用进程调用方式,为进一步简化开发人员的工作,我们在SDK内置了Agent入口,入口接收到指令后,将指令转换为方法以及参数并采用动态加载的方式调用App并将APP执行结构格式化后反馈至Elves。

以Python为例,开发人员只需要确定方法名、参数(Dictionary)实现自身逻辑即可。

App "apptest" Worker 实现

  class apptest():
      def helloword(self,param):
          flag = "false"
          try:
              result = param["my"]
              flag = "true"
          except Exception,e:
        result = e
    return flag,result

如下用户只需要告知Elves,我要执行apptest的helloword方法,参数为{"my":"toryzen"}即可得到toryzen的反馈结构

APP的执行后需要返回两个执行结构,分别为flag与result,均为string类型,flag为枚举:true,false用于确定app的执行状态,result为执行反馈结果。

若想获取反馈结果可以通过Elves API或者实现一个Processor直接由Agent端主动反馈,Processor的实现也非常简单,可以在后续的使用手册中查看。(调试HelloWork示例)

Elves-Center

Elves-Center简单点说就是Elves的Server端,我们采用微服务为整个Elves提供高可用的服务,所有组件均注册至Zookeeper检测存活与部分组件集群化部署选举,组件间的数据交互使用RABBITMQ以队列方式进行交互,各组件功能单一且耦合度极低。

Scheduler

任务调度组件:负责发送APP任务至Elves-Agent

Cron

计划任务组件:负责以Elves-Center为起点的计划任务调用组件

Queue

队列任务组件:负责队列任务的调度执行

Heartbeat

心跳组件:负责获取Agent的运行状态,且Elves-agent通过此组件获取其可执行的APP清单

Supervisor

权限控制组件:负责ElvesAPP的管理与各Agent上APP的权限管理,此组件提供WEB化管理

OpenAPI

API:提供HTTP RESTfulAPI方式操作Elves的各项接口

*CMDBProxy

CMDB数据提供代理:为Elves中各组件提供自身CMDB数据信息,便于Elves与自身运维体系的融合

Watcher & Dashbord

Watcher实现对Elves-Center的各组件监控:监听Elves-Center中各组件的运行状态,数据的传输等,便于运维Elves与进行Elves指令审计,Watcher的监听方式以RabbitMQ bind *.*的方式进行,对Elves-Center的业务处理无影响,并将监听结果存储至MangoDB供后续查询。Dashbord为运维Elves的运维人员提供一套方便的WEB化管理界面

Elves-Agent

Elves-agent负责APP的下载与调用,执行结果的反馈与上报,以及当前Elves-Agent运行状态的监控,同时ElvesAgent也提供自身Cron功能、一个Web面板,且为了方便APP的开发,Elves-Agent提供开发者模式,提供简易版API直接供开发交互。

任务模式

在了解任务模式及类型前,我们先来了解一下Elves有哪些实现

  • 以发起方式角度来看:一次APP的执行有两种方式:1、由Elves-Agent端发起,2、由Elves-Center发起;
  • 从任务的执行方式开看有:1、异步执行,2、同步执行;
  • 从APP执行的后续处理来看有:1、处理型,2、非处理型,处理型即APP执行结果将反馈至用户自定义的Processor,非处理型即执行结果不反馈至用户Processor

从上面三个角度出发共组装成了 5种 工作模式,并由归属于不同的任务

  1. AANP Agent端发起,异步执行,非处理型
  2. AAP Agent端发起,异步执行,处理型
  3. CANP Center端发起,异步执行,非处理型
  4. CAP Center端发起,异步执行,处理型
  5. CSNP Center端发起,同步执行,非处理型

任务类型

Elves中共有三种类型的任务,分别为及时任务,队列任务与计划任务,从字面就可以理解其含义。

及时任务

及时任务只支持CSNP模式,用户通过API发送即时任务后将阻塞等待APP执行结果的反馈

队列任务

队列任务支持2种模式,1、CANP模式,2、CAP模式 用户需要使用API先创建队列,添加队列中任务,提交队列后任务开始执行,如需获取执行结果,使用方需要另行发起请求,Elves的队列任务支持任务间的依赖。

计划任务

计划任务支持4种模式,1、AANP模式,2、AAP模式,3、CANP模式,4、CAP模式。其中由Agent端发起的任务Elves-Center无法进行监控与追踪。用户可以根据规则设置有Elves-Center端发起的计划任务

----------------------------------

Community & ELVES-WIKI

https://gy-games.gitbooks.io/elves/

----------------------------------

  • https://linux.cn/article-8719-1.html 到目前为止,你已经偶尔听到了关于 dwarves、调试信息、一种无需解析就可以理解源码方式。今天我们会详细介绍源码级的调试信息,作为本指南后面部分使用它的准备。 系列文章索引 随着后面文章的发布,这些链接会逐渐生效。 准备环境 断点 寄存器和内存 Elves 和 dwarves 源码和信号 源码级逐步执行 源码级断点 调用栈

  • GitHub:https://github.com/elves-project GitBooks:https://gy-games.gitbooks.io/elves/ 部署:  https://www.travis-ci.org/elves-project 转载于:https://blog.51cto.com/linux10000/1946721

  • Dwarves, Elves, Wizards, and Kings Evan Cofsky in nEAl STEpHEnSon’S novEl CryptonomiCon (EoS), Randy Water- house explains his classification system for the different types of people he meets. Dwarves

  • 哥们,好东西一起分享,这是新地址:http://elves.cnblogs.com/ 哥们,好东西一起分享,这是新地址:http://elves.cnblogs.com/ 哥们,好东西一起分享,这是新地址:http://elves.cnblogs.com/

  • #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stdio.h> #include <string.h> #include <map> using namespace std; #pragma warning(disable:4996) #define MAX(a,b) (a

 相关资料
  • 本文向大家介绍浅谈python之自动化运维(Paramiko),包括了浅谈python之自动化运维(Paramiko)的使用技巧和注意事项,需要的朋友参考一下 简介 使用开源的Paramiko,我们就可以用Python代码中通过SSH协议对远程服务器执行操作,不需要手敲ssh命令,从而实现自动化运维。 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko库,实现了SSHv2协议(底

  • 解决两个我认为的痛点: 痛点一:.申请记录没有沉淀,无法追查。机器出问题不好找到负责人,节点维护时必须要抄送全公司。 平台对应的解决方法:        采用用户自主注册的方式来开通账户,用户自行申请虚拟机,在后台审核。用户可以时时看到订单进度及状态。维护时可以只抄送负责人即可,也可以在页面中挂上公告。 痛点二:虚拟机开通过程重复毫无技术含量,初始化麻烦,大批量开通时导致工作量过大,问题率过高。

  • 2023.09.23 20min 纯纯凉面,光速结束 自我介绍 Linux命令列举,如何显示txt文件的指定行数 讲讲部署一个完整服务的流程 MySQL有了解吗,源码安装和包安装有什么优劣势 DNS解析过程 不同地区输入baidu.com得到的ip一样吗为什么(回答不一样,可能会有比如CDN和CNAME的手段,有多个IP。但是面试官说不对??不明觉厉) 手撕算法:二叉树判断是否存在和为某值的路径,

  • 一面2023/9/12(25 mins) 1.自我介绍 2.你如何理解运维岗 3.select、poll、epoll的区别和特点 4.服务端出现大量TIME_WAIT是什么情况 5.进程间通信方式 6.是否了解nginx负载均衡 7.数据库的隔离级别 8.数据库redo log和bin log 9.当发现岗位任务繁琐,与想象中不同怎么办 10.为什么不投递开发岗,而投递运维岗 11.反问 ————

  • 2023.10.11 45min 感觉流程肥肠的标准,流程如下: 自我介绍 k8s项目介绍 k8s有哪些组件,作用 容器和虚拟机的区别,docker的构成组件有哪些,启动一个容器的时候调用过程是什么样 计网八股:TCP握手挥手,seq如何生成,DNS解析过程,同一个域名对应多个IP或者域名是为什么(CNAME),http状态码 Linux命令:动态查看日志,查看负载,查找某个日期范围的文件,查找以

  • 2023.10.24 25min 不得不说,360的面试体验确实是最棒的没有之一 自我介绍 讲讲在学习实践中最有成就感的一件事 未来职业规划 python的*args和**kwargs是什么(没答上,按cpp的答了,然后面试官给我解释和科普) python有哪些内置类型,有哪些常见标准库 全局变量和局部变量区别,堆栈的区别和访问顺序 如果要给一个外行讲讲哈希map的原理,怎么讲 哈希冲突怎么解决