可用性战术目标:可用性战术将会阻止错误发展为故障,或者至少能够把错误的影响限制在一定的范围内,从而使系统恢复成为可能。
维持可用性的方法包括:
错误检测——用来检测故障的某种类型的健康监视
自动恢复——检测到故障时某种类型的恢复
错误预防——阻止错误演变为故障
错误检测包括以下三个战术:
1、信号/响应:一个组件发出一个信号,并希望在预定义的时间内收到一个来自审查组件的响应,该战术可以用在共同负责某项任务的一组组件内。
2、心跳:
一个组件定期发出一个心跳信息,另一个组件收听该信息。心跳还可用于传递数据。
3、异常:异常处理程序通常将错误在语义上转换为可以被处理的形式,异常通常与引入异常的程序在同一个进程中。
错误恢复包括以下七个战术:
1、表决:运行在冗余处理器上的每个进程都具有相等的输入,它们计算的值都发给表决者,表决者发现异常则终止进程。2、主动冗余:所有的冗余组件都以并行的方式对事件做出响应,它们的状态都相同,但每次只使用一个组件的响应而丢弃其余组件的响应。
3、被动冗余:主组件对事件做出响应,并通知其它备用组件必须进行的状态更新。这样,主/从组件的状态是一致的;被动冗余通常用在控制系统中,恢复时间一般在几秒内;在被动冗余中,主组件负责状态同步。
4、备件:备件是计算平台配置用于更换各种不同的故障组件。出现故障时,必须将其重新启动为适当的软件配置,并对其状态进行初始化。
5、Shadow操作:出现故障的组件可以以“shadow模式”运行,这样可以在系统恢复前模仿工作组件的行为。
6、状态再同步:主动和被动冗余战术要求所恢复的组件在重新提供服务前更新其状态。
7、检查点/回滚:检查点就是记录所创建的一致状态,遇到故障,可以使用上次正确的检查点状态。
错误预防包括以下三个战术:
1、从服务中删除:该战术从操作中删除了系统的一个组件,以执行某些活动来防止预期发生的故障,比如重新启动备用组件阻止当前组件的内存泄漏。
2、事物:事务是指绑定几个有序的步骤,以能够立刻撤销这个绑定,可以使用事务来防止任何数据受到影响。
3、进程监视器:监视进程中存在的错误,如果发现错误,则删除该执行进程,并为该进程创建一个新的实例。
就《XXX重大技术需求征集系统》而言,为了维持可用性我们可以采取以下几个措施:
1、用户登录时检查登录状态,如果登录成功却还连续不断的反复登录,此时应予以警告并暂时限制登录。
2、用户登录后长时间无操作,应强制其退出登录。
3、用户登录后能够进行超出其权限的操作后,应撤销操作,予以警告,并将问题反馈给管理员。
4、用户提交信息时应进行过滤,阻止其提交错误信息。
5、系统运行出现问题时,能够返回到前一步正确状态,并撤销之前的错误操作。
6、对系统设置及数据进行备份。
7、服务器出现故障停止运行时,能重新启动。
可修改性战术目标:控制实现、测试和部署变更的时间和成本。
可修改性战术分为三类:
1、局部化修改——目标是减少由某个变更直接影响的模块的数量
2、防止连锁反应——目标是限制对局部化的模块的修改,防止对某个模块的修改间接地影响到其他模块
3、延迟绑定时间——目标是控制部署时间并允许非开发人员进行修改
局部化修改:
1、预期期望的变更:根据语义一致性原则,预测期望变更的战术并不关心模块责任的一致性,而是关心将变更的影响最小化。
2、维持语义一致性:语义一致性是模块中责任之间的关系,目标是确保所有这些责任都能够协同工作,不需要过多地依赖其它模块,即这组模块的内聚性。
3、泛化模块:使一个模块更通用能够使他根据输入计算更广泛的功能;模块越通用越有可能通过调整语言而非修改模块来进行请求变更。
4、限制选择参数:限制可能的选择将会降低这些修改所造成的影响,比如我们将可选择的处理器或操作系统限定在一定的范围内。
防止连锁反应:
1、信息隐藏:目的是将变更隔离在一个模块内,防止变更扩散。
2、维持现有接口:如果B依赖于A的一个接口的名字和签名,则维持该接口及其语法能够使B保持不变。
3、限制通信路径:限制与一个给定的模块共享数据的模块,包括生产和使用该模块的数据。
4、适用仲裁者:在A与B之间插入一个仲裁者,以管理A与B之间依赖的相关活动。
延迟绑定时间:
1、推迟绑定时间:支持部署时间及允许非开发人员修改。
就《XXX重大技术需求征集系统》而言,为了维持可修改性我们可以采取以下几个措施:
1.框架级可修改性:平台代码、应用代码、后台横块代码分离。
2.场景开发可配置:终端组件化、终端常量配置、报文配置。
3.企业服务可修改性:根据场景、调用后台模块出参入参可配原性修改,服务变更无需通过编码即可修改。
4.适配器可修改性:根据后台模块划分为不同的适配器。
5.部署与中间件可修改:采用2E应用,因此与操作系统无关。目前采用的Webloglc应用服务器基本上可以替换为其它应用服务器;数据库目前采用的为DB2,如果变更数据库,则需按照即本初始化系统运行的环境,包括存储过程的创建、初始化等。