软件架构设计是什么,为什么要做架构设计?

时间:2019-01-11 11:50:01   |    软件故障   |   

       架构,就是“切分”和“组合”的艺术。目的就是为了方便管理,和我们人类社会划分组织机构的目的是一样的。我们可以比较粗浅地认为架构就是:模块(子系统)+交互机制,以及一些约束规则和指导原则,那么为甚要做架构设计呢?我们只有理解这个目的才能做的更好,我个人认为可以归类为以下几个理由:

        第一:做事情正确的方法,应该是从粗到细、层层递进,紧紧抓住主要矛盾,防止出现方向性错误,搞的满盘皆输,浪费时间和资源;实际上很多微观的问题都是宏观问题的一个投影。架构设计的过程,是层层分解的过程,实际上这是人类做事的重要方法论,一个大问题往往需要综合各个方面的能力才可以解决,但是很少有一个人具备这么多能力,经过分解后,把大问题变成小问题,就很容易找到合适的人来解决,这个在很大程度上提高了效率,这个方法论渗透在各个行业。比如钱学森是导弹的总设计师,他负责的是最顶层的设计,而他的手下又有这个导弹各个部分的设计师,有的人关注空气动力,有的人关注爆炸的破坏力等问题。我们的软件架构师也分为:首席架构师和各个子系统或者模块的架构师;我们的需求人员在做需求时,先提取“客户的愿景”,然后再由愿景提取和分解出顶层概念,然后再逐层分解成更小的概念。例如,公共资源交易的愿景是“公开、公平、公正”,然后在这个基础上分解为建设工程、政府采购、产权、土矿这样的子系统概念,然后每个子系统再拆分为项目、公告、答疑、公示等等。再比如,我们实现一个软件,过程是:顶层设计->子系统设计->模块设计->类文件设计->方法设计等等,把一个庞大的系统最后分解为一个个JDK的API。

        第二:分解问题,聚焦问题,降低问题的复杂性,因为人脑的处理能力是有限的,我们之所以有的时候需要借助模型,模型本身就是一个对实际目标的抽象,就是为了忽略一些无关紧要的影响,以此来照顾我们“不够聪明的大脑”;隔离问题,便于管理;这些问题来自于功能性需求、质量需求(吞吐量、响应速度、高可用、可扩展、易用性等等),以及其他非功能性需求,比如工期要求、比如硬件环境要求,再比如开发过程中在大量人员介入后,不要出现瓶颈问题。我们关注的问题,就是我们要重点关注和需要采取手段的地方。比如我们使用消息的时候,我们预估后期会出现高并发的消息机制,我们就可以抽提出消息接口,将消息接口和消息实现接口分离,以后我们换了消息后,对使用消息的模块造成的影响最小;

      第三:居高临下,宏观上统筹规划;排任务优先级,防止出现瓶颈,做到风险前移。理清系统边界、挖掘潜在需求。比如,我们通过建模能够发现关键模块和路径,可以提前在较粗的颗粒度上完成验证,即使出现方案失败,也发生在大量资源投入之前,最大程度减少浪费;

       第四:提取通过用功能、降低开发工作量。重复是软件的大忌。