每一种架构模式都有它的优缺点以及潜在风险,选择正确模式来满足需求功能和质量特性是非常重要的.质量特性在需求分析过程中已经定义了, 质量特性可分为三种类型:
1. 实现特性.
* 协作性.在内部组件与外界通用访问与交换数据. 协作性需要松散依赖的基础架构.
* 可维护性与扩展性. 修改系统与方便地扩展的能力.
* 可测试性. 帮助系统创建测试用例. 可测试性通常需要完整的系统设计与实现文档.
* 轻便性. 系统级的独立于软件与硬件平台. 系统开发用高级编程语言通常具有这个特性. 一个典例的例子就是JAVA, 大多数JAVA程序编译一次可以在任何地方运行.
* 伸缩性. 适用增加用户请求量的能力. 系统设计中伸缩性是比较讨厌的瓶颈.
* 灵活性. 系统易于修改适应于非原始设计的系统不同环境或问题, 系统开发使用面向组件或面向服务的架构通常处理这个特性.
2. 运行时特性.
* 可用性. 一个系统应该具有24/7的能力. 可用性通过复制与谨慎设计可应付硬件, 软件, 网络故障来实现.
* 安全性. 一个系统应对内外界各种类型的攻击. 安全性能通过安装防火墙, 创建认证与授权过程与使用加密.
* 性能. 增加一个系统效率系统到响应时间, 吞吐量, 资源利用, 通常与其它几个特性呈对立系统.
* 易用性. 用户使用系统时感到满意. 易用性包含完整性, 正确性, 兼容性几个因素, 也包括友好的用户界面, 完整文档与技术支持.
* 可靠性. 准确的输出结果. MTTF(平均失效前时间), 从故障中恢复, 故障预测.
* 可维护性(扩展性, 适用性,可服务性, 测试性, 兼容性, 可配制性, 软件系统易于修改.
3. 业务特性.
* 市场时效性. 从需求分析到产品发布之日所需时间.
* 成本. 构建到运维系统的消耗.
* 生命周期. 一个产品”存活”到”退休”期间时间
在大多数情况下,没有一个单一架构模式能同时满足所有质量特性. 软件架构师通常需要在很多特性之间做出权衡. 典型成对应系统质量特生有这些:
* 空间与时间的取舍. 空间换时间, 或是时间换空间.
* 可靠性与性能的取舍. 例如, 像CSharp这样的语言实现防止内存溢出可能, 但纯C语言使用指针可以性能高但可靠性低.
* 可伸缩性与性能的取舍. 例如, 一个典型的方法来提高服务的可伸缩性运用复制服务器。 为了确保所有服务器的一致性,以确保每个服务器都有相同的一致性的数据,整个服务的性能就会受到影响。
在选择架构模式时,不能满足所有的质量特性,系统分析师或软件架构师需要与客户一起来确定质量特性的优先级。通过枚举备选体系结构设计和计算加权来评价质量属性, 以便软件架构师可以优化设计与选择最合适的方案。
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。