可用性

可用性战术将会阻止错误发展为故障,或者至少能够把错误的影响限制在一定范围内,从而使系统恢复成为可能。

 

可用性战术分类

  • 错误检测
    • 命令/响应
      • 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
            • 异常/中断
              • 抛出异常机制
                • 数据库连接代码,抛出异常
                  • 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
                  复制代码

                   

                   
          •  代码层面

            • 保证服务是无状态的,可以支持水平扩展 

              • data : dataList
              • 服务和上下文无关,只和每次请求有关

            • 数据库数据请求限制

              •   

                String sql = "select * from word limit 10";

                 

                 

              •   限制每次请求的数据量,分批次请求     

posted @ 2020-03-03 09:14  至尊小虾米  阅读(514)  评论(0编辑  收藏  举报