没有(物理或者逻辑的)分层,就没有架构。缓存
架构师并非魔术师,不是从帽子里变出兔子的人,因此架构师不是无中生有;他(她)是针对多层次、复杂的系统间依赖进行设计。单一应用是软件系统中的最简单的方式;通过设计的单一应用和未经设计的单一应用从开发、部署的结果上看是同样的,所不一样的是对于整个系统的评估和认识。架构
架构师须要考虑如下影响架构设计的因素:负载均衡
异构系统:"天者,清清者上浮而为天;,地者,重浊者下凝而为地。"可见,异构系统会天然的分离为不一样的子系统。这里所谓的异构包含:地理位置、主机、操做系统、实现语言等。异构子系统之间必须经过某种第三方做为桥梁才能完成数据交换。运维
静态资源:针对内部系统的静态资源,集中管理在开发阶段能够实现功能代码的重用,在系统的运维阶段带来成本的节省;须要权衡集中管理资源带来的开发和使用成本与收益。分布式
计算能力:一种动态资源,直接影响系统的响应、容量等性能指标;是分布式系统指标性的参数;从转接分发、负载均衡、散列存储、散列缓存等等技术。性能
可靠性:性能需求中最难评估的指标;为可靠性进行的架构设计,其重要性是显然的,可是其中的浪费也是不容忽视的。spa
业务:这个看似最重要的因素,不少时候最不重要,由于它依附的系统在前面进行了分解;它的性能指标在前面已经考虑;那业务还会如何影响架构设计?归根结底仍是封装--暴露仅可能少的知识。由于这个设计、开发投资在从此才会看到收益,所以须要权衡。操作系统
架构师完成架构设计的成果应该包含且不限于如下内容:
架构设计
系统业务组件/层次架构设计,含系统间接口设计设计
数据模型及状态机,含数据散列存储设计
部署架构设计,含可靠性实施方案
架构师思考问题的角度并不是只有技术,对此推荐读物《软件架构师的12项修炼》