收藏 | 架构设计的基础认知

写在前面: 架构系列文章源自付费课程《从0开始学架构》——阿里P9技术专家实战架构心法。 为了更加系统化的提升架构设计认知水平,更好了指导以后的设计、开发实战,我将课程中核心的知识点、精彩评论进行了梳理。

01 架构的本质

1.1 架构的定义

软件架构指软件系统的顶层结构。

1.2 架构、框架、组件、模块、系统的本质

  • 架构是顶层设计;
  • 框架是面向编程或配置的半成品;
  • 组件是从技术维度上的复用;
  • 模块是从业务维度上职责的划分;
  • 系统是相互协同可运行的实体。

1.3 架构与框架的区别?

  1. 软件架构:软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
  2. 软件框架:为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

架构关注的是“结构”,框架关注的是“规范”。

02 架构的产生背景

2.1 背景探寻

只有规模较大的软件系统才面临软件架构相关的问题。 例如: 1)系统规模庞大、内部耦合严重,开发效率低; 2)系统耦合严重,牵一发动全身,后续修改和扩展困难; 3)系统逻辑复杂,容易出问题,出问题后很难排查和修复。

2.2 设计的重要性

  • 布鲁克斯发表《人月神话》三十年后,又写了《设计原本》。他认为一个成功的软件项目的最重要的因素就是设计。
  • 架构师、设计师需要在业务需求和IT技术中寻找一个平衡点。而对这个平衡点的把握,就是架构设计中的取舍问题。
  • 这种取舍的决策大部分是靠技术(新工具、方法论、管理模式的提升),但一定程度上也依赖于架构师的“艺术”(无法量化,需要权衡)。

03 架构设计的目的

3.1 架构设计的主要目的

为了解决软件系统功能复杂度带来的问题。

3.2 架构设计的认知

  1. 认知1:需求驱动架构。 通过熟悉和理解需求,识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计。
  2. 认知2:架构设计并不是要面面俱到。 不需要每个架构都具备高性能、高可用、高扩展性等特点,而是要识别出复杂点,然后有针对的解决问题。
  3. 认知3:架构是为了应对软件复杂度而提出的解决方案。 理解每个架构方案背后所需要解决的复杂点,才能对比自己业务复杂点,参考复杂点相似的方案。

架构即(重要)决策,是在一个有约束的盒子里去求解出或接近求解出最合适的解。 有约束的盒子=团队经验、成本、资源、进度、业务所处的阶段等编织、掺杂在一起的综合体(人,财,物,时间)。

架构无优劣,但是存在恰当的架构用在合适的软件系统中,而这些都是决策的结果。

04 小结

  • 最大收获:认清了架构设计的主要目的是——为了解决软件系统功能复杂度带来的问题。
  • 反过来说,如果要对一个新产品、项目开发进行架构设计,先需要结合需求、排出软件系统功能复杂度,
  • 针对软件系统功能复杂度最高的部分进行架构选型、设计。

原文发布于微信公众号 - 铭毅天下(gh_0475cf887cf7)

原文发表时间:2018-05-05

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哲学驱动设计

12月反思 - 组内设计评审会议

现象     这个月我的工作任务中,有一项是重构OEA框架中的AutoUI部分。这个任务在月初时计划在一个月内完成,包括问题分析、设计新的结构、编写设计文档、...

20280
来自专栏EAWorld

加速企业敏捷的DevOps平台

大家好,本次内容我在我司上个月的PWorld大会上分享过,线下会议参与人数有限,这次应邀在微信上向更广泛的人群分享。希望对大家能有帮助,谢谢! ? 今天分享的主...

40680
来自专栏Cloud Native - 产品级敏捷

微服务产品级敏捷设计的初衷

2016.9.29, 深圳, Ken Fang 微服务产品级敏捷,设计的初衷, 绝不是肤浅的快速交付。而是要能使团队可持续改善,打造ㄧ永远幸福的团队文化与永远世...

23570
来自专栏ThoughtWorks

敏捷中的QA

作者 林冰玉 说到QA,通常指的是质量保证(Quality Assurance)工程师,但我更喜欢定义敏捷中的QA为质量分析师(Quality Analyst...

37470
来自专栏AI研习社

一张图看懂数据科学家、数据工程师和软件工程师之间的区别

大家都知道,这三种角色各有不同定位,也知道他们之间有许多一致的地方,但是否能讲明白这其中的区别呢? 国外 ETL 服务商 Stitch 的 CEO Jake S...

378120
来自专栏互联网数据官iCDO

2018年调整内容营销策略的5个小贴士

内容营销在不断发展。在这你可以知道如何跟上它发展的趋势,并获得你未来12个月的内容营销策略。

10840
来自专栏Android 研究

PMI-ACP 敏捷项目管理2——敏捷12原则

在软件项目或者其他类型的有高变更比率的项目而言,严格的变更管理流程会带来很多问题。相比而言,敏捷项目管理允许变更的发生,比如极限变成(XP)提倡"拥抱变化"。敏...

58730
来自专栏CDA数据分析师

【Market】产品经理做市场调研和数据分析的方法

产品经理,你对用户的需求了解多少呢?你知道用户想要什么样的产品吗?你想知道用户将会如何看待你的产品吗?你想知道你设计的产品在用户中的口碑如何吗? 是的。每一个产...

44590
来自专栏大数据和云计算技术

DevOps理念

12.2 DevOps理念 DevOps(Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工...

46090
来自专栏python读书笔记

python 数据分析基础 - 总结

至此,经过19天的阅读,《python数据分析基础》已经阅读完毕。 个人感觉,这是一本不错的关于数据分析方面的入门书籍。但是,这本书是有阅读门槛的,必须初步了...

34960

扫码关注云+社区

领取腾讯云代金券