架构设计深入学习02--概念架构与细化架构

胜兵先胜而后求战,败兵先战而后求胜—《孙子兵法》。

这部分有些内容比较陈旧,但原理和思路还是一致的。

通常来说,概念架构满足"架构=组件+交互"且只关注高层组件,之后对齐进行笼统的界定,给为他们之间的关心,此外,概念架构不涉及接口细节。这儿需要牢记的是,重大需求塑造概念设计,这儿的重大需求就是预架构中的功能、质量及约束3类需求中的关键部分。

概念架构阶段的3个步骤

初步设计:基于关键功能,借助鲁棒图进行以发现职责为目的的初步设计,对于新系统很重要。

高层分割:对系统黑盒进行切分,可以借助架构模式。

考虑非功能需求,通过"目标-场景-决策表"分析非功能需求。

初步设计的主要任务是发现职责,可以借助"职责协调链"。在分析直接协调链时,首先需要引入一个工具,鲁棒图,其包含3中元素,分别是边界对象,控制对象和实体对象。(由于VISIO不支持,这个图就忽略了,可以用序列简图表述)

高层分割:首先一个系统分割为项目交互的几个系统,之后将每个系统分化为多个子系统(不必须,一切都需根据情况,不要过度设计)。这儿的子系统通常就是分层(layer),如下图所示。

Tip: Layer表示逻辑分层, Tier表示物理分层(比如数据库服务器,Web服务器,应用服务器等的分离)。

考虑非功能需求:比如对于持续可用性的要求,就需要数据库服务器配置故障转移集群,Web服务器负载均衡。

架构设计一门解决复杂问题的艺术,因此"分而治之"的思想一定不能少,在该阶段,通常使用多视图的方法来展示架构思想,其特点是:利于思考(分而治之),便于交流(分离了关注点)。得到广泛认可的是RUP4+1视图,不过这儿重要的是思想(每个思维角度,一个视图),不是必须要提供指定的4+1视图(逻辑视图、部署视图、进程视图、实现视图和用例图),最后的Tip中展示了自身日常做项目中的视图方式。

在此,将按照温昱思路,介绍一下他的五视图,作为实践的参考。

逻辑架构:主要工作包括划分子系统、定义接口等,通常借助接口-包图来表述。划分子系统的方法包括分层的细化、分区的引入、机制的提取。

其相关原则为:职责不同的单元划归不同的子系统;通用性不同的单元划归不同的子系统;需要不同开发技能的单元划归为不同子系统(前天、后台、高保真);兼顾工作量的相对均衡,进一步划分太大的子系统(项目管理的80小时原则)。此外,定义接口时一定不能自说自话,需要足够的沟通。

运行架构:在涉及大量并发时,需要考虑,不常用。

开发架构:这部分主要是开发语言、相关框架的选择,项目文件的结构和形式,在实际中很重要,统一和合理的结构可以大幅挺好开发和沟通效率。在软件开发中,维护成本实际上是最大的,因此合理的重用非常重要,其优先级为重用完成APP-》重用框架-》重用库和程序=》重用标准算法和设计模式。

物理架构:这部分的思维重点是"开销"和"争用",因此架构的目标就是降低开销和避免征用。

数据架构:数据的分布方案是一个难点,通常可以借助一下6个策略。

3个应用原则:把握系统特点,决定分布策略(合适原则);不同分布策略,可以综合应用(综合原则);对"对么""好么"进行评估(优化原则)。

Tip:

在实际的项目中,实际的架构情况如下图所示,至于细节的服务契约定义(依据序列图发现接口)和数据库的详细设计(依赖PRD发现所需字段)等都可以和一线开发经理一起决定。

参考资料

  1. 温昱. 一线架构师实践指南[M]. 北京:电子工业出版社, 2011.
时间: 2024-08-07 19:46:41

架构设计深入学习02--概念架构与细化架构的相关文章

架构设计深入学习01--概论与预架构阶段

完成一个比较复杂的项目后,终于有空看看书了,这次决定将架构设计的方法论进行一次系统的学习,借助温昱大师的<一线架构师>一书.我将把这次学习分成三部分,分别是概论&预架构阶段&非功能目标的方法论.概念架构阶段.细化架构阶段.此外,今天看到老妈很喜欢的大幂幂了,真心很美,继续加油学习了,为成为一名合格的程序员而努力. 架构师的4个困惑: 4个实际问题的困惑 将系统划分模块,如何更合理? 细化架构阶段 大系统架构设计,如何起步? 概念架构阶段 总觉得需求很糟糕,影响了架构设计 预架构

架构设计:前后端分离之Web前端架构设计

在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分离的一种具体实现方案,该方案和我原来设想有了很大的变化,但是核心思想没变,就是控制层是属于Web前端的. 在以前文章里我说道前后端分离的核心在于把mvc的控制层归为前端的一部分,原方案的构想在实际的生产开发里很难做到,我觉得核心还是控制层和视图层的技术异构性,这样后果使得系统改造牵涉面太大,导致在项目团队里,沟通.协调以及管理成本相对较高,

聊聊架构设计做些什么来谈如何成为架构师

一.架构的定义 在软件开发领域,自从架构这个词被广泛传播之后,产生的架构模式也非常多,架构关注点也在增加.但回到"道"的层面,架构的定义或者说本质还是: 架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计. ----摘自<百度百科> 二.架构是做什么? 很多做业务功能的增删改查开发感受到无趣的小伙伴常把做架构想象成一片乐土,没有嘈杂的业务声音干扰,可以专心做一番牛X的技术.会把架构单纯的理解成,牛X的性能.牛X的TPS.高可用,支撑了

MySQL提升课程 全面讲解MySQL架构设计 打造扛得住的MySQL数据库架构

第1章 实例和故事决定电商11大促成败的各个关键因素.1-1 什么决定了电商双11大促的成败1-2 在双11大促中的数据库服务器1-3 在大促中什么影响了数据库性能1-4 大表带来的问题1-5 大事务带来的问题 第2章 什么影响了MySQL性能详细介绍影响性能各个因素,包括硬件.操作系统等等.2-1 影响性能的几个方面2-2 CPU资源和可用内存大小2-3 磁盘的配置和选择2-4 使用RAID增加传统机器硬盘的性能2-5 使用固态存储SSD或PCIe卡2-6 使用网络存储SAN和NAS2-7 总

spark架构设计&amp;编程模型 02

启动spark-shell: 简单的RDD: 上述代码中使用的sc,这是Spark-Shell帮助我们自动生成的SparkContext的实例: 我们把生成的RDD的每个元素都乘以3: 上述的操作都是transformations我们需要触发一个action才能执行: 我们可以看到预期结果,但我们可以看到collect操作返回的是一个Array,所以数据不要太多,否则会出现OOM 下面执行下filter操作: 真的spark编程应该是完全函数式的,我们把上述操作用一行代码搞定:

电商峰值系统架构设计--转载

1.1 系统架构设计目录 摘要:双11来临之际,<程序员>以“电商峰值系统架构设计”为主题,力邀京东.当当.小米.1号店.海尔商城.唯品会.蘑菇街.麦包包等电商企业,及商派.基调网络等服务公司,分享电商峰值系统架构设计的最佳技术实践. 自2009年11月11日,淘宝商城(现名天猫)拉开网购狂欢节的序幕,各大电商的促销浪潮此起彼伏.此时的电商大战不仅是价格之争,更是技术的较量.如何设计电商峰值系统来更好地满足用户蜂拥而至的访问,如何在海量数据处理中实时发现有效信息并转化为商机,成为众多电商企业密

[Architecture Design] 跨平台架构设计

[Architecture Design] 跨平台架构设计 跨越平台 Productivity Future Vision 2011 在开始谈跨平台架构设计之前,请大家先看看上面这段影片,影片内容是微软在2011年所描绘的未来生活蓝图.在观看的过程中,请大家以「软件开发人员」的角度来思考,想想软件开发人员在其中扮演甚么样的角色. 「Productivity Future Vision 2011」 这段影片里面所描绘未来产品,把时间轴拉到现在来看,其实有许多概念已经悄悄融入我们的生活之中.像是影片

Unity3d 引擎原理详细介绍、Unity3D引擎架构设计 - zhibolife

时间 2014-03-24 11:18:00  博客园-所有随笔区原文  http://www.cnblogs.com/zhibolife/p/3620440.html 体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则. Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于创建交互式3D应用程序在多个platforms.Unity3D由游戏引擎和编辑器.该引擎包含的软件组件,在游戏的研究与开发中最常见

架构风格与基于网络应用软件的架构设计(一)

作者:Roy Thomas Fielding 译者:李锟 论文摘要 Web(万维网,英文全称World Wide Web,简称Web)的成功,很大程度上是因为其软件架构的设计满足了拥有互联网规模(Internet-scale)的分布式超媒体系统的需求.在过去10年间,通过对定义Web架构的规范所做的一系列修改,Web以迭代的方式不断地发展着.为了识别出Web需要改善的那些方面,并且避免对其进行不必要的修改,需要一种现代的Web架构模型,用来指导Web的设计.定义和部署. 软件架构方面的研究探索的