质量属性——可用性战术
战术就是影响质量属性响应控制的设计决策,共包括六种战术:
可用性战术
可修改性战术
性能战术
安全性战术
可测试性战术
易用性战术
战术的集合称为“构架设计策略”
可用性与系统故障及其后果相关。
当系统不再提供其规范中所说的服务时,就出现了系统故障。
系统用户可以观察到此类故障。
可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的。可用性战术将会阻止错误发展为故障,或者至少能够把错误的影响限制在一定范围内,从而使系统恢复成为可能。
衡量系统的可用性可以用公式 MTBF/(MTBF+MTTR),其中MTBF为系统出错的时间间隔也就是平均正常工作时间,而MTTR表示系统修复错误用的时间。当然上面的公式计算出的结果越大表示系统的可用性越好
可用性关注的问题
如何检测故障
发生故障的频度
出现故障时的现象
系统故障排除的时限
如何防止故障的发生
发生故障时的处理
维持可用性的方法包括:
错误检测——用来检测故障的某种类型的健康监视;
自动恢复——检测到故障时某种类型的恢复;
错误预防——阻止错误演变为故障。
信号响应
void sigdemo(int sig) { printf("Receive a signal:%s\n",strsignal(sig)); } int main() { if(signal(SIGINT,sigdemo) == SIG_ERR) { perror("signal()"); return ; } printf("Main started.\n"); pause();//wait a signal. }
心跳
发送方按照一定规则(周期性发送、空闲发送等等)向接收方发送固定格式的消息,接受方收到消息后回复一个固定格式的消息,如果长时间没有收到,比如心跳周期的3倍,则认为当前连接失效,将其断开。
注:发送方可以是客户端或者服务端,根据实际情况而定,常见是客户端作为发送方。
//心跳检测 var heartCheck = { timeout: 3000, //每隔三秒发送心跳 severTimeout: 5000, //服务端超时时间 timeoutObj: null, serverTimeoutObj: null, start: function(){ var _this = this; this.timeoutObj && clearTimeout(this.timeoutObj); this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj); this.timeoutObj = setTimeout(function(){ //这里发送一个心跳,后端收到后,返回一个心跳消息, //onmessage拿到返回的心跳就说明连接正常 ws.send("123456789"); // 心跳包 //计算答复的超时时间 _this.serverTimeoutObj = setTimeout(function() { ws.close(); }, _this.severTimeout); }, this.timeout) } }
在进行软件项目开发时,使用try catch进行异常的捕捉抛出,降低检查错误的时间
try { Class.forName("com.mysql.cj.jdbc.Driver"); // 加载驱动 System.out.println("加载驱动成功!!!"); } catch (ClassNotFoundException e) { // TODO: handle exception e.printStackTrace(); }
表决
运行在冗余处理器上的每个进程都具有相等的输入,它们计算的值都发给表决者,表决者发现异常则终止进程。
主动冗余所有冗余组件并行对事件做出响应恢复时间为几毫秒 被动冗余主件通知备件响应恢复时间为几秒内
为什么主动冗余更快,还要存在被动冗余呢?
shadow 类似于影子系统
检查点回滚 在win10系统中可以建立一个检查点,出现故障时可以恢复
在进行信息爬取的过程中,是程序进行短时间休眠,减少网站压力,防止被限制,从而出现故障
import time time.sleep(5) # sleep 5 秒