【五】架构设计之思考路线

架构设计之思考路线

概述

        看过不少本架构设计方面的书籍,如《亿级流量网站架构核心技术》《超大流量分布式系统架构解决方案》《企业IT架构转型之道》《从程序员到架构师》等,看完之后最终发现架构设计思维大同小异,无非都是围绕实现三高(高并发、高可用、高性能)系统来展开,不同书籍侧重面不同。很喜欢马云说过的一句话:书不能都太多,读太多了做的就少了。看了五六本相关书籍之后感觉是时候进行一些总结归纳了,再看意义也就不大了。我们通过书籍看到的知识只有沉淀成自身的知识才算是吸收了,反思沉淀之后我们需要把理解的知识进行输出才算完全消化掉,输出既是对自身吸收情况的检测也是传播知识的一种好习惯。

一、常见的架构模式以及选择分析

        之前汇总过一遍文章【二】架构演进之路-CSDN博客,里面总结了架构演进之路,当时归类的不够完善,实际上架构演进经过了如下历程:

        单体架构-》分布式架构-》SOA架构-》微服务架构-》后微服务时代-》无服务时代

        其中后微服务时代我理解是容器云架构,另一个接触比较少的模式无服务时代,即无服务架构,也被称为函数即服务(Function as a Service,FaaS),是一种云计算模型,用于构建和部署应用程序,无需关心底层服务器的管理。说是无服务架构个人理解也比较少,感兴趣的同学可以去找一些资料进行理解。

        这么多架构模式我们该如何去选择呢,根据个人经历目前要考虑架构模式从这几个中选择就可以了单体架构、微服务架构、后微服务时代、无服务时代。根据业务需求、系统使用场景以及团队人数来考虑我们可以确定采用单体架构还是微服务架构,我们做的新能源行业的数字化业务平台,个人是这么理解的,首先如果系统用在电网侧和发电侧我们尽量使用单体架构,前提是业务量不大的情况下,因为这些场景通常需要出差到电网现场部署和运维,复杂架构存在很大的弊端,其次都是业务量不大的系统,另外就是公司的一些OA类系统优先考虑单体架构,其次就是电网系统通常并发数不高但是数据规模大这样我们就扩展数据层架构就可以了,单体架构的优势就是人员成本低,综合来说就是在满足业务系统需求的前提下尽量选用节省预算的解决方案来做项目。另一方面是考虑使用微服务架构的逻辑,业务体量大的系统我们就需要优先考虑微服务架构了,同时要考虑大家团队规模来进行微服务规划。

二、架构设计过程中思考路线

        本章节主要讲一下个人在做系统架构设计过程中的思路路线,如下图概括了个人的思考路线:

        很多时候我更愿意把系统软件的日常工作统称为软件设计,软件设计包括了:需求分析、抽象建模、系统设计、数据设计、非功能设计。接下来分别介绍一下各流程节点所做的工作以及产出成果。

需求分析

        这阶段主要是产品经理要投入的工作,产品经理和需求方频繁互动之后需要产出需求文档、原型设计,这些产出是非常重要的,直接影响到系统的顺利交付工作,等产出这些资料之后,产品经理需要组织软件研发工程师,UI设计师,测试工程师一起开需求评审会议确定需求设计稿,定稿之后软件研发工程师,UI设计师,测试工程师就可以启动了,UI设计师在需求定稿之后给出UI设计图,测试工程师着手用例的规划和编写,此时研发工程师开始着手抽象建模工作了。

        这一部分产出的资料:需求文档、原型设计、UI设计图

抽象建模

        这一步由软件研发工程师主导推进,工程师们根据产品需求文档和原型设计进行领域建模,在建模过程中需要和产品经理频繁互动避免需求理解偏差。

系统设计

        这一步是很核心的工作,系统交付质量的好坏就看设计的好坏了。系统设计个人理解又可以分为:技术方案选型、代码结构设计。其中技术方案选型包含了架构设计的工作,架构设计我们可以采用如下的方法进行设计:

而三高系统架构设计期间我们要考虑如下方面的技术:

        代码结构设计个人是这么理解的,一直以来我们都是采用MVC模式来进行,从2019年领域驱动设计概念问世,我们就多了一种选择了,这两中设计思路代码结构不一样,其中包结构以及类的规划也存在差异,还有就是代码结构设计期间我们需要确定代码规范,从而使得系统整体设计一致。

        这一部分要产出的资料是非常之多的:技术文档、接口文档、系统部署手册(网络拓扑图)、系统测试用例及手册、属性值数据字典说明文档、源代码、源代码说明手册、系统概要设计说明书(架构图)、系统技术说明书、使用手册、维护说明书

数据设计

        这一部分的设计可以说是重中之重了,大学课程中经常看到:数据结构+算法=程序,个人得出一个广义上结论:数据库+程序=系统。数据层没设计好首先影响系统稳定性,另外后期扩展和迁移也都是比较困难的,所以再做数据设计过程中我们要考虑周到。数据层技术选型如下:

        选好数据层技术之后,还需要确定好架构方案,因为数据层技术一般提供了如下的架构方案可供选择:

        这一部分产出的资料:数据库设计说明书、数据库脚本及相关服务器脚本

非功能设计

        非功能设计在整个软件设计中是单独要考虑的,不同的系统有不同的非功能需求,非功能设计我们需要考虑如下方面:

        这些也都是个人在做过不少大大小小的项目之后总结归纳出来的,具体的指标会根据系统需求调整,但是这些方面我们在设计中要思考到。

总结

        本文算是对个人现阶段在软件设计方面的沉淀输出了,后面写的有点匆忙,后面有耐心继续再完善。再写本文之前个人也是阅读了5-6本以上的行业大佬编写的系统架构设计书籍,然后结合自身的项目经验理解分析得出了自己能接受的思考路线,各书籍编写有好有坏,但是软件设计路线大同小异,读者需要结合自己的经验吸收总结才好,尽信书不如无书。

        个人现阶段的观点希望读者看到也是有选择的进行吸收采纳,欢迎在评论区留言交流!

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

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

相关文章

【总结】前端JQuery获取Java后端文件流实现常规附件预览功能

前端JQuery获取Java后端文件流实现常规附件预览功能 项目背景1. Java后端处理附件1.1 将word文档转换为pdf格式1.2 将文件流返回前端 2. 前端处理附件预览(JQuery)2.1 预览pdf文件2.2 预览ofd文件2.3 预览图片、txt文档 共勉。 项目背景 目前维护的项目…

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解:池就是容器,容器中存放了多个连接对象 使用原因: 1.优化创建和销毁连接的时间(在项目启动时创建连接池,项目销毁时关闭连接池) 2.提高连接对象的复用率 3.有效控制项目中连接的…

Windows下Pytorch入门深度学习环境安装与配置(CPU版本)

Windows下Pytorch入门深度学习环境安装与配置(CPU版本) 一、安装过程中各个软件的作用(一)Python(二)库 / 包 / package / library(三)PyTorch / Tensorflow(四&#xff…

Java之开发 系统设计 分布式 高性能 高可用

1、restful api 基于rest构建的api 规范: post delete put get 增删改查路径 接口命名 过滤信息状态码 2、软件开发流程 3、命名规范 类名:大驼峰方法名:小驼峰成员变量、局部变量:小驼峰测试方法名:蛇形命名 下划…

【Sass】常用全局sass高级函数,可使用原子化CSS减轻代码量,方便快速开发

文章目录 前言一、安装二、样式custom.scssflex.scsscolor.scssmargin-padding.scssorther 总结 前言 提示:这里可以添加本文要记录的大概内容: 针对style的预编译器为scss 转载自git前端知识库 原博主是B站up程序员郑清,可以看他的v3教程…

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…

平面点云三角化边数与点的关系

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 点云三角化定义 原文 说人话: 一个二维平面点集P三角化结果是一个满足以下条件的三角形集合: 1 所有三角形的并集刚好是P的凸包。 2 所有三角…

python3GUI--new音乐播放器!By:PyQt5(附下载地址)

文章目录 一.前言二.展示1.启动2.MV推荐3.专辑详情页4.歌手详情页5.搜索结果页6.歌曲播放页7.我喜欢歌曲页8.我喜欢专辑页 三.思路&启发1.布局2.细节3.组件复用4.项目结构5.优化速度1.Nuitka1.显著提高性能:2.减小程序体积&am…

Java集合框架2024最通俗易懂(图片超全)

集合 1.1、定义 集合就是类型统一的数据组合而成的数据结构,该数据结构可以任意的改变长度。 1.3、Set Set数据存储结构,无序,且不可以重复,元素可以为null,但是也只能出现一次,如下图: 1.3.1、HashSe…

WEB渗透Web突破篇-SQL注入(Oracle)

版本 SELECT user FROM dual UNION SELECT * FROM v$version数据库名 SELECT global_name FROM global_name; SELECT name FROM V$DATABASE; SELECT instance_name FROM V$INSTANCE; SELECT SYS.DATABASE_NAME FROM DUAL;列库 SELECT DISTINCT owner FROM all_tables;列表 …

rag输出了幻觉怎么办

首先,幻觉也分类型。 一个是事实性幻觉,就是LLM凭借自身能力回答问题,但是这个回答是编的,也可能有正确答案但是LLM输出错了。总之这是LLM自身原因。 另一个是忠实性幻觉,就是你要求LLM根据你给的材料给出答案&#xf…

Scikit-learn提供了哪些机器学习算法以及如何使用Scikit-learn进行模型训练和评估

Scikit-learn库的使用 一、Scikit-learn提供的机器学习算法 Scikit-learn(通常简称为sklearn)是一个广泛使用的Python机器学习库,它提供了多种用于数据挖掘和数据分析的算法。Scikit-learn支持的机器学习算法可以大致分为以下几类&#xff…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型:Mistral Large 2Node.js 合并 TypeScript 文件执行提案:--experimental-strip-types Mistral AI 发布新一代旗舰模型:Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2,该…

算法-----递归~~搜索~~回溯(宏观认识)

目录 1.什么是递归 1.1二叉树的遍历 1.2快速排序 1.3归并排序 2.为什么会用到递归 3.如何理解递归 4.如何写好一个递归 5.什么是搜索 5.1深度(dfs)优先遍历&优先搜索 5.2宽度(bfs)优先遍历&优先搜索 6.回溯 1.什…

Temu测评自养号如何做?三分钟带你入门!

环境系统 现在市场上很多的系统都是现成的或软件包,没有解决风控的能力,如果有需要建议大家自己学习一套技术,把技术掌握在自己手里,这样不会有依赖性 手机端环境:越狱后的ios指定版本手机可以一键新机的系统(参数调试)独享的家…

梧桐数据库:子查询优化技术

在数据库技术中,子查询是一个强大的工具,但不加优化的子查询可能会导致性能问题。优化子查询可以显著提升查询效率。以下是一些常见的子查询优化技术: 1. 使用连接(JOIN)替代子查询 1.1 基本原理 很多情况下&#x…

【NLP自然语言处理】为什么说BERT是bidirectional

首先,来看一下Transformer架构图: 我们知道,Bert设计时主要采用的是Transformer编码器部分,要论述Bert为啥是双向的,我想从编码器和解码器的注意力机制来阐述。 在看这篇博客前,需要对Transformer有一定的…

[C++] vector入门迭代器失效问题详解

文章目录 vector介绍**vector iterator 的使用** vector迭代器失效问题由扩容或改变数据引起的迭代器失效reserve的实现(野指针)insert实现(迭代器位置意义改变)insert修改后失效的迭代器 it迭代器失效 erase后的问题总结&#xf…

nextjs当后端使-读取excel文件

目前nextjs有种php的感觉,现在的需求是读取excel文件,入数据库,拆分出读取excel的代码如下: import { NextRequest } from "next/server"; import { join } from "path"; import { readFile } from "fs…

MyBatis-Plus的基本使用(一)

目录 前言 特性 MyBatis-Plus入门案例 常用注解 小结 前言 这篇文章主要来学习MyBatis-Plus这个非常强大的框架. 在学习MyBatis-Plus之前,需要有MyBatis的学习基础.因为MyBatis -Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变&#x…