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

架构设计之思考路线

概述

        看过不少本架构设计方面的书籍,如《亿级流量网站架构核心技术》《超大流量分布式系统架构解决方案》《企业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,一经查实,立即删除!

相关文章

学习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、命名规范 类名:大驼峰方法名:小驼峰成员变量、局部变量:小驼峰测试方法名:蛇形命名 下划…

【云原生】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…

[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指定版本手机可以一键新机的系统(参数调试)独享的家…

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

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

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

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

MyBatis-Plus的基本使用(一)

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

【Java Bean 映射器】通过 MapStruct 和 BeanUtils 拷贝对象的区别

目录 👋前言 👀一、环境准备 🌱二、拷贝工具使用 2.1 BeanUtils 使用 2.2 MapStruct 使用 💞️三、对比 📫四、章末 👋前言 小伙伴们大家好,最近在一些技术文章中看到了开发时经常接触的对…

面向对象·回顾;万类之祖object;抽象类Abstract。

回顾面向对象 类与对象 类--------(instance实例化对象)-------->对象 类图 调出你public方法–接口 访问控制符 常用private,public。 封装 可见性本类包不同包private✓✕✕不写dafalt(默认)✓✓✕protected✓✓继承✓public✓✓✓…

【计算机网络】RIP路由协议实验

一:实验目的 1:掌握在路由器上配置RIPv2。 二:实验仪器设备及软件 硬件:RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为:三层交换机1台、路由器2台。 软件:wireshark软件、记…

01-调试开发k8s

使用 Docker 构建 Kubernete 官方 release 是使用 Docker 容器构建的。要使用 Docker 构建 Kubernetes,请遵循以下说明: Requirements docker Key scripts 以下脚本位于 build/ 目录中。请注意,所有脚本都必须从 Kubernetes 根目录运行 build/run.…

【科研绘图】记录一次论文结果复现

复现原论文中的图片是科研的基本功之一,它不仅验证了研究结果的可靠性,确保了科学工作的准确性和可重复性,还深刻地评估了方法的有效性,体现了对原始研究的尊重和对科学过程的严谨态度。这个过程不仅提高了研究的透明度&#xff0…

记忆注意力用于多模态情感计算!

记忆注意力用于多模态情感计算! 目录 情感计算 一、概述 二、研究背景 三、模型结构和代码 六、数据集介绍 七、性能展示 八、复现过程 九、运行过程 模型总结 本文所涉及所有资源均在传知代码平台可获取。 情感计算 近年来,社交媒体的快速扩张推动了用户…

信通院发布!首个大模型混合云标准

近日,中国信通院发布了首个大模型混合云标准,通过定位当前大模型混合云的能力水平,为基于混合云的大模型服务实践提供指引,并明确未来提升方向。同时,中国信通院基于标准展开大模型混合云能力成熟度专项测试&#xff0…