基于Web技术和微服务架构的自动化数据中心控制系统
摘 要
随着公司的基础设施和基础服务的增加,且须满足线上业务的稳定性,运维人员的业务压力随之增加。业务量与系统复杂度与日俱增,系统资源的占用过大,服务流程过慢等问题层出不穷,基于虚拟机编排已经不能满足日益增长的用户需求,这大大推动了容器编排技术,微服务成为了后端服务的首选。
本系统所开发的系统为解决上述问题,将自动化数据中心设为研究对象,使用了IDEA开发工具,MongoDB作为数据库存储,并且使用了消息中间件RabbitMQ来对API Server和Agent进行流量削峰,异步解耦。以回调的方式进行任务消息推送。使用了Vue3、Flask和Pymongo组合框架搭配Naive UI组件库,实现了一个基于微服务架构和Web技术并且具备可扩展性、高可用性和易于监控的运维资源数据配置和管理系统。本系统中每个服务都有清晰的边界,服务之间没有直接耦合的关系
关键词:资源数据配置和管理系统;微服务架构;Flask、Vue3框架;MongoDB;Golang
ABSTRACT
With the increase of the company 's infrastructure and basic services, and must meet the stability of online business, operation and maintenance personnel business pressure increases. The business volume and system complexity are increasing day by day, the system resources are occupied too much, the service process is too slow and other problems emerge in an endless stream. Based on the virtual machine orchestration, it can no longer meet the growing user needs, which greatly promotes the container orchestration technology. Microservices have become the first choice for back-end services.
In order to solve the above problems, the system developed by this system sets the automatic data center as the research object, uses the IDEA development tool, MongoDB as the database storage, and uses the message middleware RabbitMQ to perform traffic peak clipping and asynchronous decoupling on API Server and Agent. Task message push is performed in a callback manner. Using the Vue3, Flask and Pymongo combination framework with the Naive UI component library, a data configuration and management system for operation and maintenance resources based on microservice architecture and Web technology with scalability, high availability and easy monitoring is implemented. In this system, each service has a clear boundary, and there is no direct coupling relationship between services.
Key words: Resource configuration management database system; Microservice architecture; Flask,Vue3 framework; MongoDB; Golang
目 录
1.1.1 研究背景
随着当今互联网IT行业的快速发展,企业规模逐渐壮大,企业的基础设施和业务增加导致了业务量与系统复杂度与日俱增,因此运维人员的业务压力随之而增加。又因为近年疫情的原因,人们对互联网逐渐产生了依赖性,所以对APP的体验性也是会一大关注度。系统资源的占用过大,服务流程过慢等问题层出不穷,基于虚拟机编排已经不能满足日益增长的用户需求,这大大推动了容器编排技术[1]。为提高运维与开发效率,将DevOps贯彻整个业务。由此诞生了自动化数据中心控制系统,简称CMDB,实际上企业一般都是自己内部的运维团队按照公司的运维场景和业务需求设计和构建的CMDB。
1.1.2 研究意义
传统的运维操作来进行整个业务流程的执行,许多流程不够透明化,牵扯到资源池,用户组并无显示等问题,都由运维人员自身来判断。大量繁琐的重复的系统操作,无疑对效率是大大折扣的。针对上述问题,我在设计系统时进行了对运维场景和业务需求研究,根据目前服务的发展与需求,设计并实现了一个基于Web和微服务架构开发的自动化数据库控制系统。更好地管理业务中的安全组、资源池、成员、群组等上层业务概念,不仅如此,还针对各种操作系统审核流程和通知机制,依据CAP原则对整个系统可用性严格把控。在保证系统的可用性的同时,还大大加快了业务的流程;并使其透明化,更快的找出部署与构建过程中出现的问题,这无疑是对整个业务效率提升是巨大的。
自动化数据中心控制系统是以运维团队和业务需求为中心的设计理念,为运维人员提供上层业务概念和一个便于操作的平台。系统能存储大量的机器与业务的需求关系数据,并展示在视图页面中。
CMDB本质上是一个数据库,提供各类数据的存储、查找、校验等操作,托管的内容包含了企业软硬件资产,从“人”到“公司产品”各种资源,平常在中大型企业上普遍存在。在小型企业,因为其业务量小、人员少,不需要这种大型系统来管理,只需要通过类似Confluence(企业级知识库与协同软件)文档服务器或则更加简陋的Excel结合人员来管理即可。但在中大型企业因为其公司资产地域分散,且网络不互通等问题,其自动化运维程度基本为零,产生了建设CMDB的萌芽。因为其不同的公司业务和人员资源,所以大部分开源CMDB项目都不能满足各自企业自身需求,需要开发人员根据企业实际情况进行设计。目前大部分运维还停留在人工运维结合shell脚本的时代,重新招聘专门为运维业务的开发人员,其对人力资源成本也是一种消耗,所以一般在中大型企业存在。
CMDB的概念早就由CCTA在ITIL中提出,但由于其广度、模糊性和缺乏工具,很难在公司中实施。随着ITIL理念在全国流行和被认可,传统软件巨头纷纷跟进推出自有的CMDB产品和解决方案。后续的竞争快速推动了CMDB的发展,国内外发展程度可以说相差了5年甚至更多。现如今已经有很多出色的CMDB软件例如Cherwell、SolarWinds、FreshWorks、Device42等,虽然百花齐放,各自不同,但大体的思路和理念是相通的。
在开发系统时,前、后端开发工具选用了由JetBrains打造的三款IDE,它们的全称分别是PyCharm、GoLand和WebStorm。选用它的理由是使用Python、Golang、JavaScript语言开发时效率极高,能自动编码补全,并且有单元测试、调试、智能提示、语法高亮、版本控制、自动完成、Project管理等功能。通过设置简单的快捷键即可,并且其兼用性,支持各种开发组件以及工具。
最关键的功能—Debug,可以对Python、Go、JavaScript等代码调试。快捷键的设计可以促进我们的开发速度,例如:
1.Ctrl + Shift + A:万能命令行,搜索特定内容,进行定位,替换等操作。
2.在代码中使用Alt + Insert:Generate,可以get/set等操作
3.Ctrl + Alt + F:变量抽取全局变量
4.Alt + Enter:提示语能更快速的帮我们完成代码
5.Ctrl + Shift + Enter:补全代码(一行尾添加分号,如果是if等添加括号)
6.保存成模板:Ctrl + Shift + L,这个是自定义的(save as live Template)
Web服务器选择Nginx,这是一个免费、开源的轻量级高性能HTTP和反向代理功能的应用程序服务器。与Apache相比,Nginx稳定性高性能且内存占用低,并且使用了epoll I/O复用模型处理高并发,响应速度快等。
在存储数据方面选用了当前最受欢迎的NoSQL数据库,MongoDB是一个介于关系数据库和非关系数据库之间的产品,基于分布式文件存储的数据库,由DoubleClick 的主理团队创立。MongoDB是最流行的非关系型数据库管理系统之一,其解决了海量数据、高并发的高效访问和存储、数据库的“弹性”扩展[2]。并且拥有成熟的容灾方案,例如副本集“两地三中心”容灾方案,保证其数据极高的可用性。其分布式集群提供对数据海量存储和高可扩展性。MongoDB支持的数据结构是松散的,以BSON格式来存储数据,因此满足了此系统的数据类型复杂的需求。
它的优点是关系数据库将数据存储在不同的Collection中,而不是将所有数据集中存储在大型仓库中,这提高了速度和灵活性。
1.4.1 Vue3技术
Vue是一款用于构建用户界面的 JavaScript 框架。它基于标准HTML、CSS和JavaScript来构建,并且提供了声明式的组件化的编程模型,高效地开发UI界面。Vue3相对于以前版本性能更高,并且重写了虚拟DOM实现(加入了最长递增子序列算法)。
特征:
(1)组件化的复用
Vue将页面抽象分解为许多可复用、独立的小组件,并将它们组合成一个应用程序。不同于JSP使用include标签嵌入,Vue通过封装Components嵌入页面直接使用组件。Vue-router通过watch侦听器来监听路由的变化来判断该组件是否可复用。
(2)路由
Vue路由器路由功能将不同组件映射到各自的路由,并告诉Vue在何处渲染它们,更改路由以实现不同组件和页面之间的导航。而JSP通过自带的forward标签来实现跳转。
(3)指令
Vue.js内置了许多指令,例如v-show,v-model,v-if,v-else等,这些指令用于在前端执行各种操作。通过获取表达式的值改变,做出相应的行为应用到DOM树上。
随着用户量和数据量的增加,单体应用的缺点进一步显露出来,例如严重的耦合,某个模块的BUG出现可能会导致整个系统的可用性,过于耦合的业务代码会造成二次开发困难,新业务难以推进。系统吞吐量受限,性能下降,想要引入新语言或者框架十分困难。微服务是一种用于构建应用的架构方案。微服务是松散耦合的分布式架构框架,因此一个团队的更改不会破坏整个应用。使用微服务的好处是,开发团队能够快速构建应用的新组件,以满足不断变化的业务需求。将单一服务拆分成一组小服务、服务之间相互协调、配合,最终为用户提供价值[3]。
1.4.3 MVVM模式
MVVM由三部分构成:Model,View,ViewModel。Model代表数据模型,数据模型和业务逻辑都在Model层定义;View代表UI视图,负责展示数据;ViewModel负责监听Model中数据的改变并控制View视图更新,处理用户交互操作。也就是说Model与View无直接关联,通过与ViewModel的双向数据绑定来进行交互的[4]。View和Model的变化会互相影响,类似于浅拷贝。MVVM优于经典的MVC模式就是实现了模型和视图之间的自动同步。Vue采用数据劫持配合发布者-订阅者的模式的方式实现MVVM。
1.5.1 Flask框架
Flask是一个轻量级的Web开发框架,使用Python编写,并基于Werkzeug Tool Box。相对于最出名的Django,Flask更像一个内核,大部分功能都需要第三方库的扩展来实现,所以它是最灵活的框架之一,这也是众多开发者喜爱Flask作为后端框架的原因。其中BluePrint(蓝图)的功能,对不熟悉模块划分的开发者提高了效率。BluePrint将不同的功能模块化,优化了项目结构,增强了项目的可读性、易于维护等。
1.5.2 MVC框架
MVC是前、后端的一种设计模式,将一个用户请求和返回响应分为View层、Controller层和Model层来进行流程。Controller层用于API接口,本系统采用RESTful API;Model层用于业务逻辑、第三方接口、本地数据和数据库数据等;View层用于数据格式化。用Flask编写的API Server就是基于MVC设计的。
Flask-Pymongo框架Flask的扩展持久层框架,用来操作MongoDB。跟MySQL不同,因为MongoDB是NoSQL型的文档型数据库,我们使用的是ODM(对象文档映射)框架而并非ORM(对象关系映射)框架。都是通过库(Pymongo库)来对数据库操作做一个封装,然后将对应的表或者文档映射成一个我们面向对象编程所熟识的一个对象,通过该对象进行增伤改查操作。
- 第一章:绪论。主要介绍了本论文的研究背景、研究意义、研究现状和使用的相关技术工具与环境的应用。
- 第二章:系统分析。根据当前的业务状况和运维人员进行需求分析,可行性分析及绘制系统流程图等。
- 第三章:系统设计。根据流程图给系统进行架构设计,对象的设计,功能设计和系统页面设计。
- 第四章:系统实现。根据用运维人员的需求,进行编码开发。
- 第五章:系统测试。对系统进行模块的测试,进一步优化架构。
- 第六章:结论。总结并分析了毕业设计。
2.1.1 技术可行性分析
根据自动化数据中心控制系统的系统功能和性能,在开发语言方面选择了Golang和Python。考虑其Agent要在异构平台运行,实现配置的下拉,选用Golang来开发,其高并发能力和二进制的可移植性和便携满足了需求。
API Server用Python的Flask框架来编写,主要考虑到API Server为一个提供RESTful API的无状态应用,在项目中充当“桥梁”的角色,一般部署只要固定在某个运行环境,不可随意迁移。
存储数据方面则采用了性能高,扩展性强,海里数据存储的MongoDB数据库。还为用户和管理员进行了JWT鉴权,使用base64编码,因为其编码解码过程具有不可读性较为安全,保证其资源的安全性。这些技术和应用在近几年都是较为新颖和可靠的,但维护起来也不麻烦,所以该系统在技术上可行。
本系统的数据之间的联系较强,开发的难度随业务需求变化,需要花费一定的时间,但所用的开发工具和软件基本都是免费的。使用的技术虽然较为新颖,但相关知识完善,并且可靠性强,在未来较长的一段时间内都会稳定地发挥作用,这对于运维人员和开发人员在日后对资源和业务的管理和开发都有很大的帮助。由此,在开发此系统时经济方面是完全可行的。
此系统所设计的系统基本满足大部分运维的功能需求,前端使用Navie UI组件库,其界面美而简洁,便于操作者对资源的操作管理。因为使用了微服务架构的思想,许多模块服务可以拆分测试,并且易于开发人员进行二次开发和设计。因此,此系统在操作上也是可行的。
在传统的运维操作方式上,运维人员面对繁杂的业务资源进行分组分析,一步步来操作十分繁琐,并且很多情况下操作过于冗余。这种方式不能高效的完成业务,对于业务有滞留性,并且对资源信息的准确性造成了一定的影响。于是才萌发了数据库配置中心的方式来进行管理,并且以简洁的界面和易懂的操作展示给操作者们。能有效管理业务资源,但往往只管理业务资源还不够,希望还能对成员进行权限的组级别的划分及管理,使每个业务逻辑更加清晰,还能以拓扑图的方式展示。并且将任务的消息发送到企业办公APP上,例如Ding Talk、Lark等,于是本文设计了满足以上需求的管理系统。
自动化数据中心控制系统是一款基于Web和微服务架构模式设计的。目的是为了能高效地管理业务资源,给操作者提供一个安全,便捷的管理平台。
对于系统的操作者,分为管理员和普通用户,并以组织架构的形式管理。需要使用工号和密码登录。普通用户只能进行普通的查看数据信息,而管理员拥有全部权限。该许多资源都划分了类型,例如机器、协议,用户可以选择检索条件,通过输入关键字搜索指定内容。
对于系统管理员在登录系统后,查看业务运行状况,排查业务存在的问题,并解决。除了业务管理,管理员还要进行系统的维护和成员权限控制。管理员通过系统对成员信息进行管理、统计、添加成员信息、修改成员权限等操作。管理员要需要从上级获取的业务信息,根据成员组、安全组、机器类型以及资源池划分的区域等,来创建满足业务需求的资源对象。
因为该系统主要面向业务,对系统的高性能、高可用性以及安全性是十分严苛的。安全性主要关注资源数据的可靠性并防止恶意篡改。而高可用性是为了增强系统的可用度,可以通过Nginx负载均衡实现,测试在高并发场景下是否稳定运行。高性能主要在跨区域进行分钟级别的创建资源对象供给业务。
在进行业务项目分析时,有必要映射系统的数据流和工作流程。数据流程图可以快速、简要地解释系统的数据流和操作,并帮助开发人员快速开发系统。
业务流程图三大核心:
·业务流程的起点和终点
·业务流程中,涉及的角色
·业务流程中,需要做的事情
(1)管理员拥有系统一切功能的权限,可以进入每个模块然后进行管理操作

更多推荐


所有评论(0)