可用性战术主要讲的是捕捉错误,主要战术有错误检测、错误恢复、错误预防等。所以在实现可用性方面,首先需要实现错误检测,所以在代码中尽量写一些捕捉错误的代码,如常见的try{}、catch{}等方法。当出现异常错误时能够及时的捕获并给出相应的提示,避免程序在运行过程中出现404-notfound烦人的提示页面等。对于错误预防方面在设计代码时,多使用自己熟悉的编程方法,这样是为了提高系统的稳定性,减少错误故障发生的概率。从而达到错误预防的目的。
一、错误检测
在代码编程中最常见的就是try{} catch{};如连接数据库:
1 try { 2 // 加载数据库驱动,注册到驱动管理器 3 Class.forName("com.mysql.jdbc.Driver"); 4 // 数据库连接字符串 5 String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8"; 6 // 数据库用户名 7 String username = "root"; 8 // 数据库密码 9 String password = "995893"; 10 // 创建Connection连接 11 Connection conn = DriverManager.getConnection(url, username, 12 password); 13 // 添加图书信息的SQL语句 14 // 获取Statement 15 Statement statement = conn.createStatement(); 16 17 ResultSet resultSet = statement.executeQuery("select * from result"); 18 19 while (resultSet.next()) { 20 entity book = new entity(); 21 book.setHotwords(resultSet.getString("hotwords")); 22 book.setNum(resultSet.getString("data")); 23 list.add(book); 24 } 25 resultSet.close(); 26 statement.close(); 27 conn.close(); 28 }catch (Exception e) { 29 e.printStackTrace(); 30 }
二、错误恢复
错误恢复由准备恢复和修复系统两部分组成。
⑴表决。运行在冗余处理器上的每个进程都具有相同的输入,它们计算发送给表决者的一个简单的输出值。如果表决者检测到单处理器的异常行为,那么就中止这一行为。表决算法可以是“多数规则”或“首选组件“或其他算法。该方法用于纠正算法的错误操作或者处理器的故障,通常用在控制系统。每个冗余组件的软件可以由不同的小组开发,并且在不同平台上执行。稍微好一点情况是在不同平台上开发一个软件组件,但是这样的开发和维护费用非常昂贵。
⑵主动冗余(热重启)。所有的冗余组件都以并行的方式对事件做出响应。因此他们都处在相同的状态。仅使用一个组件的响应,丢弃其他组件的响应。错误发生时,使用该战术的系统停机时间通常是几毫秒,因为备份是最新的,所以恢复所需要的时间就是切换时间。
⑶被动冗余(暖重启/双冗余/三冗余)
一个组件(主要的)对事件做出响应,并通知其他组件(备用的)必须进行状态更新。当错误发生时,在继续提供服务前,系统必须首先确保备用状态是最新的。该方法也用在控制系统中,通常情况是在输入信息通过通信通道或传感器到来时,如果出现故障必须从主组件切换到备用组件时使用。
⑷备件
备用件是计算平台配置用于更换各种不同的故障组件。出现故障时,必须将其重新启动为适当的软件配置,并对其状态进行初始化。定期设置持久设备的系统状态的检查点,并记录持久设备的所有状态变化能够使备件设置为适当的状态。这通常用作备用客户机工作站,出现故障时,用户可以离开。该战术的停机时间通常是几分钟。
三、错误预防
错误预防分为从服务中删除事务、进程监视器
删除事务最简单的代码层实现就是连接数据库成功之后关闭数据库连接
1 try { 2 if (ps != null) { 3 ps.close(); 4 ps = null; 5 } 6 if (conn != null) { 7 conn.close(); 8 conn = null; 9 }
进程监视器:
当检测到进程中存在错误,监视进程就会删除一些未执行的进程,让整个进程处于一个合适的状态。