今年的系统架构师考试马上就要开始了,在此进行了一次核心要点总结,与大家一起分享。
一、质量属性:
1、性能:系统的响应能力,即要经过多长时间才能对某个事件作出响应或者在某段时间内系统所能处理事件的个数。架构设计策略:增加计算资源、改善资源需求(减少计算复杂度等)、资源管理(并发、数据复制等)和资源调度(先进先出队列、优先级队列等)
2、可用性:系统能够正常运行的时间比例。架构设计策略:Ping/Echo、心跳、异常和信息主动冗余等。
3、可靠性:软件系统在应用或错误面前,在意外或错误使用的情况下维持软件系统功能性的能力。架构设计策略:运行时注册,主动冗余 可靠性的计算、检错技术和容错技术
4、健壮性:处理环境中,系统能够承受压力或变更的能力。
5、安全性:系统向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。架构设计策略:抵御攻击(授权、认证和限制访问等)、攻击检测(入侵检测等)、从攻击中恢复(部分可用性策略)和信息审计等。
6、可修改性:能快速的以较高的性能价格比对系统进行变更。架构设计策略:软件模块泛化、限制模块之间通信、使用中介、信息隐藏、延迟绑定等。
7、可变性:体系结构经扩充或变更成为新体系结构的能力。
8、易用性:用户使用一个软件产品完成指定任务的难易程度。
9、可测试性:软件发现故障并隔离、定位其故障的能力特性,以及在一定时间或成本前提下,进行测试设计、测试执行的能力。架构设计策略:记录-回放
10、功能性:系统所能完成所期望工作的能力。
11、互操作性:系统与外界或系统与系统之间的相互作用的能力。
二、“4+1”视图
对逻辑架构进行描述,最早由 Philippe Kruchten 提出,他在1995年的《IEEE Software》上发表了题为《The 4+1 View Model of Architecture》的论文,引起了业界的极大关注,并最终被 RUP 采纳,现在已经成为架构设计的结构标准。
逻辑视图(Logical View),设计的对象模型(使用面向对象的设计方法时)。
过程视图(Process View),捕捉设计的并发和同步特征。
物理视图(Physical View),描述了软件到硬件的映射,反映了分布式特性。
开发视图(Development View),描述了在开发环境中软件的静态组织结构。
架构的描述,即所做的各种决定,可以围绕着这四个视图来组织,然后由一些用例 (use cases)或场景(scenarios)来说明,从而形成了第五个视图。
三、经典软件体系结构风格
1、虚拟机风格:java虚拟机
2、事件驱动风格:图形用户界面
3、管道-过滤器风格:数据内容的逐步分解与分阶段处理。适合服务器服务端处理软件的要求。
4、隐式调用风格:回调机制,集成调试器,根据外部事件进行响应的场景。
5、解释器风格:强调用户定义系统中对象的关系和行为这一特性,需要在软件架构层面提供一种运行时的系统行为定义与改变的能力。
6、过程控制风格:实时获取外界信息,与用户自定义信息进行比较并作出动作。
7、黑板风格:正确结果不止一个,求解过程比较复杂,需要通过专家只是和反馈逐步得到正确的结果。比如人工智能等。
8、数据共享风格:关注编译过程和程序的中间表示,围绕程序的各种形态进行转化与处理,针对程序的各种形态建立数据库,通过中心数据库进行转换与处理。
四、架构模式、惯用法、设计模式
1、架构模式:设计软件中的高层决策,反映了开发软件系统过程中所做的基本设计决策;
2、设计模式:主要关注软件系统的设计,与具体的实现语言无关;
3、惯用法:实现时通过某种特定的程序设计语言来描述构建于构建之间的关系,例如C++语言中的引用-计数
五、设计模式
1、装饰模式:能够动态的对一个对象进行功能上的扩展,也可以对其子类进行功能上的扩展。
2、观察者模式:对于某个具体固定结构的活动节点需要多种处理能力,且处理能力可扩展,也就说要求在不改变原来类结构(活动节点)的基础上增加新功能。
3、工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类
4、责任链模式:很多对象由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某个对象决定处理此请求。
5、中介者模式:用一个中介者对象封装一系列的对象交互。
6、代理模式:提高系统效率,避免同时创建对象。
7、命令模式:将请求、动作封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。
8、组合模式:(整体-部分模式)通过多个对象形成属性结构以表示整体-部分的结构层次。对单个对象(叶子对象)和组合对象(容器对象)的使用具有一致性。
六、权衡点和敏感点
敏感点是一个或多个构件(或之间的关系)的特性
权衡点是影响多个质量属性的特性,是多个质量属性的敏感点。
其实绝大多数考虑都是基于权衡点来考虑的,在某个权衡点上考虑时,某些构件对于某一点比较敏感。可见敏感点是从构件角度来考虑,权衡点是从构件交互的角度来考虑。