目标
正如同软件本身有其要达到的目标一样,
架构设计要达到的目标是什么呢?一般而言,
软件架构设计要达到如下的目标:
可靠性(Reliable)。软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠。
安全性(Secure)。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。
可伸缩性(SCAlable)。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。
可定制化(CuSTomizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。
可扩展性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展。
可维护性(MAIntainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的
软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费。
客户体验(Customer Experience)。
软件系统必须易于使用。
市场时机(Time to Market)。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。
种类
根据我们关注的角度不同,可以将架构分成三种:
逻辑架构
软件系统中元件之间的关系,比如用户界面,数据库,
外部系统接口,
商业逻辑元件,等等。比如下面就是笔者亲身经历过的一个软件系统的逻辑架构图此系统被划分成三个逻辑层次,即表象层次,商业层次和数据持久层次。每一个层次都含有多个逻辑元件。比如
WEB服务器层次中有HTML服务元件、Session服务元件、安全服务元件、系统管理元件等。
物理架构
系统架构
系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等。
系统架构的设计要求架构师具备软件和硬件的功能和性能的过硬知识,这一工作无疑是
架构设计工作中最为困难的工作。
此外,从每一个角度上看,都可以看到架构的两要素:元件划分和设计决定。
首先,一个软件系统中的元件首先是逻辑元件。这些逻辑元件如何放到硬件上,以及这些元件如何为整个系统的可扩展性、可靠性、强壮性、灵活性、性能等做出贡献,是非常重要的信息。
其次,进行
软件设计需要做出的决定中,必然会包括
逻辑结构、
物理结构,以及它们如何影响到系统的所有非功能性特征。这些决定中会有很多是一旦作出,就很难更改的。
根据作者的经验,一个基于数据库的系统架构,有多少个数据表,就会有多少页的
架构设计文档。比如一个中等的
数据库应用系统通常含有一百个左右的数据表,这样的一个系统设计通常需要有一百页左右的架构设计文档。