3.分层设计
架构设计的一个重要思想就是职责分离和关注点分离。分层的设计思想是的架构设计更近一步。
1分层设计
分层设计一本分为两种,一种是Layer:一般是指逻辑上的分层,主要实现职责的分离。
另一种是物理分层tier:是指误伤上的分层,主要考虑的是性能、伸缩性、容错等。
1.1逻辑分层
软件的功能模块由时容易识别,有时却比较隐藏。比较全面的识别的功能块、规划功能块的接口、明确功能块之间的使用关系和使用机制,正是软件逻辑架构设计的核心任务所在。
逻辑架构的设计往往是从用力分析开始的。基于用例的分析方法使逻辑架构的设计变得有序,通过每个关键用例的分析,从逻辑上将用例的实现为一组功能块的特定组合,最终综合这些用例的分析成果,将一个独立的协作归纳合并成整个软件系统的逻辑结构。
1.2物理分层
物理架构的设计着重考虑设计"安装和部署的需求"。物理架构描述了运行软件的计算机、网络、硬件设施等的情况,还包括如何将软件部署到这些硬件资源上,以及他们运行时的配置情况。
图为书中的5层逻辑架构设计。
1.3系统的可伸缩性
硬件的可伸缩性:
通过硬件设备的增加来支持更多的用户,比如增加CPU的个数或存储器空间的大小等。
软件的可伸缩性:
通过运行更多的实例或采用分布式处理方式来支持更多的用户。
1.4拆分系统的一些方法
化整为零:
当系统有多个功能的时候,可以考虑把这个系统拆分成几个子模块,每一个模块可以是一个子系统,这样就可以灵活的把这些子系统模块部署到不同过的服务器上了,有一点需要注意:拆分后的模块必须能够处理负载。
动静态资源分离:
静态资源和动态资源最好分离,因为对服务器来说这两种资源的压力侧重点是不同的,前者可能片中IO,后者偏重CPU,那么在选择硬件的时候也可以有所侧重。而且静态资源和动态资源的缓存策略也不一样。例如:会采用独立的文件或者图片服务器来处理系统中队静态文件资源的请求。
按照功能来拆分:
把耗时或者耗资源的模块分开。例如:一个负责上传的功能模块,上传操作非常耗时,如果和其它应用混在一起很容易使服务器瘫痪。这时候就应该把耗时或者耗资源的模块分开。