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