0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

架构设计的主要内容是什么

OSC开源社区 来源:OSC开源社区 2023-06-13 16:58 次阅读

也许您对软件设计存在一些疑惑,或者缺乏明确思路,那么本文将非常适合您。

1、设计很重要

我们可以看一下周边的事物,那些好的东西,他们并不会天然存在,都是被设计出来的,因此设计就是创造和改善事物的重要过程。设计的重要之处在于,最初的设计往往决定最终的结果,甚至决定着事物的长期的发展。例如两个品牌手机之间,他们可以使用同一个代工厂,但他们差异在设计时就已经决定了。 架构设计也是如此,我见过很多的软件系统,他们经过了很多年的演进,在没有完全重构的情况下,始终无法改变最初设计模样,最初的设计决定了长期的发展。而对于业务深度耦合的系统,重构成本非常高,风险也非常大,变化也更加不确定,所以要更加重视设计。 我们要寻求更好的技术方案,推动架构的良性演进,每一步都是经过深度思考的,而架构设计方法就是帮助我们思考的框架。 通过做架构设计,我们应该提升软件的质量和效率,降低风险和成本。

2、架构设计的目的是什么?

是为了解决软件系统复杂度带来的问题(架构的目标是用于管理复杂性、易变性和不确定性,以确保在长期的系统演化过程中,一部分架构的变化不会对其它部分产生不必要的负面影响。这样做可以确保业务和研发效率的敏捷,让应用的易变部分能够频繁地变化,对应用的其它部分的影响尽可能地小。) 要解决复杂度问题,首先需要识别复杂度的来源,主要集中在以下三个方面: 业务复杂度:流程多,参与者多、状态和变量多等;由业务本身决定,但业务复杂不代表软件系统复杂,例如工作流引擎并不复杂,但他可以做非常复杂的业务,在面对复杂业务时,我们常使用抽象思维,不要让软件逻辑与业务逻辑绑定在一起。 技术复杂度:高性能、高可用、高可扩展、安全,成本、规模等;这部分复杂度常常由技术本身决定,也应该由技术本身解决,通常是采用更合理的框架和工具;避免这些技术特性穿透到应用层。也可以有所取舍,在不同业务情况下,采用不同的实现程度。 设计复杂度:职责不是最小的完备的、概念不清晰的、层次不清的、业务逻辑与技术实现绑定的,组件过多以及关联依赖复杂的;这部分是由设计不合理导致的,也是对业务系统影响最大的一部分,要通过良好的设计来解决。

3、架构设计的主要内容是什么?

找到系统中的元素并搞清楚他们之间关系(如果我们不知道系统是怎么运行的,那么他一定是很复杂的。对于庞大的软件系统,如何才可以被掌控?这就需要将大系统分解为很元素,每个元素需要足够简单,并且元素与元素之间的关系清晰) 软件架构是一种结构,结构中包含了一些元素和元素之间的关系描述; 元素的种类:系统、子系统、模块,组件、服务、类、接口... 关系的种类:层次关系、数据关系、调用关系、影响力关系... "架构表示对一个系统的成型起关键作用的设计决策,架构定系统基本就成型了,这里的关键性可以由变化的成本来决定。"-- Grady Booch.) "Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change." -- Grady Booch.

4、架构设计有什么原则?

合适原则:“合适优于业界领先”。真正优秀的架构都是在企业当前人力、条件、业务等各种约束下设计出来的,能够合理地将资源整合在一起并发挥出最大功效,并且能够快速落地。 简单原则:“简单优于复杂”。优先使用直接的不复杂的方案解决问题; 演化原则:“演化优于一步到位”。软件需要根据业务的发展不断地变化,架构要不断地在实际应用过程中迭代,在某个阶段必定有所取舍,但架构的演化必须是低成本的,当业务发生变化时能够最高效的迭代;在这个过程中修复缺陷的设计,积累优秀的设计;

5、架构师的职责是什么?

业务分析:梳理对业务和技术的理解和判断、形成业务领域知识、明确的业务目标和本质的业务诉求; 系统建设:降低系统复杂性、规划系统远期架构、推动架构的合理演化; 技术方案:选择合适的技术、提供对业务的解决方案,把控全局,包括质量、效率、成本、风险; 关键问题:攻克难点,解决关键问题,指导研发落地; 知识沉淀:以体系化的表达方式,面向不同人员的视图语言,持续完善知识系统;

6、架构设计过程如何?

过程:全局分析业务 → 设计方案 → 概要设计 → 详细设计 → 补充设计 视角:业务级 → 系统级 → 应用级 → 模块级 → 技术级 → 代码级 → 实施级; 架构师的协作链路较长,每一个过程都应该留下资料,越下游的角色往往需要更全面的资料;架构设计文档应该包含架构师参与的所有环节,以及这些环节产生的图文说明;不仅仅是空洞的结果,应该包含架构师的思路和想法;

2f8147de-06ab-11ee-962d-dac502259ad0.png

全局分析阶段

这阶段需要对业务需求进行全面分析,需要将名词罗列出来,区分名词是功能、流程、名词、参与者的哪一种。再通过分析业务的本质并找到其中的关键名词,关键的名词被称之为领域,可以围绕关键的领域构建业务模型; 在这个过程中,需要统一语言、识别核心领域、按照相关性将功能归属到对应的领域,对领域之间的关系做出必要的描述,输出物是名词与解释、领域以及拥有的能力,业务架构。 名词的概念必须是清晰的,领域的职责必须是明确的,领域拥有的能力必须是相关的; 其中业务架构可按照场景层、功能层、领域层、依赖层划分,例如下图;

2f9798ea-06ab-11ee-962d-dac502259ad0.png

设计方案阶段

在完成全局分析之后,我们应该设计技术方案,尽可能提供多个备选方案的图文说明。需要对备选方案做充分的优劣分析,最终取舍一项最合适的方案,没有被选择的方案(或者取舍的部分)也要被说明; 我们需要找到各项约束条件(时间、人力、硬件等),评估在约束条件允许的情况下,哪个备选方案更合适,我们可能考虑如下方面: 方案对业务影响:主要判断需求覆盖程度、实现业务的短期目标、考虑业务的长期目标; 方案的技术需求:安全是否满足、性能是否满足、规模是否满足、可维护性; 方案的可扩展性、方案的复杂程度、方案是否能够演进、方案演进成本如何(高成本的 慎重考虑)、方案的影响力传播如何(对上下游影响较大的 慎重考虑);

架构设计阶段 - 应用架构

用以说明当前系统的元素(系统、子系统、模块,组件)以及他们之间的关系(层次关系、依赖关系) 重点是将可复用的组件抽象后下沉,越往下层越是稳定和通用,由上层承接不稳定的业务; 应用架构图体现了层次关系,以及不完全体现了依赖关系,依赖只能是上层依赖下层,示例如下图

2fecf632-06ab-11ee-962d-dac502259ad0.png

架构设计阶段 - 部署架构

用以说明支持应用所需要的硬件能力、以及外部中间件、网络、机房等情况;可参考下面两张图;

300d1642-06ab-11ee-962d-dac502259ad0.png

架构设计阶段 - 数据架构

描述数据资产结构、存储、流转、灾备的情况;最常用的是 ER 图;

301c2934-06ab-11ee-962d-dac502259ad0.png

3050d558-06ab-11ee-962d-dac502259ad0.png

架构设计阶段 - 技术架构

描述一些关键技术的说明,比如性能、安全、交互等;

305c1468-06ab-11ee-962d-dac502259ad0.png

30750e0a-06ab-11ee-962d-dac502259ad0.png

描述技术选型和代码框架的说明,比如 DDD 推荐的菱形对称架构,文字和图片描述都可以;

30a9f41c-06ab-11ee-962d-dac502259ad0.png

7、有什么方法能做的更好?

学习和使用领域驱动设计,使用正确的方法梳理和理解业务,并落实到架构过程; 尽早的介入,从业务领域建模和在产品方案阶段介入、推动领域知识的传递、为后续做好铺垫; 积累业务能力和洞察力,需要识别关键部分与辅助部分、预料可扩展部分与不变部分,识别水平能力与垂直扩展; 对于架构设计产物,不要只画图,多辅以文字表述图中内容;

8、还需要掌握什么知识?

业务知识:业务架构(是对当前业务、领域、能力、流程、参与者、场景的介绍),现状架构(是对当前架构的描述,可以包含应用架构、技术架构、部署架构、数据架构等),愿景架构( 是架构应该演进到的完美情况),存在问题(现在面对的痛点、无用部分、缺陷部分) 高性能:多线程、队列、缓存、分片、异步化,前置化、静态化、预处理; 高可用:限流、降级、冗余、灾备、回滚、灰度; 扩展性:多态、防腐,依赖反转(业务身份、扩展点、SPI),抽象化(比如流程引擎、规则引擎等)、事件驱动、设计模式
责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2484

    浏览量

    46530
  • 软件系统
    +关注

    关注

    0

    文章

    52

    浏览量

    9444
  • 架构设计
    +关注

    关注

    0

    文章

    30

    浏览量

    6885

原文标题:如何做架构设计?

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    谐波测试报告的主要内容和形式有哪些

    谐波测试报告的主要内容和形式有哪些(1) 测试目的:建立电力系统谐波管理档案,查清谐波源,为抑制和消除谐波,或为解决电能质量纠纷,提供技术依据(2) 测试对象:系统变电站和电力用户,简要介绍变电
    发表于 11-20 17:19

    kintex产品架构设计文档(成为架构师也是电子人不错的选...

    kintex产品架构设计文档(成为架构师也是电子人不错的选择) ROCE(儒仕),用心为每一位电子人!Xilinx7系列普及讲座,架构师设计方案模板,交流学习 内容请下载附件pdf,更
    发表于 04-30 16:41

    EMC测试,主要内容有什么

    EMC测试,主要内容有什么
    发表于 09-05 19:48

    软件架构设计教程

    软件架构设计教程
    发表于 09-26 15:27

    微机控制技术主要内容

    文档介绍:微机控制技术第四章数字程序控制技术本章主要内容1、数字程序控制基础2、逐点比较法插补原理3、步进电机控制技术4.1数字程序控制基础1数字程序控制原理 数字程序控制:就是计算机根据输入的指令
    发表于 09-01 08:12

    微机原理主要内容包括哪些

    前言微机原理主要内容包括微型计算机体系结构、8088微处理器和指令系统、汇编语言设计以及微型计算机各个组成部分介绍等内容。微机原理接口技术是一门实践性强的学科,不但要求较高的理论水平,而且还要求有实际的动手能力。这次项目设计的主要
    发表于 09-10 08:43

    一文搞懂UPS主要内容

    导读:UPS是系统集成项目中常用到的设备,也是机房必备的设备。本文简单介绍了UPS的种类、功能、原理,品质选择与配置选择方式,基础维护等相关的内容。一文搞懂UPS本文主要内容:UPS种类、功能
    发表于 09-15 07:49

    嵌入式硬件设计的主要内容有哪些呢

    嵌入式硬件设计的主要内容有哪些呢?嵌入式硬件设计有哪些流程呢?嵌入式硬件设计的原则有哪些呢?
    发表于 01-19 07:36

    编写头文件主要内容

    编写头文件主要内容
    发表于 01-24 07:28

    【书籍评测活动NO.18】 AI加速器架构设计与实现

    加速器架构设计与实现》 主要内容本书是一本讲解NPU硬件架构设计与技术实现的著作。作者将自己在CPU、GPU和NPU领域15年的软硬件工作经验融会贯通,将四代NPU架构设计经验融为一
    发表于 07-28 10:50

    低功耗蓝牙技术(BLE)4.0主要内容

    低功耗蓝牙技术(BLE)4.0主要内容,有兴趣的同学可以下载学习。
    发表于 04-11 14:45 33次下载

    变速器检修的主要内容

    本视频主要详细介绍了变速器检修的主要内容,分别是变速器齿轮的检修、变速器壳体的检修、变速器轴的检修以及同步器的检修。
    的头像 发表于 12-20 16:28 7732次阅读

    DSP的理论基础和主要内容和应用分析

    对数字信号处理的概念作了简略的介绍, 讨论了数字信号处理的理论基础、主要内容以及数字信号处理的实现。进而对数字信号处理器的特点,应用实例, 数字信号处理器的发展方向作了一些讨论。
    发表于 09-10 14:54 34次下载
    DSP的理论基础和<b class='flag-5'>主要内容</b>和应用分析

    系统架构设计的详细讲解

    上一篇,我们讨论了故障度量和安全机制的ASIL等级。本篇我们来聊一聊系统架构设计相关内容。01系统架构设计和TSC当我们开始写TSC时,会涉及到下图中一系列的内容:当我们完成前三期(链
    的头像 发表于 12-24 14:33 1398次阅读

    架构与微架构设

    下面将从芯片的架构设计、微架构设计、使用设计文档、设计分区、时钟域和时钟组、架构调整与性能改进、处理器微架构设计策略等角度进行说明,并以视频H.264编码器设计为例。
    的头像 发表于 05-08 10:42 861次阅读
    <b class='flag-5'>架构</b>与微<b class='flag-5'>架构设</b>计