2019年5月,我参与了某信息科技公司运维监控管理系统项目的建设,担任系统架构师,负责系统架构设计和核心模块开发工作。该系统的核心模块有监控管理模块、CI/CD模块、运维工具模块、CMDB资产管理模块,各模块均使用CMDB中的基础数据,监控管理模块有助于各小组快速定位问题、解决问题,CI/CD和运维工具模块可使各部门的开发工作达到标准化、流程化、自动化。该项目总投入323万元人民币,历时13个月,于2020年6月正式交付运行迭代至今,受到了用户的一致好评。
本文结合笔者的实际工作经验,主要论述软件架构风格在该项目中的具体应用。首先从全局角度简述了常用的架构风格,其次列举了3种架构风格在该项目中的具体应用。该系统的各核心模块均采用了调用/返回风格中的面向对象,这种风格封装了对象的属性和行为,实现了信息隐藏,同时对对象内部行为的修改不影响外部对它的调用;持续集成部署模块我们主要采用了独立构件风格中的隐式调用,这种风格可降低系统耦合度、简化软件架构,提高可修改性方面的架构属性,通过某个事件触发,用异步的方式来执行任务;应用系统层我们采用B/S架构风格,充分使用了这种风格中特有的缓存、html5、websocket等技术,这种当前最流行通用的0客户端的架构,可减少总体成本,维护和升级也极为便利,并能使项目更易推广并快速投入使用。
随着公司业务及信息化的不断发展,IT基础设施规模越来越庞大,结构变得相对复杂,而各运维小组对这些软硬件的管理过于分散且以手动为主,以至经常处于被动救火的状态,故障分析速度慢,根源定位难度大,扩容建设缺乏科学性能依据,难以应对业务系统可靠安全运行保障要求。针对以上种种问题,科技公司领导决定使用技改经费投资建设一套运维监控管理系统,旨在使各小组的工作更规范、高效并达到业务系统可靠安全运行要求。在该项目中,我主要负责整体架构设计与核心模块的开发,19年7月完成架构工作,整个项目共耗时13个月,于2020年6月顺利通过验收。
该系统分4个核心模块,分别是Monitor监控管理、CI/CD持续集成部署、运维工具、CMDB资产管理等主要模块,使用了18台主机:分别用作nginx(在F5之后用作web服务及负载均衡)、应用服务器,定时任务、缓存服务、zabbix基础监控,prometheus监控、数据库等。资产管理模块主要管理物理机、虚拟机、ali云主机、网络设备、密码管理、产品线管理、应用管理、项目管理等;监控管理模块,其中zabbix用于服务器层面基础监控及MySQL、Oracle服务的监控,自定义监控主要使用二次开发的exporter,监控各中间件如RabbitMQ、Redis、MongoDB等服务,自定义监控的数据存储在prometheus相关的InfuxDB时序数据库中;CI/CD模块,结合jenkins主要处理代码自动编译和打包测试、结合ansible|celery完成服务的自动化部署及代码上线等核心功能。
正文(在后面几个博文中单独呈现)
项目于2020年6月完成验收,期间历经多次里程碑,各模块同时开发逐步交付用户测试使用,总体进程平稳顺利,出现问题我们也能快速跟进并高效处理,得到了用户的肯定并收到用户的一致好评。
项目开发期间也出现过几次典型问题:
服务稳定性方面,前期为了使项目快速迭代并交付用户使用新功能,运维工作由我们内部直接负责,导致新功能上线后给整个服务带来不稳定,针对这种问题我们引入了预生产环境,和生产环境使用一样的DB,仅用于验证代码部署后能否正常启动和代码逻辑是否正确,每次上线先在预生产上验证,没有问题再上生产,同时在项目中后期逐步将运维工作交给应用运维组负责;
另一个问题是安全上的,前期我们是用http协议仅内部访问,在公司内跨局域网访问时部分请求被网络设备劫持,使得请求不能到后端,原因是部分请求参数涉及敏感关键字,如url中有cicd等关键字,针对这个问题我们在早期发现时先对有问题的url进行改名使之先能访问,然后同步申请引入https安全协议;
负载均衡的高可用的问题,在项目刚交付的一段时间,我们认为刚开始接入的服务不多,开源的nginx能应对,问题出现在前端界面查看日志请求过多,导致nginx服务器的IO请求处理较慢,针对此问题我们首先将nginx的服务器磁盘升级为SSD,再将负载均衡服务前移至业务用的H5上,在H5之后再加一台nignx,共2台转发后端请求。