如何将应用落地到cmdb中? -k8凯发天生赢家

发布日期:2022-03-11 13:51:56

作者:嘉为蓝鲸

分享到

应用运维的重要场景是应用软件的自动化发布,在数字化转型的大背景下,企业使用应用发布系统主要面临这几个问题:


● 随着业务线上化和业务量的快速增长,应用往往需要大规模集群的方式部署,加上对于业务连续性的要求,发布的工作量和复杂度成倍提升 。

● 敏捷 、devops的新理念的流行,应用更新迭代速度加快。

● 新技术的不断涌现,迫使企业需要主动拥抱探索新型it技术,应用技术百花齐放(容器、微服务等 ),对应用运维提出了更高的要求。



一、标准化是构建应用发布系统的第一步


人工运维已经很难满足当前的发展趋势, 建设自动化运维成为了接下来运维工作的重点。但是往往许多企业盲目的引进大量的工具去完成自动化,最终却会发现工具用了一大堆,看起来好像降低了人手动的工作,可效率并没有提升,这种情况往往是因为没有把“标准化”这个基础工作先做好。


标准化的内容有很多,大到标准的发布方案、应用全生命周期的标准流程,小到发布脚本、参数的标准化、应用名称的规范等。其中,我们认为最重要的也是最基础的,是需要对应用这个逻辑的抽象有一个共同的认知,通过识别拆解业务系统并且在cmdb中描述。



二、如何有效管理应用


1. 构建应用拓扑树


微服务的流行,分布式架构的日益成熟,导致我们需要管理的应用系统数量快速增长。你是否有过与产品同事鸡同鸭讲,一会儿是服务,一会儿是组件的经历?你是否经历过突然某天应用重启命令无权限的情况,因为基础架构运维的同事把weblogic的用户调整了?


如何有效管理这些应用及其使用的基础资源,统一命名、层级结构,是构建cmdb的目的。这里提供的思路是基于应用部署的视图拆分,基于“应用系统-环境-集群-模块”的模型对应用系统进行描述。


应用系统:对外提供特定、完整业务服务的一组系统资源(软硬件资源)的有机组合,位于整个应用拓扑的顶层,例如:erp系统、手机银行系统、英雄联盟系统。

环境:指的开发测试环境、预发布环境、生产环境、灾备环境等。

集群:大型应用系统一般会在多个地域机房部署相同的应用,如分布式架构下的北京集群、深圳集群;每一个集群可以独立提供完整业务服务。

模块:最小化的功能板块,有许多相似的叫法:应用、服务、组件、模块等等,比如在电商系统下的订单模块、评价模块等等。


一般在传统应用架构下有几个特点:


● 没有把模块划得很细。

● 应用往往有独享的数据库、消息队列等基础资源。

● 应用架构相对简单。几台weblogic加上oracle数据库就可以组成一个应用系统,所以这里的模块由应用模块和技术模块共同组成,如:报表模块、oracle模块。


而在互联网架构下,往往只聚焦应用模块和业务功能。


2. 构建面向应用运维的应用配置管理


cmdb主要还是以面向资源的管理,但仅以资源的视角看cmdb是不够的,对于应用运维而言,需要以应用的视角纵观全局。至于如何打通应用与资源的关系,可以以模块为中心,构建面向应用运维的应用配置管理。



部署配置管理: 对于应用发布而言,介质是绕不开也必须管理的对象,包括介质的下载地址、增量/全量类型、版本等属性。因此,需要思考介质是否适合放在cmdb中管理,可以从几个方面入手:


● 介质的消费场景是否通用?

● 介质的信息准确性是否有技术或者管理手段保证?


综上思考,我认为介质的信息不应该放在cmdb中,介质的版本信息理应由制品库维护,并且只有在发布的场景中需要消费介质的数据,所以建议在发布系统中维护介质的管理信息。


应用拓扑管理: 即上一章节描述的应用拓扑模型,在cmdb中维护。


基础资源管理: 这也是cmdb最基础最核心的管理内容,以资源的视角看到it资源的全景。通过关联的方式与模块进行联动,由于应用最终部署的目标还是主机,因此首先需要维护好应用与主机的逻辑关系。


当维护好主机的关系后,就打通了业务与物理的关系,这该如何理解?因为基础资源都是部署在主机上的,应用拓扑是业务信息,所以当模块与主机存在关系后,就意味着应用与基础资源的关系打通了。


综上内容,可以以模块为中心,左边延展发布介质的信息,右边通过主机看到模块使用的基础资源内容,结合上边的应用拓扑,实现整个以应用为中心视角的it资源视图。



03. cmdb怎么在发布场景中起作用?


将发布这个场景动作拆分成三个大的要素:发布目标、发布介质、执行操作。通过“发布介质”在“发布目标”上执行“执行操作”实现发布场景,并且在发布时需要按照以模块为中心的原则执行发布动作。将应用系统这一个抽象的概念通过结构化的描述落地在cmdb中后,确保所有应用部门、运维同事都具备共同的语言与认知。


比如,当明确发布的目标是:电商系统的生产环境下广东集群的订单模块时,那么就需要部署到订单模块下的a、b、c三台主机上,并且如果涉及到sql发布的场景,可以通过模块与mysql实例的关系清楚的知道这一过程需要在mysql01这个实例上执行sql脚本。


又比如,在发布系统上,由于维护好了一个关系:模块-介质,所以哪怕在晚上12点脑子晕乎乎执行发布变更时,选择了订单模块时也只能选择与之关联的order_jar_v1.1.jar程序包,这样就不会发生“把隔壁购物车模块的包部署到订单模块的机器上”这种错误。


在列举另外两个发布场景:


高级发布场景:应用发布系统可以通过cmdb主机数据的消费,进行主机的编排,并行、串行、分批等,实现灰度、滚动发布等发布策略。运维人员可以通过编排模块之间的执行依赖,满足集群级别的灰度发布策略或者服务依赖场景的复杂场景。

联动监控/日志系:验证发布的成功与否,除了业务上的验证之外,其实可以通过监控、日志系统进行发布前后的分析。那么如何联动发布系统、监控系统、日志系统呢?若部署了订单模块,又如何知道在日志系统中哪些日志是订单模块的?


答案是:cmdb ,通过共同的语言实现多系统的打通。


应用发布系统建设的第一个基础重点是标准化,我们需要先将cmdb落地应用的概念,并且以应用为中心管理应用的介质、基础资源等信息,为后续的应用发布场景提供准确标准的数据。

立即体验产品

专业售前团队详细介绍

在线咨询

电话:020-38847288

qq:3593213400

申请演示

请登录后在查看!

网站地图