《信息领域热词分析》之在代码层实现可用性战术

可用性是指系统正常工作的时间所占的比例。可用性会遇到系统错误,恶意攻击,高负载等问题的影响。主要分为下面三个方面:

① 错误检测

命令/响应:一个构件发出一个命令,并希望在预定义的时间内收到一个来自审查构件的响应,例如远程错误的检测。

心跳(计时器):一个构件定期发出一个心跳消息,另一个构件收听到消息,如果未收到心跳消息,则假定构件失败,并通知错误纠正构件。

异常:当出现异常时,异常处理程序开发执行。

 ② 错误恢复

表决:通过冗余构件(或处理器)与表决器连接,构件按相同的输入及算法计算输出值交给表决器,由表决器按表决算法(如多数规则)确定是否有构件出错,表决通常用在控制系统中。

主动冗余(热重启、热备份):所有的冗余构件都以并行的方式对事件做出响应。它们都处在相同的状态,但仅使用一个构件的响应,丢弃其余构件的响应。错误发生时通过切换的方式使用另一个构件的响应。

被动冗余(暧重启/双冗余/三冗余):一个构件(主构件)对事件做出响应,并通知其他构件(备用的)必须进行的状态更新(同步)。当错误发生时,备用构件从最新同步点接替主构件的工作。

备件:备件是计算平台配置用于更换各种不同的故障构件。

状态再同步:主动和被动冗余战术要求所恢复的构件在重新提供服务前更新其状态。更新方法取决于可以承受的停机时间、更新的规模及更新的内容多少。

检查点/回滚:检查点就是使状态一致的同步点,它或者是定期进行,或者是对具体事件做出响应。当在两检查点之间发生故障时,则以这个一致状态的检查点(有快照)和之后发生的事务日志来恢复系统(数据库中常使用)。

 ③ 错误预防

从服务中删除:如删除进程再重新启动,以防止内存泄露导致故障的发生。

事务:使用事务来保证数据的一致性,即几个相关密切的步骤,要么全成功,要么都不成功。

进程监视器:通过监视进程来处理进程的错误。

 

可用性战术的分类:

  

   在代码层面我们实现可用性战术我认为就是建立健全的错误检测和处理机制。在错误检测方面,我们常用的就是对用户的输入进行检测,以《信息领域热词分析》项目为例,我们不仅要在用户输入时进行检测,也要在数据交换、传输等各方面进行检测。在代码上我们可以采取异常处理机制以及输出必要的提示信息,一方面提示用户,同时另一方面也提醒开发人员。当然,错误是不可避免的,所以我们更需要做的是在出现错误后及时解决错误,这就需要我们在代码层面建立恢复和修复机制。在错误恢复方面我们主要是建立备份,在代码层我觉得更主要是通过程序的响应时间来判断程序是否运行正常,进而通过函数调用恢复到上一个状态。最后,我们同样需要预防错误的发生,比如在代码层面我们可以使用监视器,我这里说的监视器主要是对时间的监听,然后进一步达到错误预防的目的。

       下面就是常用手段:在实现可用性方面,在代码中要尽可能的使用try/catch,出现异常时要及时的捕获并给出提示,避免程序在运行过程中出现一些不友好的界面,给用户一种不愉快的体验。设计代码时,尽可能多的应用自己熟知的技术方法,这样能够提高系统的稳定性,减少故障发生的概率。在这个方面遇到的主要难题是如何将自己掌握的技术拼接应用到该系统,过程中会有一些实现不了的功能,需要借助网络资源,学习一些新的方法,将自己的方法完整且适合的衔接起来,组成一个功能模块。如:

try {
         if(connection!=null)
         {
             connection.close();
         }
        
    } catch (SQLException e) {
        
        e.printStackTrace();
    }





  错误预防方面:从服务中删除:从操作中删除系统的一个组件,以执行某些活动来预防预期发生的故障。比如说在连接数据库,进行完操作之后,需要对连接组件进行关闭,防止重复开启发生故障,这一点我们用的最多的就是在获取数据库的数据以后要关闭某些服务。如:

    finally {
            Util.DBUtil.close(connection);
            Util.DBUtil.close(preparedStatement);
            Util.DBUtil.close(resultSet);
        }

原文地址:https://www.cnblogs.com/qianmo123/p/12395459.html