《信息领域热词分析》可用性战术

首先可用性是指:系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的。

 对于可用性来说所关注的问题就是:

1如何检测故障

2发生故障的频度

3出现故障时的现象

4系统故障排除的时限

5如何防止故障的发生

6发生故障时的处理

所以对于可用性战术来说主要就是关心提前的预判错误容易发生的地方阻止错误发展为故障,或者至少能够把错误的影响限制在一定范围内,从而使系统恢复成为可能。要尽可能的考虑如何将错误最小化,以及当错误发生出现系统故障是如何快速的进行恢复:

所以可用性战术主要有三个方面:

1.错误检测——用来检测故障的某种类型的健康监视;

2.自动恢复——检测到故障时某种类型的恢复;

3.错误预防——阻止错误演变为故障。

错误检测:

信号/响应(ping/echo):一个组件发出一个信号,并希望在预定义的时间内收到一个来自审查组件的响应,该战术可以用在共同负责某项任务的一组组件内。(主动询问的方式,例如课堂点名)

心跳(heartbeat):一个组件定期发出一个心跳信息,另一个组件收听该信息。心跳还可用于传递数据。(被动查询,例如领导视察工作)

异常(exceptions):异常处理程序通常将错误在语义上转换为可以被处理的形式,异常通常与引入异常的程序在同一个进程中。(通过判断是否出现错误,根据不同情况采用不同的措施)

错误恢复:

表决(voting):运行在冗余处理器上的每个进程都具有相等的输入,它们计算的值都发给表决者,表决者发现异常则终止进程

主动冗余(Active redundancy ):所有的冗余组件都以并行的方式对事件做出响应,它们的状态都相同,但每次只使用一个组件的响应而丢弃其余组件的响应;(将所有数据主动同步到另一台机器上,错误恢复仅仅在几毫秒内  热重启)

 被动冗余(passive redundancy ):主组件对事件做出响应,并通知其它备用组件必须进行的状态更新。这样,主/从组件的状态是一致的;(主组件响应之后,备份才发生,与主动冗余相比,还是存在一定的时延,若是主组件发生错误,备份可能并不完整,所以恢复要在几秒内  暖重启)

备件(spare):备件是计算平台配置用于更换各种不同的故障组件。出现故障时,必须将其重新启动为适当的软件配置,并对其状态进行初始化。(重启时间需要几分钟)

Shadow操作:出现故障的组件可以以“Shadow模式”运行,这样可以在系统恢复前模仿工作组件的行为;(恢复最基础的功能,解决系统完全奔溃无法启动的问题)

状态再同步(State resynchronization):主动和被动冗余战术要求所恢复的组件在重新提供服务前更新其状态。

检查点/回滚(Checkpoint/rollback):检查点就是记录所创建的一致状态,遇到故障,可以使用上次正确的检查点状态;(设立检查点,恢复到正确的位置)

错误预防:

从服务中删除(removal from service):该战术从操作中删除了系统的一个组件,以执行某些活动来防止预期发生的故障,比如重新启动备用组件阻止当前组件的内存泄漏;

事务(transactions):事务是指绑定几个有序的步骤,以能够立刻撤销这个绑定,可以使用事务来防止任何数据受到影响;

进程监视器(process monitor):监视进程中存在的错误,如果发现错误,则删除该执行进程,并为该进程创建一个新的实例。

对于所做的《热词分析的程序来说》主要用到的还是错误检测的方式

首先对于热词搜索就采用输入框联想的功能,当用户输入相关字段的时候,直接匹配数据库中的热词信息,由此来限制用户的查询输入,处理热词查询为空到 情况

另外对于数据库的相关操作方面都采用异常的方式处理,通过try catch方法进行异常处理,通过判断系统的响应判断是否成功

相关代码:

//连接
 try{
             Class.forName(driver);//加载驱动类
             conn=DriverManager.   
                     getConnection(url,user,password);//(url数据库的IP地址,user数据库用户名,password数据库密码)
         }catch(Exception e){
             e.printStackTrace();
         }

//数据的查询

try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            Reci course = null;
            while (rs.next()) {
                int id = rs.getInt("id");
                String word2 = rs.getString("word");
                String jieshi = rs.getString("jieshi");
                String dizhi = rs.getString("dizhi");
                course = new Reci(id,word2,jieshi,dizhi);
                list.add(course);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            BaseConnection.close(rs, state, conn);
        }

另外对于数据库来说要随用随关,这就是采用服务删除的方式,当操作结束后关闭数据库服务,防止信息的泄露

if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            
            if (state != null) {
                try {
                    state.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
原文地址:https://www.cnblogs.com/1gaoyu/p/12398001.html