一文详解如何在chengying中通过产品线部署一键提升效率

数栈DTinsight 数栈DTinsight     2023-05-06     405

关键词:

在之前的内容当中,我们为大家介绍过 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

如何在 1 个路由器中通过 2 pc 1 notebook 部署 xampp 服务器?

】如何在1个路由器中通过2pc1notebook部署xampp服务器?【英文标题】:HowtodeployxmappserverBy2pc1notebookin1router?【发布时间】:2015-12-0509:05:03【问题描述】:什么是部署服务器的操作系统?我可以使用窗口服务器吗?【问题讨论】:【... 查看详情

如何在熊猫/python中的行标题中通过部分搜索对数据集进行排序

】如何在熊猫/python中的行标题中通过部分搜索对数据集进行排序【英文标题】:Howtosortadatasetbypartialsearchwithinarow\'stitleinpandas/python【发布时间】:2019-09-2815:06:50【问题描述】:我有一个大型数据集,只能按其描述进行排序。描述... 查看详情

hivesql源码之语法词法编译文件解析一文详解(代码片段)

目录前言一、HiveSQL编译流程二、Antrl三、ANTLRWorks参阅前言工欲善其事必先利其器,首先要了解HiveSQL的编译语法的流程,还是需要懂得HiveSQL的执行流程以及编译规则。曾经在Hive数仓搭建的时候写过部分HiveSQL编译原理࿱... 查看详情

如何实现在 Flutter 中通过蓝牙打印字符串?

】如何实现在Flutter中通过蓝牙打印字符串?【英文标题】:HowtoachievetoprintstringoverbluetoothinFlutter?【发布时间】:2019-02-2710:50:05【问题描述】:你好,我想问一个关于Flutter的问题:我将为公司开发一个应用程序,我们希望将我们... 查看详情

如何在 C++ 中通过二进制模式将列表容器写入文件

】如何在C++中通过二进制模式将列表容器写入文件【英文标题】:Howtowritealistcontainerintoafilebybinarymodeinc++【发布时间】:2016-06-1419:26:49【问题描述】:我在需要将用户定义的类“产品”列表保存到二进制文件中的模块中遇到问题... 查看详情

如何在 Swift 中通过 MR 的 id 从 coredata 中选择一条记录

】如何在Swift中通过MR的id从coredata中选择一条记录【英文标题】:HowtoselectarecordfromcoredatabyidwithMRinswift【发布时间】:2015-05-0417:35:57【问题描述】:我在CoreData中存储了一个汽车列表,每辆汽车都有一个特定的id。我想选择有id=2的... 查看详情

如何在调用脚本中通过正则表达式执行 sql 脚本?

】如何在调用脚本中通过正则表达式执行sql脚本?【英文标题】:Howtoexecutesqlscriptsviaregexincallingscript?【发布时间】:2016-06-2321:52:42【问题描述】:我有一个带有一些pl/sql代码的sqlplus脚本,它调用一些罐装的oracle12c程序来进行分... 查看详情

一文详解lorawan网关是如何应用的?

目录一、提高农业效率、简化农作方式二、加速城市发展、创造品质生活三、监测跟踪,让健康更有保证正如我们所知,物联网已经成为互联网发展的必然趋势了。物联网几乎能将所有的事物都接入了网络当中。LoRaWAN作... 查看详情

如何在 Woocommerce 中通过计费电话搜索客户

】如何在Woocommerce中通过计费电话搜索客户【英文标题】:HowtosearchcustomerbybillingphoneInWoocommerce【发布时间】:2019-03-0619:26:05【问题描述】:我正在尝试使用billing_phone或billing_address等元数据或其他元数据进行woocommerce客户端搜索。... 查看详情

如何在vue3中通过点击按钮异步加载组件

参考技术A方式一:方式二:点击加载按钮前如下图:点击加载按钮后如下图: 查看详情

在 Laravel 8 中通过循环获取数组数据

】在Laravel8中通过循环获取数组数据【英文标题】:GettingArrayDatathroughtLooponLaravel8【发布时间】:2021-10-3120:34:26【问题描述】:我正在使用一种将数组数据发送到控制器的表单。它还接收到这样的数组数据$product_unit=$inputs[\'orderPro... 查看详情

我可以在 MobileFirst 8 中通过 ant 构建/部署 wlapp 和适配器吗

】我可以在MobileFirst8中通过ant构建/部署wlapp和适配器吗【英文标题】:CanIbuild/deploywlappandadaptersviaantinMobileFirst8【发布时间】:2017-05-2410:17:40【问题描述】:我们为MobileFirst7创建了一个ant脚本,并通过jenkins执行该脚本以创建一个... 查看详情

如何在kineticjs中通过json在舞台上绘制图层

】如何在kineticjs中通过json在舞台上绘制图层【英文标题】:Howtodrawalayeronstagebyjsoninkineticjs【发布时间】:2012-12-1106:54:00【问题描述】:KineticJS中有一个方法可以从json中绘制舞台(画布)Kinetic.Node.create(JSON,\'container\');舞台上有很... 查看详情

如何在 SQL Server 2008 中通过单个查询更新两个表 [重复]

】如何在SQLServer2008中通过单个查询更新两个表[重复]【英文标题】:HowcanIupdatetwotablesbysinglequeryinSQLServer2008[duplicate]【发布时间】:2012-06-0408:14:20【问题描述】:可能重复:HowtoupdatetwotablesinonestatementinSQLServer2005?我有两张表,需要... 查看详情

angular中通过$location获取地址栏的参数详解(代码片段)

Angular中通过$location获取url中的参数  最近,项目开发正在进行时,心有点燥,许多东西没来得及去研究,今天正想问题呢,同事问到如何获取url中的参数,我一时半会还真没想起来,刚刚特意研究了一下,常用的方法就以下... 查看详情

在 Storm 中通过一系列螺栓进行 ACK 的正确方法

...组。我希望Bolt2确认从Spout发送的初始元组,但我不确定如何。为了保证容错(即 查看详情

如何在 Flash AS3 中通过鼠标单击暂停多个符号

】如何在FlashAS3中通过鼠标单击暂停多个符号【英文标题】:howtopausemultiplesymbolswithmouseclickinflashAS3【发布时间】:2015-10-1316:00:54【问题描述】:我一直在使用actionscript3来控制我的动画,我可以播放和重置视频,但无法全局暂停... 查看详情

mapreduce详解(代码片段)

MapReduce概述一:mapTask阶段  a):默认通过TextInputFormat组件调用RecoredReader的read()方法读取指定路径的文件,返回K-V,读取一行调用一次map()方法二:shuffler机制  a):mapTask中通过OutputCollector将结果写入环形缓冲区  b):环形缓冲区中通... 查看详情