本篇介绍系统三7e平台之EIRMS
EIRMS(E Infrustructure Resource Management System),全称系统管理三基础设施资源管理平台,是由系统三团队完全自主研发的,基于微服务底层架构与开源组件构建的一套集基础设施资源管理、配置信息管理、团队运维流程管理、团队日常工作管理等功能于一体的大型分布式平台,它的首页现在长这个样子……
先给大家讲讲Eirms诞生和成长的故事吧……
Eirms设计初衷
在2014年底我刚进系统三团队的时候,我发现团队在用Excel表记录运维的服务器、系统资源等信息,我直接就被惊住了,每个批次上线后,由系统负责人轮流更新这个Excel表,一个人写完了通过Notes邮件传给下一个人。这个方式有很大的问题,其中一个叫就是效率太低,这相当于串行更新一个文件。第二个问题是经常传着传着就乱了,每个人手里有一份文件,但谁也不知道谁是最新的,所以那段时间一有统计资源的需求,就会发现数目不准。第三个问题是值班同事需要查询IP等资源时,必须在FTP上放一份这个Excel表,如果这个表不是最新的,就可能一些新投的服务器查不到,对值班人员排查问题造成很大困难。
那时候我不知道别的团队是什么样,但我实在无法忍受这种落后的工作方式,在互联网公司这种管理流程上的工作早就线上化了,而且开发这样一个平台也没有什么太大难度吧。于是在2015年初,在我入团队半年,已经对系统三工作有了初步了解以后,开始着手计划开发一个资源统计平台,这就是Eirms的设计初衷——纯粹是我个人忍受不了团队低效的工作方式,没有什么高大尚的原因,也完全不知道Eirms后来会成为系统三的团队门户,成为系统三的CMDB。
Eirms的艰难发展之路
Eirms在一开始只有系统、物理机、虚拟机三张表,是我拿了一个我认为最新的Excel导入的数据库,使用Java写的webapp,那会没有环境可以部署,就部在我的工位电脑上。初期的开发像打游击似的,每天在单位找工作空闲时间写代码,后来怕被别人看见说我不务正业,我就回家开发。在经过2015年一个春节的编码之后,春节后第一版Eirms上线了(当然那会还不叫Eirms,还没有名字呢~)。
Eirms磕磕绊绊的在我的工位电脑上线后,我发现想改变同事们长期的工作习惯是一件多么困难的事情,大家Excel用的很6,没有人愿意打开浏览器去看一个页面,我一个刚入职半年的新人凭什么说服老员工用这样一个“异类”的系统呢?于是我想了一个“曲线救国”的方法,那会我们每个月的打车报销由一名软通动力的厂商负责Excel统计,后来这个厂商从系统三撤走了,开始由我们2014新入职的同事负责,大家发现这个工作平常看起来没什么,自己开始搞之后竟然这么繁琐。于是我发布了Eirms的打车报销页面,大大解放了报销的统计工作和同事们的填写工作。慢慢开始有人觉得,在页面填写原来真的比Excel方便。
之后,开始有同事愿意把资源信息在Eirms填写了,但这时候Eirms还没有被“扶正”,还是“非官方”统计渠道,大家填完网页还得去填Excel,然后大家就劝我去给领导建议不要再用Excel了。而我在Eirms大概试用了几周之后,准备去向领导摊牌。这个时候,Eirms遭遇了它的最大一次危机。
原来,大概在我开始设计Eirms的时候,团队也正在让微软开发一个类似的资源统计平台——Portal,是用微软的.Net平台开发的,彼时Portal显然比Eirms“根正苗红”。这我感到了危机,我开始不断优化用户体验,提升访问速度,提升便捷性,并且和Portal正面交锋——让大家把两个系统都试试,看到底谁的好用,让大家用手投票(毫无疑问,当然是Eirms比Portal好用)。就在2015年中的某一天,领导群发邮件,说今后将Excel改为Portal,我觉得是时候摊牌了,于是我携Eirms第一次向领导说:这是我开发的一个资源统计平台,有几个同事试用过觉得还不错,比Portal好用,请领导抉择。特别感谢宋处当年对我的信任(老泪纵横啊……),毅然决定照顾自己的员工,并亲自为它提名Eirms!
就这样Eirms被扶正了……Eirms一开始功能非常简陋,界面也不好看,架构更是low到爆,为了业务快速上线,我加班加点闷头往上怼功能。那会Eirms就是一个单体的JavaWeb工程,所有功能都在一个war包里,新增或者更新一个小功能都必须重新编译整个工程并重新发布。而且那会没有环境,只能运行在我的工位,为此我还自掏腰包增加了8G内存并加了SSD。大概因为那会使用还不是很广泛,因此大家还都能忍。后来随着用户量增长,这种变更和发布造成的业务中断和页面卡顿已经不能忍了,此时青云的出现犹如及时雨一般,于是大概在2016年初的时候,在基本功能已经稳定的情况下,我把Eirms搬迁到了青云,并且使用时下流行的bootstrap框架做了第一次页面改版,大大提升了流畅度和美观性,用户体验得以提升。
随着Eirms功能越来越多,领导也为它设置了专门的产品经理——靳婷童鞋,开始汇总各个组提出的需求,那会我和桑大毛真是忙得不亦乐乎。Eirms越来越大、越来越重了,这种单体架构长期这么发展下去迟早要凉……2017年初开始,系统三的各类平台如雨后春笋般不断冒出,团队适时提出了“7e”的总体规划,但整体形式上已经开始了群雄割据,问题开始凸显(具体问题请参见系统三智能运维实践之总篇——智能运维转型与7e平台设计),于是我开始有了整合底层基础架构的念头——微服务改造。经过差不多一年的架构改造和功能重新梳理,才有了现在大家看到的这样的Eirms。
故事讲完了,下面开始讲干货
Eirms功能概览
Eirms现在整体上分为五大功能分区:
日常活动,包括各类统计:打车报销、办公用品申领、职工活动券等;另外还有班车查询和员工通讯录(支持按姓名、拼音、手机号、部门、团队等全字段搜索)。
系统资源,是Eirms的核心功能区,包括虚拟化资源池(现已独立成为虚拟化管理平台);外设资源(现已独立成为外设管理平台);业务系统资源,涵盖统计报表、业务系统总表、虚拟机资源总表、物理机资源总表、青云资源总表、证书总表、监控信息总表、无人认领服务器等;中间件资源是以中间件为纬度的统计,包括负责人、部署系统和服务器等,数据库管理(已独立成为DBOPS系统);服务目录定期与remedy同步,并且将系统三模块与科技部服务目录进行关联,以服务目录为纬度进行系统运维档案记录。
批次投产,以批次为管理纬度,列出全年每个批次分配到系统三的系统,包括批次各个关键时间节点、批次总负责人、资源负责人、外设负责人、中间件负责人等。如下图所示,批次详情页列出了该批次的所有系统,点击可进入系统详情页。
生产活动,主要包括年度工作任务追踪和值班查询。年度工作任务追踪是中心每年的重点工作任务在系统三团队分解后的具体实施,其中一部分信息,如工作目标、具体任务和措施、交付物、交付计划等是年初统一填写的,另一部分工作进展是由任务负责人每月填写的,如下图所示。
资料库,主要包括标准化文档库、知识库、介质库和待建的配置库。标准化文档库收录了数据中心的相关规范和文档、系统三团队的标准化文档,以及团队的知识分享等。知识库是系统三的知识分享平台,任何人都可以在知识库发帖,包括运维工作经验、日常工作提示、故常处理建议等方方面面。介质库是由系统三的原FTP介质库移植过来的,可供同事们进行介质搜索、下载等。配置库是目前Eirms缺失的一部分,2018年将补齐这一块。
基于Eirms的运维实践
随着功能的完善和数据治理的持续推进,Eirms现在已经成为系统三团队的运维全生命周期管理平台。目前Eirms主要承担团队日常运维的如下功能:
资源信息入库和统一查询。现在Eirms是系统三唯一的资源统计平台,无论是系统服务器等数据的录入,还是7*24值班人员进行运维保障,还是其它同事日常查询,全部通过Eirms。另外Eirms基于Elasticsearch实现了全站资源搜索,仅需一个搜索框,无需指定查询哪个表,只需要输入关键词,就可以查询全站资源,包括系统、外设、虚拟机、物理机、服务目录、中间件等,并将结果分门别类显示,极大的节省了运维人员,特别是7*24值班人员的时间。
批次全流程管理。从批次分配系统开始,批次负责人新建批次信息,每个系统负责人自建系统,填写系统信息、申请IP、申请端口开通、申请虚拟机搭建,录入中间件信息、系统用户等信息,申请监控、SAS纳管、数据库备份、证书、防病毒等。这一系列流程下来,所有申请数据全部入库,只填一次,杜绝重复。
日常管理与信息查询。Eirms提供了丰富的团队日常工作管理入口,包括查通讯录、填写报销、申请办公用品、职工活动券(游园卡、电影卡等)、知识分享等。系统三是一个十分年轻的团队(平均年龄29岁),每年都有十几个大学生新员工加入团队,以前都是由主管、导师和组里的老员工对新员工进行工作辅导和生活帮助,但现在大家工作都很忙,新员工又多,每个问题都等着老员工来解答的话根本顾不上,最快的办法就是使用Eirms。想了解我们都有哪些系统?去查Eirms的系统资源吧;想知道怎么医疗报销、怎么申请西单工卡权限、怎么申请会议室?去查知识库吧;想下载介质、查询某个中间件怎么安装配置?去查介质库和文档库吧;我是7*24新手,碰到问题了打不通负责人电话咋办?去查Eirms知识库的值班手册吧……
Eirms架构设计
说了这么多Eirms的功能,它到底是怎么设计的呢。前面故事里提过,Eirms诞生之初只是一个单体war包,所有功能都混在一起,前后端也没有分离,后端用了一个Mysql数据库记录各类数据,典型的web-app-db架构,而且还都是单点,没有高可用,这样的架构实在没什么可讲的,太low了。现在的Eirms架构长这样:
是不是高大尚了很多~这张图明显可以看出Eirms被分成上下两部分,上面是Eirms平台区,下面是微服务区,平台对微服务的所有调用全部通过微服务网关(关于微服务的架构设计参见系统三智能运维实践之一——构建7e底层微服务架构)。本文只介绍平台区,包括以下几个设计要点:
Eirms将所有的基础服务全部从原来的war中拆分出来放到了容器上,这样Eirms的后台代码量大大减少
使用Nginx作为WEB Server,实现所有后台功能的反向代理(包括解决前端跨域问题)和动静分离,将前端静态资源(html/css/js/图片等)放在Nginx上,并且采用了两节点双活和负载均衡
使用Nodejs作为APP Server,替换原来的Java实现了后台代码,并且使用pm2工具进行进程管理。基础功能拆出去以后,后台功能弱化了很多,基本就是功能路由和结果拼装。这里也用到了两节点双活,可保证高可用。Nodejs也比Java轻量级了很多,省去了编译工作。
后台数据库除了使用Mysql之外,还引入了Hbase、Fastdfs、Samba等。这里的思路是这样的:
对于关系型数据,毫无疑问直接存入Mysql
对于不适合关系型数据库的数据存取,比如年度工作任务,它新增工作进展实际上是要增加列而非行,因此使用列数据库Hbase
对于文档型数据,比如word/pdf文档、安装介质等,使用Samba而非FTP进行存储(原因本文不作论述)
对于知识库的图片、附件,系统上传的附件、用户头像等,使用Fastdfs存储,这是一个分布式文件存储系统,这些文件不存在Nginx、也不存在Samba上是因为这里面牵扯到一个多节点的文件同步问题,业界很多都是使用Fastdfs来做分布式文件存取的。
使用Elasticsearch支撑全平台的检索功能。Elasticsearch的大名我就不用多说了吧,那么ES是怎么用来做Eirms的检索的呢?
每天零点从Mysql取出系统总表、虚拟机总表、物理机总表等几张大表在ES建索引,提供这些资源的检索功能
每天零点将文档库和介质库的目录信息在ES建索引,提供文档库和介质库的文件名搜索功能
定时将更新后的数据中心、软件中心的通讯录在ES里建索引,提供通讯录搜索功能
还有一些其它的建索引工作不一一论述。另外知识库内容是直接存在ES的,方便做全文检索。当把这些数据都录入ES以后,通过ES的全索引搜索功能就可以实现Eirms的全站搜索了。
前面故意没有提到一个很重要的问题,就是用户登录和权限管理,这个我将放在下一篇文章中详细论述。
Eirms有何优点
说了这么多,Eirms到底有何优点?
架构先进,特别是微服务改造以后,以面向服务的SOA治理去重新设计了整个平台,每个微服务部署到k8s以后,都可以独立进行变更和发布,再也不用编译整个工程,造成全部业务中断了。
不拘泥于单一数据源,什么数据适合用什么存就用什么存,有时候思路真的限制了功能,现在Nosql,甚至Newsql火起来以后,很多以前没法做的新功能都能做了。
动静分离,这是个老生常谈的话题,动静分离以后,不仅能大幅提升静态资源访问性能(可使用前端缓存),而且既解放了后端,又解放了前端。后端就不说了,分离以后后端可以使用任何语言编写(再也不用渲染一个JSP页面或者Python页面了),更大的价值在于可以使用专门的前端框架(如MVVM的Vue.js/React/Angular等)+Webpack进行前端构建,实现更酷炫的前端特效,更精炼、便捷的前端部署……另外动静分离以后可以使前端开发人员和后端开发人员并行开发,完全解耦……好处太多了不一一论述。
总结
Eirms的诞生和发展是系统三运维走向标准化、自动化、智能化的一个必然产物,因为任何企业的运维都是基于CMDB来构建的。现在数据中心在技管的牵头下正在建设全中心的CMDB,Eirms未来也会作为其联邦机制中的一个数据源提供服务。要用好Eirms,数据治理非常关键,希望系统三的同事在享受Eirms给大家带来便捷的同时,共同维护Eirms的基础数据准确、无误。
领取专属 10元无门槛券
私享最新 技术干货