架构设计系列之基础:初探软件架构设计

11 月开始突发奇想,想把自己在公司内部做的技术培训、平时的技术总结等等的内容分享出来,于是就开通了一个 Wechat 订阅号(灸哥漫谈),开始同步发送内容。 今天(12 月 10 日)也同步在 CSDN 上开通这个系列的文章,进度上当前比订阅号慢了,我争取尽快同步,想提前看后面内容的朋友可以同步关注订阅号。

前言

欢迎来到软件架构设计的世界,这是一次面向有志成为架构师的研发工程师的学习和分享交流的机会。

本系列内容将结合理论和实践经验,探讨软件架构的基本知识、设计原则和最佳实践,旨在和大家一起更好地理解软件架构设计的重要性和成为架构师的路径。

一、架构的基础

我们都知道编写和调试一段代码直至成功运行,这是需要一定的知识和技能,但并不需要特别高深。相比之下,软件架构却是一件非常困难的事情,它需要深入的专业知识和丰富的经验。

所以并不是所有的程序员都可以成为架构师,这需要有独特的思维和独到的见解。

一个没有良好架构的系统会带来严重的后果:

  1. 组件之间的关系错综复杂,耦合紧密,任何一个小的改动都需要数周的恶战
  2. 整个系统的设计可能差到令人无法忍受,充满了腐朽的设计和裹脚布般的恶心代码
  3. 不仅会影响系统的质量和性能,还会导致整个团队士气低落,程序员生不如死

因此,为了提高系统的质量和性能,我们需要有一个良好的系统架构。需要一位专业的架构师,他需要:

  1. 具备深厚的技术知识和经验
  2. 具备强烈的责任感和领导力
  3. 需要能够从宏观的角度看待整个系统
  4. 为系统的未来发展作出预测和规划

1 、架构是什么

架构是软件系统的顶层结构,是对软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

2 、架构的目标

使用最小的人力成本、最高的质量、更高的客户满意度来满足构建和维护该系统的需求。总结来看就是四字目标:多、快、好、省,其中涵盖了效率、成本、稳定、运维、演进、容错、安全等多个方面。

3 、架构的理论目标

  1. Reliable - 可靠性
  2. Secure - 安全性
  3. Scalable - 可扩展性
  4. Customizable - 可定制化
  5. Extensible - 可伸缩
  6. Maintainable - 可维护性
  7. Custom Experience - 客户体验
  8. Time to Market - 市场时机

二、架构的职责

架构需要将不变的部分从变化中抽象出来,沉淀为稳定的组件,同时管理多个组件之间的依赖,识别、定位、管理组件的边界和上下文,让变化更容易暴露和识别。

此外,架构还需要考虑如何管理多维度的变化,以及如何将业务逻辑变成可配置的易变更的实现方式。

三、架构的类型

如上图所示,架构分为:

  1. 业务架构:业务架构师(业务领域专家)负责,涉及对业务的定义和划分,属于顶层设计,它影响着组织结构和技术架构
  2. 应用架构:应用架构师负责,根据实际业务场景,设计应用的拓扑结构,制定规范、定义接口和数据交互协议等,尽量把应用的复杂度控制在一个可接受的范围内
  3. 系统架构:系统架构师负责,根据业务情况综合考虑系统的非功能属性,包括性能、安全性、可用性、稳定性等,然后做出技术选型;而对于分布式系统架构设计,还需要解决服务器负载、分布式服务注册和发现、消息系统、缓存系统、分布式数据库等问题以及 CAP 的权衡问题
  4. 数据架构:数据架构师负责,关注数据的收集、处理以及提供统一的服务和标准。其目的是统一数据定义规范,标准化数据表达,形成有效易维护的数据资产,搭建统一的大数据处理平台,形成数据使用闭环
  5. 物理架构:关注软件元件在硬件上的部署,包括机房搭建、网络拓扑等
  6. 运维架构:负责运维系统的规划、选型、部署上线,建立规范化的运维体系;借助技术手段控制和优化成本;通过工具化及流程提升运维效率,注重运营效率;制定和优化运维解决方案,包括但不仅限于柔性容灾、智能调度、弹性扩容和防攻击、推动及开发高效的自动化运维和管理工具、提高运维的自动化程度和效率

四、架构的衡量

一个好的系统架构需要在满足用户需求的过程中,以最低的成本实现最高的质量和客户满意度,并且能够在很长一个周期内持续保持稳定和适应变化。

如果一个系统的架构能够在满足用户需求的过程中,以较低的开发和维护成本实现较高的稳定性和可扩展性,那么这个架构就可以被认为是好的。反之,如果每次需求发布之后都会提升下一次变更的成本,那这样的架构就是不好的架构。

好的架构不是一蹴而就的,而是需要经过多方面的考虑和评估。在选择和设计系统架构时,需要考虑系统的需求、约束条件、环境等因素,并选择合适的架构类型和技术栈来满足系统的需求。

同时,还需要在架构的设计和实现过程中,注重成本效益、可维护性、可扩展性等方面的考虑,以确保系统能够以最低的成本、最高的质量和客户满意度来满足用户的需求。

总之,好的系统架构需要在满足用户需求的同时,注重成本效益、稳定性和可扩展性等方面的考虑,以实现系统的长期稳定和适应变化。

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

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

相关文章

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《面向微电网群的云储能经济-低碳-可靠多目标优化配置方法》

这篇文章的标题涵盖了以下关键信息: 面向微电网群:研究的重点是微电网群,这可能指的是多个微电网系统的集合,而不仅仅是一个单独的微电网。微电网是指由分布式能源资源、储能系统和智能控制组成的小型电力系统,通常能够…

实现加盐加密方法以及java nio中基于MappedByteBuffer操作大文件

自己实现 传统MD5可通过彩虹表暴力破解, 加盐加密算法是一种常用的密码保护方法,它将一个随机字符串(盐)添加到原始密码中,然后再进行加密处理。 1. 每次调用方法产生一个唯一盐值(UUID )密码…

UDS诊断 10服务

文章目录 简介诊断会话切换请求和响应1、请求2、子功能3、肯定响应4、否定响应5、特殊的NRC 为什么划分不同会话报文示例UDS中常用 NRC参考 简介 10服务,即 Diagnostic Session Control(诊断会话控制)服务用于启用服务器中的不同诊断会话&am…

(四) python门面模式

文章目录 4.1 结构型设计模式4.1.1 简介4.1.2 常见的几种结构型设计模式 4.2 理解门面设计模式4.2.1 门面设计模式概述4.2.2 门面设计模式的作用 4.3 UML类图4.3.1 门面4.3.2 系统4.3.3 客户端 4.4 门面模式的代码实现4.4.1 场景:4.4.2 python实现 4.5 原理&#xf…

渲染(iOS渲染过程解析)

渲染 渲染原理 一个硬核硬件科普视频 CPU和GPU CPU(Central Processing Unit):现代计算机整个系统的运算核心、控制核心,适合串行计算。GPU(Graphics Processing Unit):可进行绘图运算工作的…

安防音频接口选型的高性能国产芯片分析

在人工智能兴起之后,安防市场就成为了其全球最大的市场,也是成功落地的最主要场景之一。对于安防应用而言,智慧摄像头、智慧交通、智慧城市等概念的不断涌现,对于芯片产业催生出海量需求。今天,我将为大家梳理GLOBALCH…

Linux——缓冲区与实现C库的fopen,fwrite,fclose

目录 一.缓冲区 1缓冲区的概念 2.缓冲区存在的意义 3.缓冲区刷新策略 4.什么是刷新? C语言的缓冲区在哪里? ​编辑 仿写C库里的fopen,fclose,fwrite。 mystdio.h mystdio.c main.c(向文件中写入20次msg) 一.缓冲区 1…

b站pwn的学习总结

写的很乱 1.c语言的运行过程 了解了c语言需要经过以上2个过程(编译和汇编),才能让机器按指令运行。机器只能听得懂机器码,所以要“汇编”。 那问题就来了,“编译”这个动作有啥用,c语言这种高级语言&…

玩转大数据10:深度学习与神经网络在大数据中的应用

目录 1. 引言:深度学习和神经网络在大数据中的重要性和应用场景 2. 深度学习的基本概念和架构 3. Java中的深度学习框架 3.1. Deeplearning4j框架介绍及Java编程模型 3.2. DL4J、Keras和TensorFlow的集成 4. 大数据与深度学习的结合 4.1. 大数据与深度学…

电脑端同时登录多个微信

1、建立一个txt文件 2、右击微信查看应用的属性,记录文件的位置 3、将步骤二得到的路径按照下方的格式输入到步骤一的文本中 4、保存之后将文本后缀名的.txt改成.bat 5、在未登录微信的情况下,双击即可得到两个微信登录窗口

解决idea 通过build project 手动触发热部署失败

在debug运行项目的过程中,并且保证(不添加方法,不修改方法名)一定的规则的情况下,可以通过build project 来手动热部署项目,也就是会交换class文件与resouces文件。 设置项 Edit Configurations Modify Op…

计算机图形学理论(1):建模基础

本系列根据国外一个图形小哥的讲解为本,整合互联网的一些资料,结合自己的一些理解。 场景的组成部分 场景相当于一个或多个模型的集合。模型包含以下内容: 结构描述:几何形状,如顶点、纹理坐标等表面描述&#xff1a…

Vue3中的defineModel

目录 一、vue3的defineModel介绍 二、defineModel使用 (1)在vite.config.js中开启 (2)子组件 (3)父组件 一、vue3的defineModel介绍 为什么要使用到defineModel呢?这里有这样一种场景&…

“快速排序:一种美丽的算法混沌”(1.hoare)

欢迎来到我的博客!在今天的文章中,我将采用一种独特且直观的方式来探讨我们的主题:我会使用一幅图像来贯穿整篇文章的讲解。这幅精心设计的图表不仅是我们讨论的核心,也是一个视觉辅助工具,帮助你更深入地理解和掌握本…

学习深度强化学习---第2部分----RL动态规划相关算法

文章目录 2.1节 动态规划简介2.2节 值函数与贝尔曼方程2.3节 策略评估2.4节 策略改进2.5节 最优值函数与最优策略2.6节 值迭代与策略迭代2.7节 动态规划求解最优策略 本部分视频所在地址:深度强化学习的理论与实践 2.1节 动态规划简介 态规划有两种思路&#xff1…

前端 Web Workers 简介

简介 以前我们总说,JS 是单线程没有多线程,当 JS 在页面中运行长耗时同步任务的时候就会导致页面假死影响用户体验,从而需要设置把任务放在任务队列中;执行任务队列中的任务也并非多线程进行的,然而现在 HTML5 提供了…

App备案、ios备案Bundle ID查询、公钥信息、SHA-1值

App备案、ios备案Bundle ID查询、公钥信息、SHA-1值 Bundle ID这个就不说了,都知道是啥,主要说公钥信息和SHA-1值的获取 打开钥匙串访问,找到当前需要备案App的dis证书,如下: #####右键点击显示简介 #####可以看…

03.仿简道云公式函数实战-QLExpress初探

1. 前言 在上一篇文章中,我们简单介绍了一下表达式引擎,并引出我们的主角QLExpress.在这篇文章中,我们先来一个QLExpress的热身。 2. 初探QLExpress 源码地址:https://github.com/alibaba/qlExpress 笔者下载源码的版本是3.3.…

STL源码剖析笔记——适配器(adapters)

系列文章目录 STL源码剖析笔记——迭代器 STL源码剖析笔记——vector STL源码剖析笔记——list STL源码剖析笔记——deque、stack,queue STL源码剖析笔记——Binary Heap、priority_queue STL源码剖析笔记——AVL-tree、RB-tree、set、map、mutiset、mutimap STL源…

【Spring 基础】00 入门指南

【Spring 基础】00 入门指南 文章目录 【Spring 基础】00 入门指南1.简介2.概念1)控制反转(IoC)2)依赖注入(DI) 3.核心模块1)Spring Core2)Spring AOP3)Spring MVC4&…