如何利用开源框架实现运维编排

在日常的工作中通常会组合几个系统的相关功能共同完成某个业务场景,这时候通常在一般的微服务中就需要使用分布式事务来解决,或者通过本文说的编排的方式来解决,本文算是这个系列的入门篇,主要是介绍下笔者在实际工作中的尝试,后续会持续更新一些内部的原理与更好玩的生产实践1.背景在接手的运维平台中之前的设计是在一个大的controller将完成某个业务场景的代码全部写在一起,然后中间为了兼容各种之前的平台和场景的问题,充斥着大量的if else以及硬编码,导致出了问题需要就要人为介入排查,扩展性、健壮性几乎为零, 为了更好的理解第二部分我们的尝试,这里先给大家介绍几个概念1.1 运维中的任务编排在传统的运维开发中,任务编排通常是一个很常见的系统,在k8s之前的运维系统中,通常是基于master-worker架构实现对应的任务的编排,也有很多的开源产品,比如stackstorm、tower、jeankins等

同一些业务上使用的框架并无本质区别,我们可以通过写插件来实现对应的接口,就可以丢给系统取跑任务了,任务过程中的数据、状态都由对应的插件自身维护,系统只负责任务的调度,而不负责状态和数据的管理1.2 运维中的状态面向终态是大佬们最近这几年引领的新的运维模型,通过描述最终状态,系统根据当前状态去决策采取的动作然后等待对应的反馈结果,再次进行决策从而达到正向反馈环,直到目标状态。

但其实日常的工作中很多业务逻辑通常都是有状态的。比如在扩容场景中,如果没有知道当前的Pod或者Server的状态,本质上你也没办法决策接下来该做啥操作。在一个长的worfklow里面如果你不知道任务的状态,则就无法知道当前可以在那个步骤进行重试1.3 智能决策的愿景记得在之前公司的时候大家还一起听大佬分享的AIOPS,根据人工智能和专家经验在故障发生时可以自动进行决策,达到快速止损的目标,什么知识图谱、根因分析、智能机器人想想就可怕。不过作为一个程序员,我感觉我写的程序如果能比我先发现问题,我都会怀疑是不是Bug

相比智能运维笔者更看好可落地的基于事件驱动的运维,通过感知对应的事件根据专家经验,将对应事件的处理机制流程化自动化,无论是从可控性、稳定性、确定性上都可以得到保障2.解决方案其实也谈不上方案,主要是落地的一点思考,其实没有调研太长时间,因为时间上并不允许。所以就粗暴的选型后,开始根据我们的业务场景进行系统设计了,这里就先介绍下选型和架构2.1 选型根据运维场景分析出来,我们需要的是一个有状态的、可编程的、支持workflow、带容错、无限扩展的分布式任务编排框架。当前云原生里面的任务编排貌似是一个冷门方向,于是笔者就看了下业务上解决分布式事务场景的框架,最终我们选定uber的cadence框架来实现,不过Candance的作者对DSL貌似很反感,并没有实现默认的DSL编排功能。

为什么选型没有按照常规的选择一些比如airflow之类的,主要原因其实跟笔者环境有关。公司当前的基础服务大多数要么是基于开源的改造,要么就是自研。所以对开源的默认集成的对笔者来说其实意义不大,反正都得自己写Provider。其二笔者现在的平台有Java、Go两种语言,为了方便集成,一定要选择一个夸语言的。2.2 系统架构

基于开源的candance我们直接设计了我们的上层业务层v0.1版本,为了实现上面提到的两大核心功能:编排和决策,我们设计了6个业务模块,其功能如下:模块说明原子组件封装各种原子任务,提供workflow和dsl做任务编排DSL编排系统提供基础的workflow决策,并且支持DSL编排事件用于监听或者接受外部系统传递的事件触发对应的决策模块决策实现基础的业务分级、机器分批等决策功能,决策会触发对应的workflow或者原子组件服务目录通过服务目录对外提供原子操作和worfklow使用管控模块管控模块主要是对决策的结果进行管理,避免多个决策模块进行相同作业的下发,实现统一的控制可以看出candance帮我们解决很分布式底层的很多问题,只需要构建上层业务模块就可以了,等业务功能写完,抽时间看看对应的实现,到时候再分享给大家2.3 工作流程

系统的运行分为两个大的阶段:编排期与运行时编排期1.平台研发负责将各种平台功能分装成原子组件接入到系统中2.运维专家根据业务场景,组合下层的原子任务,并构建对应的DSL流程,对应的worfklow作为决策分支供决策模块使用,同时设置对应的互斥策略运行时1.当对应的运维对象发生状态变更时,则会产生对应的事件2.决策模块接收到事件之后,根据事件类型和决策分支进行决策,生成决策结果3.然后调用管控模块,确认决策结果是否可以下发到生产环境4.管控模块根据当前的运行中的工作任务确定是否可以进行对应的决策5.下发workflow给Candance,然后由candance进行workflow和原子任务的编排6.原子操作最终红会触发运维对象的状态变更,然后再进行对应的操作,直到达到目标状态3.心得先写到这吧,最近还是比较忙,周末在家看了一天service catalog的代码,晚上想想还是得总结下,因为好久没写文章了,想了好几个小时,也没咋写,感觉乱乱的。等后面代码写完了在给大家分享下里面的一些代码级别的设计。明天再给大家分享下service manager里面好玩的东西。大佬们帮我分享分享,要吃土了。。。云原生学习笔记地址:  https://www.yuque.com/baxiaoshi/tyado3微信号:baxiaoshi2020 公共号: 图解源码

(0)

相关推荐

  • 腾讯蓝鲸开源项目与云计算运维平台框架标准发布 – 运维派

    一.蓝鲸智云及云计算运维平台参考框架标准 云计算运维平台参考框架标准是基于腾讯的蓝鲸智云的开源项目总结归纳的,这个标准是一个全面的云计算运维平台系统的框架标准,规定了一个面向云计算运维环境的运维平台功 ...

  • Nextflow 快速搭建生信分析流程(三)- 实例讲解

    在前面的两节内容中我们介绍了Nextflow的安装和流程监控平台Nextflow Tower, 大家如果对软件安装还有疑问可以查阅平台中前面两节的内容.这里我们以nextflow的一个具体运行脚本来进 ...

  • 《责任病毒:如何分派任务和承担责任》书摘

    运营的小事,用心听运营 为什么很多领导者在工作中殚精竭虑,却依然无法避免失败? 为什么有些高级管理人员一会儿是积极进取的领导者,一会儿却又变成消极的追随者? 为什么当管理者努力促成合作的时候,1加1却 ...

  • 自动驾驶岗位入门技术及前景

    来源 / 智车科技 现如今,自动驾驶已经成为了社会中的热门话题,随着小米的入局,越来越多的大厂意识到了自动驾驶技术未来的广阔前景,都纷纷进入行业中来.行业越做越大当然是好事,意味着就业的机会与可能也越 ...

  • 30种高品质思维模型:1

    ● 思维模型是蓝图,我们可以在不同背景下加以运用,以便理解这个世界,正确诠释信息,了解事情发生的背景.思维模型给予我们可预测的结果.食谱是最基本形式的思维模型,每一种食材都有其作用.时间和位置.然而, ...

  • 微服务架构设计实践系列之九:应用架构

    微服务架构设计实践  目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 ...

  • 付诸实施——将人工智能融入算法战

    ●作者/考特尼·克罗斯比(Courtney Crosby)博士 ●译者/昀峰 ●校对/Nangwa ●取材/军事评论2020年7 - 8月刊(美) 1 2 3 冲突的胜负取决于军事抵消,或者是防御部队 ...

  • 赚钱靠的是能量不是能力。——村西边老王

    能量比能力重要. 很多人以为赚钱靠的是能力,尤其是那些大学生和打工的人,因为他们的思维方式是--我考上985了,就是能力强,我兢兢业业工作了,完成了KPI,上司表扬我了,我就是能力强,我以后就可以出任 ...

  • ITSS体系框架及智能运维发展

    公众号回复:干货,领取价值58元/套IT管理体系文档 公众号回复:ITIL教材,领取最新ITIL4中文教材 正文 完整高清版本获取方式: 官方网站积分下载链接 https://www.itilzj.c ...

  • 企业基于开源自动化运维工具的运维实践

    [作者]聂奎甲,从事IT工作十余年,主要参与项目规划实施,主要参与政府.电力.国土等行业的系统集成项目,包括主机存储.Oracle数据库,精通计算机网络与安全. 一.运维的发展趋势 随着制造业的信息化 ...

  • 部署开源夜莺运维监控平台V3版本 – 运维派

    官方地址 https://github.com/didi/nightingale Go 夜莺运维平台是滴滴开源的一个运维平台有着滴滴公司最佳实践 夜莺拆成了四个子系统,分别是: 用户资源中心(RDB) ...

  • 运维必知必备!73页计算机基础知识,新手小白也能轻松读懂

    基础不牢,地动山摇! 新手在学习运维亦或是开发的时候,都要注重基础知识的积累,不能只想着学习实战知识,这样到中后期,容易造成对"高级知识点"的一知半解,以至于知其然,却不知其所以然 ...

  • Linux命令route显示或管理路由表-linux运维学习

    route命令可以显示或管理Linux系统的路由表,route命令设置的路由主要是静态路由.掌握Linux命令对于Linux运维来说是必备技能,对于Linux运维工作起着重要的作用.那么route命令 ...

  • ifconfig配置或显示网络接口信息-Linux运维技能

    ifconfig命令用于配置网卡IP地址等网络参数或显示当前网络的接口状态.ifconfig命令在配置网卡信息时必须以root用户的身份来执行.ifconfig命令是Linux运维日常工作中常用到的核 ...

  • 如何利用IMPACT框架帮你解决业务难题?

    根据<2020年全球人才趋势>报告的数据,四分之三的人才专业人士表示,在未来五年中,人员分析将是其公司的首要任务.尽管如此,许多公司尚未做好准备.超过一半(55%)的受访者承认,他们仍然需 ...

  • Linux运维主要做什么?岗位内容!

    大家都知道Linux是免费开源的操作系统,具有非常重要的作用,现在应用Linux系统的人越来越多了,那么Linux运维主要干什么?Linux在行业内前景怎么样?小编为大家详细的介绍一下吧. Linux ...