架构设计深入学习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.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华章科技

我用爬虫一天“偷了”知乎一百万用户,只为证明PHP是最好的语言(内含源代码)

看了不少朋友圈里推荐的Python爬虫文章,都觉得太小儿科,处理内容本来就是PHP的强项,Python唯一的好处估计也就天生的Linux自带,和Perl一样,这...

29830

云本机应用程序成熟度的模型

云本地应用程序是为了能在云基础架构上最佳地运行而构建的。云本地应用程序体系结构与为数据中心设计的传统分层应用程序非常不同。在本文中,我将讨论来自开放数据中心联盟...

25770
来自专栏杨建荣的学习笔记

MySQL分布式管理初步设计

中间件方案对于业务的使用相对是透明的,而且扩展性相对较好,这里说较好,是基于良好的架构设计,对于弹性伸缩的支持还是有限的。

10420
来自专栏SDNLAB

P4: 面向服务器主导网络互联推进技术创新

P4是一种新的高级编程语言,P4用于软件定义网络。P4用于描述数据平面的行为,这些数据平面的行为可以对应于任何转发,修改或检查网络流量的系统或设备。P4最先在网...

35680
来自专栏SDNLAB

如何确保uCPE零接触部署

服务提供商正在努力用在通用客户端设备(uCPE)的标准平台上运行的软件来替换客户端设备(CPE)。他们还希望尽量减少在供应链和客户现场建立uCPE所需的步骤。在...

11220
来自专栏MongoDB中文社区

为什么MongoDB适合深度学习?

当您正在考虑为新的深度学习项目选择何种数据库时,您可以访问这个链接所对应的帖子(https://www.mongodb.com/blog/post/deep-l...

27810
来自专栏phodal

如何看待 GitHub 上许多笔记、面经等获得过多的 star?

文章来源于,我在知乎相关话题上的回答。问题大意是:SQLite 和 SQLAlchemy 项目的 Star 比许多学习笔记、面经还要少。

13510
来自专栏腾讯架构师的专栏

基于空闲资源的弹性计算实践

当前整个行业大概6%~12%的CPU平均利用率,有较大的提升空间,怎么去提升利用效率,减少对能源的浪费,欢迎大家一起探讨。

1.2K00
来自专栏华章科技

(内含源代码)我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言

看了不少朋友圈里推荐的Python爬虫文章,都觉得太小儿科,处理内容本来就是PHP的强项,Python唯一的好处估计也就天生的Linux自带,和Perl一样,这...

18930
来自专栏数据的力量

【答疑解惑】做大数据过程中遇到的13个问题

19340

扫码关注云+社区

领取腾讯云代金券