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