当前位置: 首页 > news >正文

如何做系统架构设计

文章目录

    • 1、如何进行架构设计
      • 体系架构需求
      • 体系架构设计
      • 体系架构文档化
      • 体系架构复审
      • 体系架构实现
      • 体系架构演化
    • 2、架构设计注意事项
      • 分治原则
      • 服务自治
      • 拥抱变化
      • 可维护性
      • 考虑依赖和限制
      • 阅读代码注意事项
    • 3、最后

​系统架构应该如何设计,从自己做架构的经历来分享一些体会。根据每个人的思维习惯不同,我的这些思考不见的都适合你,但多少对大家会有所帮助。

1、如何进行架构设计

系统架构的设计需要遵循一定的步骤和原则,这里我从:架构需求、架构顺序、架构文档、架构复审、架构实现和架构演化5个方面谈一些自己的理解。

体系架构需求

全面获取和分析用户对软件系统功能、性能、界面、设计约束等方面的期望,也就是需要了解用户的真实需求,并将每一个需求项目抽象定义为构件(类的集合)。

体系架构设计

通常会采用迭代的方法。

首先选择一个合适的软件体系架构风格,如C/S、B/S、N层、管道过滤器风格、C2风格等,作为架构模型,然后将需求阶段标识的构件映射到模型中,分析构件间的相互作用关系,最后形成量身订做的软件体系架构。

体系架构文档化

生成用户和研发人员能够阅读的体系架构规格说明书和体系架构设计说明书。

体系架构复审

及早发现体系架构设计中存在的缺陷和错误,及时予以标记和排除。

体系架构实现

设计人员开发出系统构件,按照体系架构设计规格说明书进行构件的关联、合成、组装和测试。

体系架构演化

如果用户需求发生了变化,则需相应地修改完善优化、调整软件体系结构,以适应新的变化了的软件需求。

2、架构设计注意事项

在进行架构设计时,以下是一些需要注意的事项。

分治原则

将系统划分为多个子系统或模块,每个子系统或模块都可以独立地进行开发、测试、部署和维护。这样可以降低系统的复杂度,提高系统的可维护性和可扩展性。

服务自治

每个服务都应该具备独立的能力,能够独立地进行开发、测试、部署和维护。这样可以提高服务的可用性和可靠性,降低系统的耦合度。

拥抱变化

系统架构设计应该能够适应业务需求的变化和市场的变化,具备快速响应和灵活应变的能力。

可维护性

关注系统运行日志和调试模块,便于开发和维护时的诊断和调试。关键事件和主要处理流程添加必要日志,同时注意日志信息与日志级别合理设置,使关键事件与运行信息有log可追踪。集公共特性为机制,集公共机制于平台。

考虑依赖和限制

熟悉业务逻辑,并考虑相关模块的能力和限制;比如基础模块的数据转发或处理性能限制,会不会导致消息丢失或block;重构或改写代码前,一定要先把原先的业务和代码吃透,了解为什么需要重构,原来代码架构遇到了什么瓶颈或问题,重构的目标是什么,能cover设计的所有问题吗;因此慎用重构,不要过早的优化,可以小规模改图或优化。

阅读代码注意事项

首先从用户角度整体认识产品;了解业务使用场景,核心功能以及周边交互模块,缩小问题范围;并体验一下,有个整体的感性认识。

3、最后

在进行系统架构设计时,首要遵从“适合原则”。

架构师首先是技术管理者,技术方案选型权衡取舍做技术决策是核心的职责,那么系统架构设计首先要考虑的就是要满足当前业务出发同时能支持适应业务发展而扩展开发维护,同时也要结合团队技术积累和实力、项目时间和成本投入等全方位的综合评估取舍,而不是为技术而技术。

最后,系统架构设计需要遵循一定的步骤和原则,同时要理解业务需求和团队的技术实力,做出合理的架构决策。

http://www.lryc.cn/news/193593.html

相关文章:

  • L14D6内核模块编译方法
  • PyTorch入门教学——dir()函数和help()函数的应用
  • 使用Elasticsearch来进行简单的DDL搜索数据
  • 【软考】9.3 二叉树存储/遍历/线索/最优/查找/平衡
  • 关于矿井地面电力综合自动化系统的研究与产品选型
  • 论文阅读:Offboard 3D Object Detection from Point Cloud Sequences
  • Python学习基础笔记六十八——循环
  • 部署k8s dashboard(这里使用Kubepi)
  • Java Lambda表达式的使用
  • 【初始C语言8】详细讲解初阶结构体的知识
  • <C++> IO流
  • 基于单目相机的2D测量(工件尺寸和物体尺寸)
  • 23面向对象案例1
  • go语言基础之常量与itoa
  • 民宿酒店订房房态商城小程序的作用是什么
  • acwing算法基础之数据结构--栈和队列
  • 关于导出的Excel文件的本质
  • Rust中FnOnce如何传递给一个约束Fn的回调
  • 【JUC】线程通信与等待唤醒机制
  • C#面对对象(英雄联盟人物管理系统)
  • 2023年中国分布式光纤传感产量、需求量及行业市场规模分析[图]
  • B2R Raven: 2靶机渗透
  • SpringBoot-黑马程序员-学习笔记(六)
  • unity2022版本 实现手机虚拟操作杆
  • 『GitHub Actions』部署静态博客指南
  • WPF Datagrid Header数据绑定,表头复选框实现全选、全否、部分选中,根据条目动态变化
  • Tensorflow2 中对模型进行编译,不同loss函数的选择下输入数据格式需求变化
  • 【python】基础语法(三)--异常、模块、包
  • XGBoost+LR融合
  • leetcode:1929. 数组串联(python3解法)