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

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.hqwc.cn/news/264471.html

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

相关文章

nodejs微信小程序+python+PHP健身服务应用APP-计算机毕业设计推荐 android

人类的进步带动信息化的发展,使人们生活节奏越来越快,所以人们越来越重视信息的时效性。以往的管理方式已经满足不了人们对获得信息的方式、方便快捷的需求。即健身服务应用APP慢慢的被人们关注。首先,网上获取信息十分的实时、便捷&#xff…

mysql中的DQL查询

表格为: DQL 基础查询 语法:select 查询列表 from 表名:(查询的结果是一个虚拟表格) -- 查询指定的列 SELECT NAME,birthday,phone FROM student -- 查询所有的列 * 所有的列, 查询结果是虚拟的表格&am…

Vue3:表格单元格内容由:图标+具体内容 构成

一、背景 在Vue3项目中,想让单元格的内容是由 :图标具体内容组成的,类似以下效果: 二、图标 Element-Plus 可以在Element-Plus里面找是否有符合需求的图标iconfont 如果Element-Plus里面没有符合需求的,也可以在这…

Java类对象的操作

1.Student.java package Message; public class Student {private String stuName; // 姓名private int money; // 存款余额private String studentID; // 学号private int age; // 年龄private String address; // 地址private String phoneNumber; // 电话号码private String…

使用alpine镜像部署go应用时踩的坑

使用alpine镜像部署go应用时踩的坑 关于交叉编译 实际上我在ubuntu的交叉编译出来的exe并不能在alpine上运行,这边采取拉镜像编译复制出来的做法,部署再用干净的alpine 拉取golang:alpine踩坑 在Dockerhub上可以找到: 然而拉取的alpine中…

虚拟机VMware安装centos以及配置网络

目录 1、CentOS7的下载2、CentOS7的配置3、CentOS7的安装4、CentOS7的网络配置 4.1、自动获取IP4.2、固定获取IP 5、XShell连接CentO 准备工作:提前下载和安装好VMware。VMware的安装可以参考这一篇文章:VMware15的下载及安装教程。 1、CentOS7的下载 …

【设计模式--创建型--建造者模式】

建造者模式 建造者模式概述结构结果优缺点使用场景 将上述案例改为链式调用结果 建造者模式 概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构建(由Builder来负责)和装配(由Direct…

基于JavaWeb+SSM+Vue马拉松报名系统微信小程序的设计和实现

基于JavaWebSSMVue马拉松报名系统微信小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.…

C语言-每日刷题练习

[蓝桥杯 2013 省 B] 翻硬币 题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果…

记录一次云原生线上服务数据迁移全过程

文章目录 背景迁移方案调研迁移过程服务监控脚本定时任务暂停本地副本服务启动,在线服务下线MySQL 数据迁移Mongo 数据迁移切换新数据库 ip 本地服务启动数据库连接验证服务打包部署服务重启前端恢复正常监控脚本定时任务启动旧服务器器容器关闭 迁移总结 背景 校园…

头歌-Python 基础

第1关:建模与仿真 1、 建模过程,通常也称为数学优化建模(Mathematical Optimization Modeling),不同之处在于它可以确定特定场景的特定的、最优化或最佳的结果。这被称为诊断一个结果,因此命名为▁▁▁。 填空1答案:决…

通过生成模拟释放无限数据以实现机器人自动化学习

该工作推出RoboGen,这是一种生成机器人代理,可以通过生成模拟自动大规模学习各种机器人技能。 RoboGen 利用基础模型和生成模型的最新进展。该工作不直接使用或调整这些模型来产生策略或低级动作,而是提倡一种生成方案,该方案使用…