软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象 组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在 面向对象领域中,组件之间的连接通常用 接口来实现。
软件 体系结构是构建 计算机软件实践的基础。与 建筑师设定建筑项目的设计原则和目标,作为 绘图员画图的基础一样,一个 软件架构师或者 系统架构师陈述 软件构架以作为满足不同客户需求的实际系统设计方案的基础。
正如同软件本身有其要达到的目标一样, 架构设计要达到的目标是什么呢?一般而言, 软件架构设计要达到如下的目标:
可靠性(Reliable)。软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠。
安全性(Secure)。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。
可伸缩性(SCAlable)。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。
可定制化(CuSTomizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。
可扩展性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展。
可维护性(MAIntainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的 软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费。
客户体验(Customer Experience)。 软件系统必须易于使用。
市场时机(Time to Market)。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。
根据我们关注的角度不同,可以将架构分成三种:
软件系统中元件之间的关系,比如用户界面,数据库, 外部系统接口, 商业逻辑元件,等等。比如下面就是笔者亲身经历过的一个软件系统的逻辑架构图此系统被划分成三个逻辑层次,即表象层次,商业层次和数据持久层次。每一个层次都含有多个逻辑元件。比如 WEB服务器层次中有HTML服务元件、Session服务元件、安全服务元件、系统管理元件等。
软件元件是怎样放到硬件上的。比如下面这张物理架构图描述了一个分布于北京和上海的 分布式系统的物理架构,图中所有的元件都是 物理设备,包括 网络分流器、 代理服务器、WEB服务器、 应用服务器、 报表服务器、整合服务器、 存储服务器、主机等等。
系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等。
系统架构的设计要求架构师具备软件和硬件的功能和性能的过硬知识,这一工作无疑是 架构设计工作中最为困难的工作。
此外,从每一个角度上看,都可以看到架构的两要素:元件划分和设计决定。
首先,一个软件系统中的元件首先是逻辑元件。这些逻辑元件如何放到硬件上,以及这些元件如何为整个系统的可扩展性、可靠性、强壮性、灵活性、性能等做出贡献,是非常重要的信息。
其次,进行 软件设计需要做出的决定中,必然会包括 逻辑结构、 物理结构,以及它们如何影响到系统的所有非功能性特征。这些决定中会有很多是一旦作出,就很难更改的。
根据作者的经验,一个基于数据库的系统架构,有多少个数据表,就会有多少页的 架构设计文档。比如一个中等的 数据库应用系统通常含有一百个左右的数据表,这样的一个系统设计通常需要有一百页左右的架构设计文档。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删