SMS设计之我见

作为服务器中维护系统稳定性和可靠性的一个重要模块,SMS(System
management
service)起着承上启下的作用,它的下面是系统监控服务,直接接受监控模块传递过来的各种监控、状态及警告信息;而它的上面几乎直接面向用户,通过CLI命令、消息或者邮件向用户报告系统部件的警告信息,并给出解决的建议。

可以向SMS输出信息、报告警告状态的模块包括IPMI模块、磁盘模块、PCIE
CE/ME监控模块、电源模块等。不同模块发出的消息格式、内容以及消息存放格式和组织方式都有差异,这就要求SMS对下面提供的接口必须具有良好的兼容性,使得不同的模块都能顺利接入。并且,考虑实际的分工协作的开发过程,以及日益提高的系统复杂性,这就要求SMS必须保证有良好的扩展性,使得新的模块和功能容易加入进来。此外,可能还有更上层的应用需要查询SMS收集到的一些信息。那么,该如何实现所有的这些功能呢?根据笔者的经验,可以从如下的几点考虑:

1、对下面的子模块约定公共的接口函数

为了向上层报告各自模块的状态信息,子模块各自都需要实现一些函数,可以归纳出其中公共的函数,定义成一簇函数操作,从而抽象出公共的接口。每个子模块只需要实现和自己相关的这些函数簇。

2、下面的子模块通过注册的办法告知上层模块

子模块虽然实现了自己的一簇函数,但显然不宜由上层模块直接调用,否则加入、删除一个子模块的时候,都需要加入或者去掉和那个子模块对应的函数。因此,通过注册子模块函数簇组到上层模块的一个函数簇数组当中的办法,不仅仅解决了前面的问题,还一下子使得上下层之间的层次关系一目了然。

3、制定公共的警告统计、归集、存档的策略

下层的多个模块会不停地检测到它底下硬件的状况信息,并把这些信息记录在自己的域中。为此,上层模块只有通过调用底层模块提供给它的接口函数才能收集到各个模块的状态信息或者警告,进而根据指定的策略(比如根据接受到的警告、事件信息的个数是否超过阈值,没被处理的信息是否已经超时)进行上传、归档等操作。

4、对外提供抽象的接口

在实际的工程中,SMS通常作为一个daemon进程在不停地运行,和其下的系统监控模块daemon等互相通信。实际的应用场景中,可能还有上层的应用需要知道系统警告的总数和内容等信息,这就要求SMS除了实现daemon的功能外,还需要实现一些API库函数,以便其他的应用程序使用。

当然,上面的这些只是需要重点考虑的地方,但还不是全部。一个有经验的设计还应考虑到下面的这些问题:

1、为了优化性能,如何设计数据结构,保证上层模块查询ID连续的警告信息时优先从各个模块分配的存储空间而非统一的日志文件中去查询;

2、为了便于调式、加快测试,如何在开始编程时就考虑针对各个模块和系统的测试框架和代码。

3、为了更好地和上层应用交互,SMS本身提供的库需要那些特点才能保证上层应用效率更高。

总而言之,像SMS这种中间层的服务模块的设计和开发,既要从宏观上把握它的位置、功能和应用场景,又要从业务流程和逻辑上深入到它涵盖的各个子模块、相互关系,还要考虑到性能优化、代码可调试和测试驱动开发,这样才能开发出功能正确、性能可靠的系统软件。

时间: 2024-10-17 02:41:54

SMS设计之我见的相关文章

软件测试用例设计之我见

做测试的朋友们我相信大家都比较烦恼一个问题那就是如何设计出高效.快捷使用并且还能够详细记录各个功能点的测试用例.现在每个产品从设计上来说都很复杂,迭代更新快,验证时间短,尤其是在搞活动期间,更新是更快速更频繁的,这些就不说了,外加上PM和开发方面很多时候也是一片混乱,在所有的混乱中如何使用测试用例辅助性的引导每天的测试工作成了一大难题.用例就像一张地图一样引导着我们的测试工作,没有这个文档我们就没有办法把工作做到细化,也无法去培养新近工作人员. 从工作中我找到了一种办法.那就是以数据分布为导向的

都谈用户体验,用户体验到底做啥子--重新思考用户体验

没有哪个互联网产品不谈用户体验,也没有哪个互联网产品说自己不重视用户体验,用户体验,简单的说,就是用户在使用产品过程中建立起来的纯主观感受.实际上,以用户为中心的体验设计贯穿产品设计的始终,但这么说等于没说,究竟如何提升体验,现阶段我的思考,仅供参考. 重视第一印象.现在市场上应用如此之多,被下载安装到终端与用户见一面已是缘分不浅,好不好要不要留其实一瞬间基本可以做决定,如果无法为用户产生价值,不删除不取关不是因为喜欢你,而是没腾出手来干掉你.所以,重新扫描你的网站.应用,第一印象如何? 现阶段

红黑树设计思想之我见

具体算法可见[红黑树 - 维基百科,自由的百科全书](http://zh.wikipedia.org/zh/%E7%BA%A2%E9%BB%91%E6%A0%91) 最总完成代码见[algorithm/RBTree.h at master · liu946/algorithm](https://github.com/liu946/algorithm/blob/master/RBTree.h) ## 前言 说实话,我一星期前就开始着手写这次的数据结构作业了,AVL倒是容易,这个以前是理解的,在写这

DDD领域驱动设计基本理论知识总结

领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD.领域驱动设计分为两个阶段: 以一种领域专家.设计人员.开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型:由领域模型驱动软件设计,用代码来实现该领域模型:

负载均衡设计

最近要搭建一个高并发的网站.所以,得设计负载均衡这一块.从大的方向上讲,负载均衡分为硬负载均衡,和软负载均衡.下面依次简要说明一下: 硬负载均衡: 硬负载均衡,也就是使用专用的负载均衡设备.主流的硬负载均衡器有如下几种: F5:最主流的硬负载均衡器.便宜的20万以上,贵的100多万. 深信服:乞丐版低配12万元起价. A10:基本都在100万元以上. Array:16-100万. 看这价格就知道,硬负载均衡,一般的中小公司,都会被价格折磨.然后犹豫.最后放弃. 软负载均衡: 软软负载均衡,也就是

软件架构设计系列总结

架构引用维基百科:软件体系结构是构建计算机软件实践的基础.与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础.从和目的.主题.材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟.一个软件架构师需要有广泛的软件理论知识和相应的经验来实施和管理软件产品的高级设计.软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作.逻辑和流程.软件

网页设计中的切图

一般的网站制作步骤大体上为:设计效果图–>切图+制作静态html模板–>嵌套至CMS,其中,切图虽然是很简单的一个步骤,但其中也有很多技巧,以下是我个人总结出来的几点. 总体上,把握一个原则,能用css写的,坚决不要用图片. 经验告诉我们,首页图片很多的网站打开会很慢,一是因为图片多,需要下载的文件体积就增大,二是每一个图片下载都会对服务器有一个请求,增大了浏览器与服 务端的交互次数,如果能把纯色的部分用css来写,而不因为省事直接切图,就会极大提高网站的运行效率,我最早开始学习制作网站时,就

(转载)Java程序员应当知道的10个面向对象设计原则

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面.学习面向对象编程像"抽象"."封装"."多态"."继承" 等基础知识是重要的,但同时为了创建简洁.模块化的设计,了解这些设计原则也同等重要.我经常看到不同经验水平的java程序员,他们有的不知

优酷、YouTube、Twitter及JustinTV视频网站架构设计

优酷视频网站架构 一.网站基本数据概览 据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据成为google榜单中国内视频网站排名最高的厂商.     硬件方面,优酷网引进的戴尔服务器主要以 PowerEdge 1950与PowerEdge 860为主,存储阵列以戴尔MD1000为主,2007的数据表明,优酷网已有1000多台服务器遍布在全国各大省市,现在应该更多了吧. 二.网站前端框架 从一开始,优酷网就自建了一套CMS来解决前