可用性
可用性战术将会阻止错误发展为故障,或者至少能够把错误的影响限制在一定范围内,从而使系统恢复成为可能。
可用性战术分类
- 错误检测
- 命令/响应
- ajax询问响应
-
-
-
-
-
-
1 $.ajax({ 2 type : 'post', //传输类型 3 async : false, //同步执行 4 url : 'WordServlet', //web.xml中注册的Servlet的url-pattern 5 data : {}, 6 dataType : 'json', //返回数据形式为json 7 success : function(result) { 8 if (result) { 9 for (i = 0; i < result.length; i++) { 10 dataList.push({ 11 name : result[i].word, 12 value : result[i].num 13 }); 14 } 15 } 16 }, 17 error : function(errorMsg) { 18 alert("加载数据失败"); 19 }
-
-
- 心跳
- servlet主动发消息告诉页面,从数据库里面是否取值成功
-
1 JSONArray json = JSONArray.fromObject(barArr); 2 // 控制台显示JSON 3 System.out.println(json.toString()); 4 // 返回到JSP
-
- servlet主动发消息告诉页面,从数据库里面是否取值成功
- 异常/中断
- 抛出异常机制
- 数据库连接代码,抛出异常
-
1 try { 2 rs.close(); 3 } catch (SQLException e) { 4 e.printStackTrace(); 5 }
-
- 数据库连接代码,抛出异常
- 抛出异常机制
-
- 错误恢复
- 准备恢复
- 恢复系统
- 具体
- 表决
- 运行在冗余处理器上的每个进程都具有相等的输入,它们计算的值都发给表决者,表决者发现异常则终止进程,该方法用于纠正算法的错误操作或处理器的故障,通常用在控制系统中
- 主动冗余
- 所有的备份的组件都以并行的方式对事件做出响应,它们的状态都相同,但每次只使用一个组件的响应而丢弃其余组件的响应;主动冗余通常用在客户机或服务器的配置中,在这种配置中,即使发生错误,也可在极短的时间,通常为几毫秒内恢复,比如门户网站采取的策略
- 被动冗余
- 主组件对事件做出响应,并通知其它备用组件必须进行的状态更新
- 备件战术
- checkpoint
- logging
- 备件是计算平台配置用于更换各种不同的故障组件。出现故障时,必须将其重新启动为适当的软件配置,并对其状态进行初始化
- 重新引入战术
- shadow操作
- 出现故障的组件可以以“Shadow模式”运行,这样可以在系统恢复前模仿工作组件的行为
- 表决
- 错误预防战术
- 从服务中删除事务
- 关闭数据库连接
-
1 try { 2 if (ps != null) { 3 ps.close(); 4 ps = null; 5 } 6 if (conn != null) { 7 conn.close(); 8 conn = null; 9 }
-
- 关闭数据库连接
- 进程监视器
- 一旦检测到进程中存在错误,监视进程就可以删除非执行进程,并为该进程创建一个新的实例,就像在备件战术中一样,初始化为某个适当的状态。
- 从服务中删除事务
-
- 保证服务可用性
- 构架方面
- 异步调用
- 使用ajax技术采用异步调用的方式调用被调服务,有利于将主调服务和被调服务进行解耦,同时提高系统的处理性能
-
$.ajax({ type : 'post', //传输类型 async : false, //同步执行 url : 'WordServlet', //web.xml中注册的Servlet的url-pattern data : {}, dataType : 'json', //返回数据形式为json success : function(result) { if (result) { for (i = 0; i < result.length; i++) { dataList.push({ name : result[i].word, value : result[i].num }); } } }, error : function(errorMsg) { alert("加载数据失败"); } });//AJAX
-
- 使用ajax技术采用异步调用的方式调用被调服务,有利于将主调服务和被调服务进行解耦,同时提高系统的处理性能
- 异步调用
-
代码层面
-
保证服务是无状态的,可以支持水平扩展
-
data : dataList
-
服务和上下文无关,只和每次请求有关
-
-
数据库数据请求限制
-
String sql = "select * from word limit 10";
-
限制每次请求的数据量,分批次请求
-
-
- 构架方面
-
- 命令/响应