1可用性
可用性与系统故障及其相关后果有关。当系统不再提供其规范中所说明的服务时,就出现了系统故障。
所关注的方面有:
(1)如何检测系统故障
(2)系统故障发生的频度
(3)出现故障时会发生什么情况
(4)允许系统有多长时间非正常运行
(5)什么时候可以安全地出现故障
(6)如何防止故障的发生以及故障时要求进行哪种通知
一般将系统可用性定义为:可用性在ISO9241/11中的定义是:一个产品可以被特定的用户在特定的境况中,有效、高效并且满意得达成特定目标的程度。
维持可用性的方法包括:
(1)错误检测——用来检测故障的某种类型的健康监视,包括我们在系统运行中可能出现一些未知错误,造成的数据库丢失等问题;
(2)未能链接服务器:通过URL测试服务器是否可连接(服务是否开启,网络问题),提示错误信息,人工检测服务开启状态
(3)未能链接数据库服务:利用java的异常处理机制检测Driver正常连接,并提示错误信息,建立自定义的异常类, 根据错误信息人工检测服务开启状况
(4)自动恢复——检测到故障时某种类型的恢复;
(5)错误预防——阻止错误演变为故障
在去除服务器维护时间以外,基本可以保证每天24小时均是可用。服务器的维护时间,每次维护从检测到服务器故障到服务重启进行正常提供服务。满足可用性的要求。
可用性战术。可用性战术的目标是阻止错误发展成故障,至少能够把错误的影响限制在一定范围内,从而使修复成为可能。战术分为:错误检测、错误恢复、错误预防。
① 错误检测
命令/响应:一个构件发出一个命令,并希望在预定义的时间内收到一个来自审查构件的响应,例如远程错误的检测。
心跳(计时器):一个构件定期发出一个心跳消息,另一个构件收听到消息,如果未收到心跳消息,则假定构件失败,并通知错误纠正构件。
异常:当出现异常时,异常处理程序开发执行。
② 错误恢复
表决:通过冗余构件(或处理器)与表决器连接,构件按相同的输入及算法计算输出值交给表决器,由表决器按表决算法(如多数规则)确定是否有构件出错,表决通常用在控制系统中。
主动冗余(热重启、热备份):所有的冗余构件都以并行的方式对事件做出响应。它们都处在相同的状态,但仅使用一个构件的响应,丢弃其余构件的响应。错误发生时通过切换的方式使用另一个构件的响应。
被动冗余(暧重启/双冗余/三冗余):一个构件(主构件)对事件做出响应,并通知其他构件(备用的)必须进行的状态更新(同步)。当错误发生时,备用构件从最新同步点接替主构件的工作。
备件:备件是计算平台配置用于更换各种不同的故障构件。
状态再同步:主动和被动冗余战术要求所恢复的构件在重新提供服务前更新其状态。更新方法取决于可以承受的停机时间、更新的规模及更新的内容多少。
检查点/回滚:检查点就是使状态一致的同步点,它或者是定期进行,或者是对具体事件做出响应。当在两检查点之间发生故障时,则以这个一致状态的检查点(有快照)和之后发生的事务日志来恢复系统(数据库中常使用)。
③ 错误预防
从服务中删除:如删除进程再重新启动,以防止内存泄露导致故障的发生。
事务:使用事务来保证数据的一致性,即几个相关密切的步骤,要么全成功,要么都不成功。
进程监视器:通过监视进程来处理进程的错误。
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(db_url, db_user, db_password);
} catch (Exception e) {
e.printStackTrace();
}
利用报警函数对系统运行进行监控
2可修改性
可修改性战术:包括局部化修改、防止连锁反应、推迟绑定时间。
(1)局部化修改:在设计期间为模块分配责任,以便把预期的变更限制在一定的范围内,从而降低修改的成本。
维持语义的一致性:语义的一致性指的是模块中责任之间的关系,使这些责任能够协同工作,不需要过多地依赖其他模块。耦合和内聚指标反映一致性,应该根据一组预期的变更来度量语义一致性。使用“抽象通用服务”(如应用框架的使用和其他中间软件的使用)来支持可修改性是其子战术。
预期期望的变更:通过对变更的预估,进行预设、准备,从而使变更的影响最小。
泛化该模块:使一个模块更通用、更广泛的功能。
限制可能的选择:如在更换某一模块(如处理器)时,限制为相同家族的成员。
(2)防止连锁反应:由于模块之间有各种依赖性,因此,修改会产生连锁反应。
(3)推迟绑定时间:系统具备在运行时进行绑定并允许非开发人员进行修改(配置)。
运行时注册:支持即插即用。
配置文件:在启动时设置参数。
多态:在方法调用的后期绑定。
构件更换:允许载入时绑定。
3性能
3.1性能战术:性能与时间相关,影响事件的响应时间有两个基本因素。
性能的战术有如下几种。
(1)资源需求::减少处理事件流所需的资源:提高计算效率(如改进算法)、减少计算开销(如在可修改性与性能之间权衡,减少不必要的代理构件)。
(2)减少所处理事件的数量:管理事件率、控制采样频率。
(3)控制资源的使用:限制执行时间(如减少迭代次数)、限制队列大小。
在热词展示一页,爬取到的热词能够达到秒级的相应
热词目录自动生成,速度更快
4安全性
5.可测试性
可测试性战术:包括输入/输出和内部监控。
测试连接数据库,并监控状态
public class DBUtil {
public static Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
e.printStackTrace();
}
String user = "root";
String password = "root";
String url = "jdbc:mysql://localhost:3306/pachong";
Connection connection = null;
try {
connection = DriverManager.getConnection(url,user,password);
System.out.println("ok");
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void close(Connection connection ) {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(PreparedStatement preparedStatement ) {
try {
if (preparedStatement != null) {
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet resultSet ) {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
6.易用性
易用性战术:包括运行时战术、设计时战术和支持用户主动操作。
(1)运行时战术:任务的模型:维护任务的信息,使系统了解用户试图做什么,并提供各种协助;
(2)设计时战术:将用户接口与应用的其余部分分离开来,预计用户接口会频繁发生变化,因此,单独维护用户接口代码将实现变更局部化。这与可修改性相关。
点击目录能自动爬取热词