实验场景:
服务器的管理和监控需要一定的服务器运维经验,普通非计算机用户很难监控和管理,本实验做一款简单的 Linux 服务器监控系统,实现收集服务器基本信息并查看的功能。
需求:
在设计一个软件的时候,我们必须先了解软件的用户需求,谈到用户需求,首先要和软件需求区别开来,用户需求不同于软件需求。需求是软件设计的范围界定,需求确定了什么需要开发,什么不需要开发,哪些是关键的,哪些只是锦上添花,从而划定出开发的范围,防止过度开发或者缺少功能等问题。
- 用户需求是站在用户的角度去思考业务如何处理,是要帮助用户去解决业务问题的范畴,基本不涉及软件领域词汇,用户需求一般用用例图(use case)来分析和表示。
- 软件需求是经过需求工程师/开发人员分析用户需求后,逐条转化为在设计软件方面需要考虑到的开发范围。
例如:
- 用户的总体需求是:我希望我可以很方便的查看和管理这些服务器,就像管理我的个人电脑一样。
- 软件的总体需求是:一款单机、C/S、B/S或者分布式的 Linux/Window 服务器监控管理系统,可以实时监控、管理服务器系统和服务应用。
用户需求分析:
- 用户可以注册管理账号,来登录管理平台。
- 普通用户查看服务器的信息即可,不能启动和停止任何服务器应用。
- 管理员用户不仅可以查看信息,也可以管理服务器应用。
- 监控内容,服务器的状态,服务应用的状态,如 CPU,内存,硬盘空间等,某些服务是否开启,状态如何。
- 管理内容,启动和停止某些服务应用。
软件需求分析:
- 用户登录系统需求
- 超级用户(软件自身需求):软件系统自带默认超级用户,默认密码登录进行管理。
- 管理员用户(限制级别和个数),首次登录,通过 C/B 端界面,输入个人邮箱/手机号/等进行用户注册,使用超级用户审批生效。
- 普通用户,首次登录,通过 C/B 端界面,输入个人邮箱/手机号/等进行用户注册,等待管理员用户审批生效。
思路扩展:可以思考是否需要邮箱验证、手机验证等,密码样式,是否加密等更复杂的内容。
复杂度越高,成本越高,开发难度越大,但是不一定能解决用户关心的核心问题,开发需要明确哪些是核心功能,哪些只是辅助功能。开发时,核心功能的优先级最高。
- 用户权限需求
- 管理员权限:审批和注销普通用户,改普通用户信息,监控和管理监控平台。
- 普通用户权限:查看监控平台的监控信息。
- 监控内容需求
- 服务器设备的基本信息,如:CPU信息,操作系统信息,host信息,硬盘,内存容量,时间等。
- 服务器系统实时信息,如:负载信息,内存使用率,硬盘使用率等。(可以参考 Linux top 命令来学习)
- 服务器应用实时信息,比如服务器上安装的 MySQL 数据库:mysqld 运行状态,包括进程ID,进程状态,内存使用,CPU消耗,运行时长等。
- 被监控的服务器应用可配置,以防止用户增加或者减少监控应用范围。
- 服务器类型:Linux 为主,是否需要兼容 Windows 服务器等。
思路扩展:可以思考是否使用配置的方式来使软件监控范围可扩展,避免使用 hard code 方式写死应用。配置方式是否需要支持 C/B 端配置等等。
- 监控要求
- 监控的频率设置、监控范围设置等。
- 监控的服务器类型要求:Linux 型号等,Window 型号等。
- 监控服务器的分布要求:分布式、P2P、单台服务器、横向、纵向扩展服务等。
思路扩展:是否需要支持报警,日志记录,日志分析等功能。
软件总体设计:
架构分析:
使用什么样的架构能覆盖这种需求,如何去安装,如何去发送和接收监控信息,怎样最容易扩展和配置是需要思考的问题。我们可以做成典型的 C/S 样式,在每个被监控的服务器上面安装监控服务,然后依次登录每台服务器的监控服务去查看和管理服务器,对于只有很少服务器需要监控的场景,此类设计可以简化开发。也可以集中到一台专门的监控服务器上面,收集被监控的服务器信息,让被监控服务器成为监控节点,访问者只登录专门的监控服务器即可查看所有的信息,此类设计较复杂,但扩展性好。我们选第二种尝试。
按照设计,软件应该被分为三部分部署:
- 监控平台服务器
- 安装监控服务主软件,支持客户端登陆访问。
- 负责收集各个监控节点服务软件发送来的监控信息。
- 分析和处理信息,形成报告。
- 可向各个监控节点发送管理命令。
- 可自动探测各个被监控点。
- 其他扩展功能。
- 监控节点服务器
- 安装监控服务节点软件,不支持客户端登陆访问。
- 负责收集本节点服务器的信息。
- 可配置和管理该节点收集信息的类型。
- 可接收来自主服务器的命令,管理本节点服务应用。
- 可生成日志信息等。
- 其他扩展功能。
- 监控管理客户端
- 安装客户端软件或者浏览器,取决于使用 C/S 还是 B/S。
- 可通过登录界面或者登录网址来登录监控平台。
- 普通用户可以查看当前用户可查看的信息。
- 管理员用户可以查看并管理被监控的所有服务器。
- 管理员用户可以管理普通用户的信息和权限。
- 其他扩展功能。
系统模块:
从设计上面,软件应该分为两个子系统:
- 服务器监控子系统:核心业务系统,负责整个监控系统的全部监控业务。
- 服务器信息收集模块:负责收集该节点服务器的基本信息、配置监控的服务应用信息。
- 服务器管理模块:负责接收管理命令和执行管理命令。
- 信息管理模块:该模块为通信模块,负责节点和主服务器的通信,负责汇总存储和处理收集的监控信息,负责给用户搜索和查找信息接口,负责提供发送命令接口。
- 用户访问模块:负责调取信息管理模块的接口,将监控信息展示给用户;
- 管理访问模块:负责提供管理界面给管理员,可根据管理员点击的命令,调取信息管理模块接口,管理相应节点服务器。
思路扩展:可以把通信模块单独抽取出来,形成一个统一的分布式通信模式。
- 用户管理子系统:辅助系统,负责实现用户提出的用户管理业务。
- 提供用户登录界面/网页。
- 提供所有用户访问节点监控信息的界面/网页。
- 提供管理员用户对普通用户的管理模块。
至此,该监控系统的大致框架基本完成,后续可能会适当修改模型,但大致框架不会改变。