• 可用性质量属性以及战术分析


    • 概念
      • 提示
        • 为什么这样设计
        • 解决什么问题
        • 实现的过程
        • 难度是什么
      • 可用性概念
        • 系统提供持续性服务的能力
      • 构架和质量属性的关系
        • 构架对软件功能的分配决定了其对质量属性的支持
        • 不同的构架不同的质量属性要求
        • 构架对质量属性的达成是关键的,仅靠构架是无法达成质量属性的
      • 质量属性的达成
        • 设计
        • 实现
        • 部署
      • 满意的质量属性
        • 构架:设计
          • 系统有哪些元素组成
          • 元素相互之间怎么交互
          • 有怎样的关系
          • 形成怎样的结构
          • 总结:构架性的因素的达成需要多个元素的合作
        • 非构架:细节(实现和部署)的正确处理
          • 元素内部实现
          • 算法的选择
          • 编码实现
      • 可用性与系统故障以及相关后果有关
        • 如何检测系统故障
        • 系统故障发生的频度
        • 允许系统多长时间非正常运行
    • 可用性战术分类
      • 错误检测
        • 命令/响应
          • 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";

             

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

  • 相关阅读:
    MQ、JMS以及ActiveMQ 关系的理解
    java对象 深度克隆(不实现Cloneable接口)和浅度克隆
    crontab 各参数详解及如何查看日志记录
    mybatis xml 文件中like模糊查询
    jexl2 执行字符串Java代码
    java代码执行字符串中的逻辑运算方法
    mybatis 传入多个参数
    mybatis通用mapper源码解析(二)
    mybatis通用mapper源码解析(一)
    mybatise插件反向生成数据库表相关Java代码
  • 原文地址:https://www.cnblogs.com/quxiangjia/p/12410414.html
Copyright © 2020-2023  润新知