一文详解如何在 ChengYing 中通过产品线部署一键提升效率
在之前的内容当中,我们为大家介绍过 ChengYing的安装原理、产品包制作等内容,本篇就延续之前的内容,和大家展开聊聊 ChengYing 产品线部署相关的设计。帮助对「一站式全自动化全生命周期大数据平台运维管家 ChengYing」感兴趣的开发者更好地了解和使用 ChengYing。
产品线部署简介
首先对 ChengYing 的产品线部署进行一个“自我介绍”,共分为三个部分:
● 支持用户自定义的产品线
在 ChengYing 中,是以组件包的维度部署服务,比如一个 zookeeper 的产品包,会预先定义好 ZK 的包上传到 ChengYing 的系统当中,再去选择要部署的服务以及给 ZK 编排部署机器,以此完成部署。
对于初学者来说,当需要部署多个服务,这些服务又有顺序依赖关系时,会不清楚部署的先后顺序,从而导致部署非常吃力。因此 ChengYing 支持使用 DAG(有向无环图)进行定义灵活可配的组件包部署顺序。目的是为了让熟悉和不熟悉的人都能够通过预定义产品线的形式同时部署多个组件包,从而大大提高部署效率。
● 支持服务的亲和性配置
根据组件包中不同服务的类型,结合主机角色信息自动进行服务主机编排。在接入主机到 ChengYing 系统中时,支持给主机打上对应的标签即角色,相应角色的组件会部署到相应角色的机器上。
● 一键自动部署组件包
基于组件包手动部署,同样的入口,选择不同的产品线部署方式之后,可一键按需迅速完成所需要的多个组件包的同时部署,提高部署效率。
产品线部署设计
接下来,通过代码设计的角度看看 ChengYing 对产品线部署是如何进行技术设计的。
什么是 DAG
DAG (有向无环图,Directed Acyclic Graph)是一种常用数据结构,仅就 DAG 而言,它已经在我们日常的各种工具中存在,如依赖系统、数据流系统、数据可视化等。当我们从任务编排的角度来看,DAG 面向普通人术语叫作工作流(Workflow)。
在图论中, 如果一个有向图无法从任意顶点出发经过若干条边回到该点, 则这个图就是一个有向无环图 (DAG 图)。

ChengYing 产品线部署设计的核心就是给定一组任务,按照自定义的方式安排它们的执行顺序,即 DAG。
产品线 DAG 定义
预先定义某一条产品线中每一个组件包的部署顺序,将其关系使用 DAG 的方式定义为 json 文件,平台自动解析 json 得到部署顺序从而实现自动部署的效果。

· product_line_name: 产品线名称(可预定义)
· product_line_version: 产品线版本(可预定义)
· product_serial: 组件包部署顺序(上图说明 DTBase 的 dependee 为0,表示没有依赖;DTFront 的 dependee 为1,表示依赖 id 为1的组件包)
产品线 DAG 源码分析
如果要对复杂对象排序的话,该排序必须包含 Len,Swap,Less 这三个方法。

下面这段源码是 DAG 执行的核心逻辑,对于源码的具体解析可以前往视频进行观看:
https://www.bilibili.com/video/BV1KV4y1Q7KP/?spm_id_from=333.999.0.0
源码本身已经全部开源,可以前往 ChengYing 的 Github 进行学习:
https://github.com/DTStack/chengying

服务亲和性配置
服务亲和性的定义指以预选、优选、选定的机制完成将每个新的服务绑定至为其选出的目标节点上。
在 k8s 中,支持节点和 Pod 两个层级的亲和性、反亲和性调度,通过配置亲和与反亲和的规则,允许指定硬性限制和软性限制,即偏好。
比如将前端的 Pod 和后端的 Pod 部署在一起,这样可以减少网络延迟。或是某一类型的服务部署在某一类型的节点上,不同的应用部署在不同的节点上等。
定义节点亲和性规则时有两种类型的节点亲和性规则 :硬亲和性 required 和软亲和性 preferred。硬亲和性实现的是强制性规则,它是 Pod 调度时必须要满足的规则,而在不存在满足规则的节点时 , Pod 对象会被置为 Pending 状态。
而软亲和性规则实现的是一种柔性调度限制,它倾向于将 Pod 对象运行于某类特定的节点之上,而调度器也将尽量满足此需求,但在无法满足调度需求时它将退而求其次地选择一个不匹配规则的节点。
类似于 k8s,ChengYing 中的服务亲和性和反亲和性也进行了相应的字段设置:
· orchestration.affinity:数组,自动编排角色亲和性【可选】, 但是没有该字段的话,该服务将无法参与自动编排
· orchestration.anti_affinity:数组,自动编排角色反亲和性 【可选】
使用场景
下面来为大家介绍如何在 ChengYing 中使用产品线的部署。
设置主机角色
在【部署中心】-【集群管理】-【集群详情】中,可以给节点编辑对应角色。

上传产品线
角色完成定义之后,就可以在【部署中心】进行部署。支持自动部署(基于产品线顺序部署多个组件包,支持主机角色自动编排),手动部署(基于单个组件包部署,支持自定义主机编排)。
只要把产品线和产品包的亲和性与反亲和性全部定义好之后,开发者进入这个页面会非常一目了然,每一个节点上分配了哪些服务,先后进行怎样的部署等,一键就可以完成这些繁琐的工作,极大提升部署效率。


视频课程&PPT获取
视频课程:
https://www.bilibili.com/video/BV1KV4y1Q7KP/?spm_id_from=333.999.0.0
课件获取:
https://www.dtstack.com/resources/1037
《数栈产品白皮书》:https://www.dtstack.com/resources/1004?src=szsm
《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack
一文详解如何在 ChengYing 中通过产品线部署一键提升效率的更多相关文章
- 详解如何在CentOS7中使用Nginx和PHP7-FPM安装Nextcloud
		
转载地址:https://www.jb51.net/article/109382.htm 这篇文章主要介绍了详解如何在CentOS7中使用Nginx和PHP7-FPM安装Nextcloud,会通过 N ...
 - 详解如何在Laravel中增加自定义全局函数
		
http://www.php.cn/php-weizijiaocheng-383928.html 如何在Laravel中增加自定义全局函数?在我们的应用里经常会有一些全局都可能会用的函数,我们应该怎么 ...
 - 详解如何在 Linux 中安装最新的 Python 3.6 版本
		
# 下载源码包安装,先装wget,或curl. yum install wget # 再安装解压缩和编译环境: yum install zlib-devel bzip2-devel openssl-d ...
 - 一文详解Hexo+Github小白建站
		
作者:玩世不恭的Coder时间:2020-03-08说明:本文为原创文章,未经允许不可转载,转载前请联系作者 一文详解Hexo+Github小白建站 前言 GitHub是一个面向开源及私有软件项目的托 ...
 - 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)
		
一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop) 概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...
 - Scala 深入浅出实战经典 第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析
		
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
 - Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析
		
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
 - 详解OJ(Online Judge)中PHP代码的提交方法及要点【举例:ZOJ 1001 (A + B Problem)】
		
详解OJ(Online Judge)中PHP代码的提交方法及要点 Introduction of How to submit PHP code to Online Judge Systems Int ...
 - 详解Linux下iptables中的DNAT与SNAT设置(转)
		
详解Linux下iptables中的DNAT与SNAT设置 这篇文章主要介绍了Linux下iptables中的DNAT与SNAT设置,是Linux网络配置中的基础知识,需要的朋友可以参考下 原文连 ...
 - Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制
		
Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制 JAVA 中原生的 socket 通信机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.co ...
 
随机推荐
- 『Plotly实战指南』--柱状图绘制高级篇
			
在数据可视化的世界里,柱状图是一种直观且强大的工具,用于展示数据的分布.比较和趋势. 从基础的柱状图出发,我们可以进一步探索更复杂的图表类型,如分组柱状图和堆积柱状图,它们在处理多维数据和复杂关系时具 ...
 - 几款ZooKeeper可视化工具,最后一个美炸了~
			
首发于公众号:BiggerBoy 欢迎关注,查看更多技术文章 ZooKeeper是我们工作中常用一个开源的分布式协调服务,提供分布式数据一致性解决方案,分布式应用程序可以实现数据发布订阅.负载均衡.命 ...
 - CSS那些事读书笔记-2
			
背景 作为一个后端开发,曾经尝试过学习前端,但是总觉不得要领,照猫画虎,而公司里又有专业的前端开发,工作中几乎接触不到实际的前端任务,所以前端的技能田野一直是一片荒芜.但是笔者深知前端的技能对找工作和 ...
 - php文件和文件夹操作类
			
文件和文件夹操作 移动 | 复制 | 删除 | 重命名 | 下载 <?php namespace Framework\Tools; use PharData; class FileManager ...
 - 【Python】文件批量重命名
			
需求: 经常有很多相似的文件需要重命名,如果一个一个来太麻烦了,正好会Python,所以用Python写了个脚本,把符合要求的文件的文件名修改为新的. 代码: # coding:utf-8 # @Ti ...
 - github release 下载文件慢、或者失败的解决方法
			
Free Download Manager 下载工具可以解决Github 下载缓慢或失败问题. 扫描下方二维码,关注公众号 回复github,即可获取下载链接.
 - 行为识别TSM训练ucf101数据集
			
序言 最近有个行为检测的需求,打算用行为识别做,纯小白入这个方向,啃了两周的TSM原理和源码,训练好自己的数据集后,发现好像没法应用到自己的需求场景??玛德!算了,还是要记录一下.原理就没别要讲了,网 ...
 - 暂时永久免费高配云服务可跑32b模型
			
谷歌IDX免费云主机,16核CPU,64G内存,300G硬盘! 需要谷歌账号一个,且能google,无需绑卡. 到手第一时间安装一个ollama+qwen2.5-coder:32b, 无限cursor ...
 - Cgroup之内存子系统
			
Memory 子系统主要完成两件事: (1)控制一组进程使用内存资源的行为: (2)统计 cgroup 内进程使用内存资源的信息.在实际业务场景中,主要是为了避免某些应用大量占用内存资源(可能是由于内 ...
 - Burp插件Fiora联动nuclei(windows)
			
大佬写的插件出来好久了 今天朋友问我Fiora联动nuclei,我突然忘了咋配的的了.. 记录一下 一.下载nuclei https://github.com/projectdiscovery/nuc ...