吃透8图1模板,人人可以做架构

news2025/7/22 21:58:34

前言

在40岁老架构师 尼恩的读者交流群(50+)中,很多小伙伴问尼恩:

大佬,我们写架构方案, 需要从哪些方面展开

大佬,我们写总体设计方案需要一些技术亮点,可否发一些给我参考下

诸如此类,问法很多,但是不知道架构图长成啥样?架构方案怎么写。

40岁老架构师尼恩,不知道做过多少架构方案。也不知道指导了多少开发,完成了架构师的华丽转身。

现在,给大家提供一份如何画好架构图,和如何做好架构方案,核心的要点,展示给大家。

使得大家可以充分展示一下大家雄厚的 “技术肌肉”,让你的主管、同事爱到 “不能自已、口水直流”

也一并把这个题目以及参考答案,收入咱们的 《尼恩Java面试宝典》V53版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从这里获取:码云

系统架构图是为了抽象的表示软件系统的整体轮廓和各个组件之间的相互关系和约束边界,以及软件系统的物理部署和软件系统的演进方向的整体视图。好的架构图可以让干系人理解、遵循架构决策,就需要把架构信息传递出去。那么,画架构图是为了:解决沟通障碍/达成共识/减少歧义。比较流行的是4+1视图和C4视图。

一:怎么画好架构图

一个好的架构图是不需要解释的,它应该是自描述的,并且要具备一致性和足够的准确性,前瞻性,能够与 后面的设计相呼应。

架构方案的受众分析

架构方案,也要 千人千面

在画出一个好的架构图之前, 首先应该要明确其受众,再想清楚要给他们传递什么信息

一个方案,面向不同的受众,需要有不同的视图

不是为了画图而画图,而是应该差异化分析

要进行受众分析,应该根据受众的不同,传递的信息的不同,用图准确地表达出来,最后的图可能就是在这样一些分类里。

视图的分析维度

针对不同的受众,有不同的分析图

但是,也是层层深入的

大概有下面的 8个维度

架构图1:场景视图

用于描述系统的参与者与功能用例间的关系,

反映系统的最终需求和交互设计,通常由用例图表示;

场景分析图的受众: 外部的技术或非技术人员,包括团队内部或外部的开发人员或运维人员,

架构图2:系统架构分析

系统架构分析 用于描述系统软件功能拆解后的组件关系,组件约束和边界,反映系统整体组成与系统如何构建的过程,通常 子系统的 线框图表示。

架构图3:系统依赖分析(System Context Diagram)

系统依赖分析(System Context Diagram)用于描述要我们要构建的系统是什么,子系统直接的依赖关系是什么,用户是谁,需要如何融入已有的IT环境。

系统依赖分析图的受众: 外部的技术或非技术人员,包括团队内部或外部的开发人员或运维人员,

架构图4:子系统依赖分析(Container Diagram)

子系统依赖 是 系统依赖图里 ,对待建设的子系统做了一个内部依赖关系展开分析,

子系统依赖分析 主要用来描述子软件系统的内部的依赖关系,分析系统中的职责是如何分布的,子系统是如何交互的。

子系统依赖分析的受众: 外部的技术或非技术人员,包括团队内部或外部的开发人员或运维人员,

架构图5:组件架构图(Component Diagram)

组件架构图是把针对某个子系统 进行组件设计、模块设计,

组件架构图 用于 子系统 的模块关系,介绍 子系统由哪些组件/服务组成,了组件之间的关系和依赖,为软件开发如何分解交付提供了框架。

组件架构图受众:主要是给内部开发人员看的。

组件架构图的作用:为代码的组织和模块架构,提供支撑

架构图6:模块架构图

从编码的维度来说,组件内部,很多模块。模块架构分析 ,是对组件的进一步 深入分析。

模块架构分析用于描述模块划分和组成,

模块架构分析可以细化到内部包的组成设计,服务于开发人员,反映系统开发实施过程。

架构图7:逻辑架构视图

逻辑架构视图 用于描述系统模块内部的的通信时序,数据的输入输出,反映系统的功能流程与数据流程,、

通常由时序图和流程图表示。

架构图8:部署架构分析

用于描述系统软件到物理硬件的映射关系,反映出系统的组件是如何部署到一组可计算机器节点上,用于指导软件系统的部署实施过程。

二: 怎么做好架构方案?

光有图是不够的,还要有方案

下面是一份P8 级专家的架构方案

提纲如下:


下面是技术方案设计模板在每一章节的简单说明,用来帮助你理清每个章节大概要写什么内容

2.1、现状

现状,主要是用来描述当前这个业务(项目)的一些基本情况介绍和相关的背景。

方案设计出来之后,是需要给你的 leader 或者团队其他成员进行评审或者查看,

一般来说,由技术委员会来评审

但是别人不可能都和你一样清楚你的项目,

因此首先,你要把你项目的基本情况和背景都说清楚,让大家达成一个共识,

大家站在同一个起点上,才能进行后面的方案评审和讨论。

业务背景

业务背景就是你这个业务的基本介绍,包括但不限于:

  • 项目名称
  • 业务描述
  • 业务难点

技术背景

技术背景就是项目是基于什么样的技术背景下来构建的,

可以是从 0 到 1 来构建,也能是基于现有的方案来优化,

但是不管是什么场景,一定都会存在相关的技术背景,因此包括但不限于:

  • 现有技术积淀
  • 现有架构描述
  • 现有系统的整体容量

2.2、需求

需求,很重要!

不管你的技术有多牛逼,都一定为需求服务的,

不管这个需求是技术需求,还是业务需求,一定都是要为需求服务。

注意:需求,这个需求可以是当下的需求,尽可能 包含未来潜在的需求。

需求越完善,后面会少走弯路。

业务需求

业务需求就是你这个业务具体要做的事情,包括但不限于:

  • 业务的功能点
  • 要提升改造的功能

业务痛点

  • 涉及到的业务痛点有哪些

性能需求

除了业务需求,还要从这个业务需求里面考虑清楚我们满足这个业务之下的性能需求点,

如果一个系统不考虑性能,可能流量一上来,服务就挂掉了。

性能需求包括但不限于:

  • 预估系统平均容量
  • 预估系统峰值容量
  • 可伸缩性
  • 其他的一些性能要求点,比如安全性等

2.3、方案描述

前面把现状和需求说清楚后,终于到了我们的重头戏,方案描述这里了。

一般,需要会有几个可选的方案,

也就是说,尽可能把相关可能的方案都描述清楚,

然后给出你认为的最合适的方案,然后让大家来评审和决策,看是否同意你的意见或者有其他更好的意见。

除非万不得已,最好,不要一只有个方案。

方案1

概述

说明一下方案的核心亮点、核心特色,核心目标,核心优势

比如说:高性能、可扩展、双写、主从分离、分库分表、扩容等。

详细说明

详细说明这里需要图文结合,

包括但不限于架构图、流程图 等。

把你整个方案的架构和模块、细节流程都描述清楚

性能目标

性能一般来说可能包含以下部分:

  • DAU:
    日活跃用户数量。一般用于反映网站、互联网应用等运营情况。
  • 平均QPS:
    可以参考淘宝的平均QPS 估算公式,进行估算。
  • 峰值QPS:
    一般可以以QPS的2~4倍计算;
资源评估

给出方案的基准数据,并按性能需求评估需要使用的资源数量。

按照预估性能需求,预估资源数量

  • 单节点并发量
  • 单节点容量
  • 应用服务器的单节点资源配置、节点数
  • 缓存的单节点资源配置、节点数
  • 数据存储的单节点资源配置、节点数
  • 消息队列的单节点资源配置、节点数
  • 反向代理的单节点资源配置、节点数
  • 搜索引擎的单节点资源配置、节点数
  • 伸缩方式
  • 高可用方式
  • 监控预警的方式
方案优缺点

列出方案的优缺点,

这个需要通过量化的指标来支撑

方案2

可选的另外一种方案,模板和上面一样。

方案对比

前面给出了多种可选的方案,那么这里就是进行一个简单的对比,

然后,给出自己的觉得最优的方案,并且给出支撑的数据、理由。

有了你自己的决策(倾向)的方案后,

当然,对于最优的方案,就应该提供更有支撑力的细化的方案和数据

2.4、线上方案

线上方案是对上面你更倾向的方案的更为细致的描述。

架构图

整体架构是如何,把架构图画上

关键设计点 和 设计折衷

把核心的关键点,用自己的 名词系统表达出来

这里有一个要求:整体是完备的、自洽的

用来确保你的方案的大体方向是 OK 的。

因为没有一个方案设计是最完美,方案设计都是逐步演进和优化的,

但是,一定是完整的、系统的、没有大漏洞的

还有,方案设计是要最符合当前的背景的。

业务流程

对于业务的核心场景,弄一个整体流程图、核心流程图出来,

然后分业务场景把各个业务场景的流程图也画出来,并且做好相关介绍

模块划分

模块的划分需要考虑我们架构设计的一些原则,

比如:架构分层、业务分模块、微服务化、高内聚低耦合 等。

然后把每个模块的功能点都说清楚

异常边界【重要】

异常边界是比较重要的,一般情况下,

大部分人都能考虑到正常的处理流程,对于异常的边界考虑的比较少,

但是线上出问题,大部分都是异常情况导致,因此这里非常重要!!!

我们可以通过一个 思维导图 去整理相关的异常边界,

这样有助于自己在实现的时候有足够的把控度,也便于别人去 review 你的方案和具体实现(如 coding)

异常边界需要考虑:

  • 涉及到了哪些模块
  • 涉及到了哪些流程
  • 每个模块、流程出现了各种可能情况的处理是?
  • 系统底层原因导致的异常的处理是 ?

监控、预警、统计

线上运行的项目,一定需要有各种监控,预警、指标统计

可以使用 公司内部的基建的监控外,

还需要从业务内部,实现自定义的一些业务监控和相关技术统计

最终的目标、保证系统的高可用、支撑系统的高可用

灰度、回滚策略

  • 如何灰度?
  • 如何回滚?

容灾方案

容灾就是当出现 IDC 异常的情况下,怎么容灾,这个可以根据实际情况去考虑。

2.5、部署架构

可以按照下面的方向,去做拓展:

  • 线上部署拓扑什么,
  • 各层的部署架构是什么
  • 多活的部署架构是什么
  • 公有云部署架构是什么

2.6、风险评估

标识所选方案的风险,提出解决此风险发生时候的应对策略,

比如:上线失败时的回滚策略。

潜在风险

  • 相关的改动有哪些风险点
  • 不兼容点?
  • 当前设计方案目前存在哪些问题?
  • 潜在有哪些问题

2.7、阶段规划【架构演进规划】

架构怎么演进

阶段如何规划

每个阶段该达成什么目标

第一阶段

目标 XXXX

第二阶段

目标 XXXX

第三阶段

目标 XXXX

2.8、投入评估

最后,需要做投入的评估,作为投资回报分析的支撑,包括:

  • 物理设备、云设备投入评估
  • 工作量评估,

这里需要细化到每个模块、

工作量评估 一般按照时间进行,一定要同时包括开发时间、联调时间、测试时间。

最好比较细化,不要太粗,

比如开发时间可以细化到接口的维度,每个接口的设计分别需要多长时间,

老马识途,找老架构取经

只要是成功走上架构师岗位的都指导, 架构之路,充满了坎坷

这个和高级开发不一样 , 架构的问题,是open的,开发式的,没有答案的

在架构设计的过程中, 会遇到无数的挫折,很多小伙伴, 就没有跨过去

其实,如果真的遇到架构难题,找有经验的人帮帮忙, 这道坎,就过去了

所以,如果遇到复杂的场景,确实不知道怎么做架构方案,怎么办?

可以来尼恩的技术自由圈(疯狂创客圈圈) 中求助.

咱们圈聚焦架构研究,这里有上1000位架构人脉,10年多架构经验的老架构师,在100位以上。

大家 什么架构方案都做过,可以给遇到困难的小伙伴,提供设计帮助、架构帮助。

推荐阅读:

《干翻 nio ,王炸 io_uring 来了 !!(图解+史上最全)》

《SpringCloud+Dubbo3 = 王炸 !》

《响应式圣经:10W字,实现Spring响应式编程自由》

《4次迭代,让我的 Client 优化 100倍!泄漏一个 人人可用的极品方案!》

《全链路异步,让你的 SpringCloud 性能优化10倍+》

《Linux命令大全:2W多字,一次实现Linux自由》

《阿里一面:你做过哪些代码优化?来一个人人可以用的极品案例》

《网易二面:CPU狂飙900%,该怎么处理?》

《阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了》

《峰值21WQps、亿级DAU,小游戏《羊了个羊》是怎么架构的?》

《场景题:假设10W人突访,你的系统如何做到不 雪崩?》

《2个大厂 100亿级 超大流量 红包 架构方案》

《Nginx面试题(史上最全 + 持续更新)》

《K8S面试题(史上最全 + 持续更新)》

《操作系统面试题(史上最全、持续更新)》

《Docker面试题(史上最全 + 持续更新)》

《Springcloud gateway 底层原理、核心实战 (史上最全)》

《Flux、Mono、Reactor 实战(史上最全)》

《sentinel (史上最全)》

《Nacos (史上最全)》

《TCP协议详解 (史上最全)》

《分库分表 Sharding-JDBC 底层原理、核心实战(史上最全)》

《clickhouse 超底层原理 + 高可用实操 (史上最全)》

《nacos高可用(图解+秒懂+史上最全)》

《队列之王: Disruptor 原理、架构、源码 一文穿透》

《环形队列、 条带环形队列 Striped-RingBuffer (史上最全)》

《一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)》

《单例模式(史上最全)》

《红黑树( 图解 + 秒懂 + 史上最全)》

《分布式事务 (秒懂)》

《缓存之王:Caffeine 源码、架构、原理(史上最全,10W字 超级长文)》

《缓存之王:Caffeine 的使用(史上最全)》

《Java Agent 探针、字节码增强 ByteBuddy(史上最全)》

《Docker原理(图解+秒懂+史上最全)》

《Redis分布式锁(图解 - 秒懂 - 史上最全)》

《Zookeeper 分布式锁 - 图解 - 秒懂》

《Zookeeper Curator 事件监听 - 10分钟看懂》

《Netty 粘包 拆包 | 史上最全解读》

《Netty 100万级高并发服务器配置》

《Springcloud 高并发 配置 (一文全懂)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Serverless Kubernetes的思考与征程

​作者:牛秋霖、张维、李传云、易立 本文将针对Serverless Container技术的特殊性,分享其对Kubernetes的架构影响,以及阿里云在Serverless Kubernetes方面架构选择。 一、Serverless Container缘起 在2018年,容器团队与弹性计算团…

9 种会让你大吃一惊的副业工具

然而,副业需要使用许多工具。我举个例子:我在网上写文章,做数字产品,需要用到各种工具。相信我,免费的互联网工具可以帮助我快速完成工作,这样我就可以赚更多的钱并有更多的空闲时间。注意:这些…

初阶C语言——指针【详解】

文章目录1.指针是什么2.指针和指针类型2.1 指针的解引用2.2 指针 -整数3.野指针3.1 野指针成因3.2 如何规避野指针4. 指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算5. 指针和数组6. 二级指针7. 指针数组1.指针是什么 指针理解的2个要点: 指针是内存中一个最…

【LeetCode】2357. 使数组中所有元素都等于零

2357. 使数组中所有元素都等于零 题目描述 给你一个非负整数数组 nums 。在一步操作中,你必须: 选出一个正整数 x ,x 需要小于或等于 nums 中 最小 的 非零 元素。nums 中的每个正整数都减去 x。 返回使 nums 中所有元素都等于 0 需要的 …

【JavaScript速成之路】JavaScript运算符

📃个人主页:「小杨」的csdn博客 🔥系列专栏:【JavaScript速成之路】 🐳希望大家多多支持🥰一起进步呀! 文章目录前言运算符1,算术运算符2,递增递减运算符3,比…

VMware ESXi 7.0 Update 3k - 领先的裸机 Hypervisor (sysin Custom Image)

VMware ESXi 7.0 Update 3k - 领先的裸机 Hypervisor (sysin Custom Image) VMware ESXi 7.0 Update 3k Standard & All Custom Image for ESXi 7.0 U3k Install CD 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3/,查看最新版。原创作品…

程序员必备的软技能-金字塔原理拆解(上)

原书 290千字,本文预计 14千字,拆解比 20:1,预计阅读时长 15分钟序言日常工作中,常常因为思维、表达方式不对产生不想要的结果:写了一个小时的周报,领导却不满意?跟团队讲了半天自己…

SWMM从入门到实践教程 01 SWMM软件介绍

文章目录1 软件介绍2 软件面板2.1 主菜单2.1.1文件菜单(File)2.1.2 编辑菜单(Edit)2.1.3 视图菜单(View)2.1.4 工程菜单(Project)2.1.5 报告菜单(Report)2.1.…

VIAVI唯亚威CellAdvisor 线缆和天线分析仪

CellAdvisor 线缆和天线分析仪利用一种基于云功能的轻便仪器中的射频/光功率计,提供了适用于行扫描测量和光纤检测的集成解决方案,以供在基站安装和维护期间使用。 CellAdvisor™ 线缆和天线分析仪 JD723C/JD724C/JD725C/JD726C 无线网络中的大多数问题…

诈金花的概率

游戏使用一副除去大小王的扑克牌,共4个花色52张牌。 1、豹子(AAA最大,222最小)。2、同花顺(AKQ最大,A23最小)。3、同花(AKQ最大,352最小)。4、顺子&#xff…

仿Mybatis手写持久层框架

文章目录一、持久层框架分析1. JDBC操作数据库_问题分析2. JDBC问题分析&解决思路(1)加载驱动,获取链接(2)定义sql、设置参数、执行查询(3)遍历查询结果集3. 自定义持久层框架_思路分析二、…

黑马《数据结构与算法2023版》正式发布

有人的地方就有江湖。 在“程序开发”的江湖之中,各种技术流派风起云涌,变幻莫测,每一位IT侠客,对“技术秘籍”的追求和探索也从未停止过。 要论开发技术哪家强,可谓众说纷纭。但长久以来,确有一技&#…

Feign、Ribbon、Hystrix

🏆今日学习目标: 🍀Feign、Ribbon、Hystrix ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入: 林在…

TensorFlow-Keras - FM、WideAndDeep、DeepFM、DeepFwFM、DeepFmFM 理论与实战

目录 一.引言 二.浅层模型概述 1.LR 2.FM 3.FMM 4.FwFM 5.FmFM 三.常用推荐算法实现 Pre.数据准备 1.FM 2.WideAndDeep 3.DeepFM 4.DeepFwFM 5.DeepFmFM 四.总结 1.函数测试 2.函数效果与复杂度对比[来自FmFM论文] 3.More 一.引言 推荐系统中常见的 CTR 模型…

ONLYOFFICE中的chatGPT 是如何编写毕业论文以及翻译多种语言的

前言 chatGPT这款软件曾被多个国家的大学禁用,我们也多次在网上看到chatGPT帮助应届毕业生编写毕业答辩论文,但是这款软件目前还没有在国内正式上线,ONLYOFFICE7.3版本更新后呢,就添加了chatGPT该功能,并且正常使用。 …

springboot+vue.js学生作业管理系统idea java

由于学校教学功能的特殊定位,致使教师和学生必须在除了简单的师生区别外,还有合作意味的关系。学生上交作业和老师批改作业,这本身除了学习交流外,还是一个合作的范畴。所以,这其中的信息管理流程,需要以一…

SpringBoot中获取wav音频文件的属性

前言 wav文件定义 WAV 文件是以 WAVE 格式保存的音频文件,这是一种用于存储波形数据的标准数字音频文件格式。WAV 文件可能包含具有不同采样率和比特率的音频记录,但通常以 44.1 kHz、16 位、立体声格式保存,这是用于 CD 音频的标准格式。 …

在React项目中引入字体文件并使用

一、背景 设计稿里某些文字所用的字体,系统默认不支持。 比如设计需要的这个字体:EmerlandRegular,即使在css里将文字字体设置为他们,实际效果也显示不出来。 二、现象及原因 1、样式 2、期待效果 3、实际效果 实际上是因为这个…

java设计模式之装饰器设计模式

介绍 装饰器设计模式是一种结构型设计模式,它允许动态地将行为添加到对象中,而无需在对象的类中使用子类化。它允许您通过将对象封装在一个具有新行为的对象中来动态地修改对象的行为。 这种模式是基于组合的思想,而不是继承。 可动态地将责…

CFS三层内网渗透

目录 环境搭建 拿ubuntu主机 信息收集 thinkphp漏洞利用 上线msf 添加路由建立socks代理 bagecms漏洞利用 拿下centos主机 msf上线centos 添加路由,建立socks代理 拿下win7主机 环境搭建 设置三块虚拟网卡 开启虚拟机验证,确保所处网段正确&a…