架构设计我们要注意什么?

news2024/11/24 9:08:34

这几天我正在做一个新项目的架构设计,关于动态流程引擎平台的搭建,涉及到了系统架构的设计,里面涉及了方方面面,所以就想着结合自己的实际经验,遇到的问题,以及自己的理解,为大家做一个简单的分享。

我今天主要从这么几个方面来为大家说一下。

架构的本质

其实总结下来就一句话:架构本质上其实就是一种指导型的约束,约定整体和部分、部分和部分之间的关系,以使整体更加稳定,更加可靠

分为三部分:
整体:部分的组成,强调合力。
规则:强调部分之前有关联关系,有规则,有约束。
通信:强调部分之间有往来,有交互。

在这里插入图片描述

架构的分类

实际上架构有很多种类型,比如业务架构,应用架构,技术架构,数据架构等,甚至单个架构,我们站在不同的角度上,也会有不同的看法,其中的复杂度也是各不一样的。

业务架构

业务架构是指企业或机构的业务逻辑、流程、组织结构等方面的设计。它着重于企业业务运营的需求和目标,将业务需求转化为技术解决方案。业务架构的设计需要考虑企业的战略规划、组织结构、业务流程、客户需求等多个方面。
例如:一个银行的业务架构设计需要考虑银行的基本业务逻辑、流程和组织结构,如存款、贷款、投资、支付等,以及银行的安全性、可靠性和效率等方面的需求。

应用架构

应用架构是指企业或机构的信息系统中的应用程序、系统、服务等方面的设计。它着重于解决企业业务运营中的具体问题,将业务需求转化为具体的应用程序。应用架构的设计需要考虑企业的业务需求、用户体验、系统性能、安全风险等多个方面。
例如:一个电商网站的应用架构设计需要考虑用户购物、订单管理、库存管理、支付等多个应用程序的设计,以及这些应用程序之间的交互和集成。

技术架构

技术架构是指企业或机构的信息系统中的技术实现、系统架构、软件设计等方面的设计。它着重于解决企业业务运营中的技术问题,如系统的稳定性、可扩展性、可维护性等。
例如:一个电商网站的技术架构设计需要考虑系统的负载均衡、容错容灾、CDN缓存、自动化部署等多个方面的技术实现。

数据架构

数据架构是指企业或机构的信息系统中的数据存储、数据处理、数据安全等方面的设计。它着重于解决企业业务运营中的数据问题,如数据的一致性、完整性、安全性等。
例如:一个电商网站的数据架构设计需要考虑数据的分层存储、数据备份和恢复、数据加密和权限管理等多个方面的设计,以确保数据的安全和可靠性。

架构设计要考虑的因素

架构设计过程中我们要考虑的因素,整体可以分为两大类,一类是功能性因素,一类是非功能性因素。

功能性因素

无论什么架构设计,我们首先是要考虑必须满足我们的业务需求,否则我们的设计都是空中楼阁。功能需求会直接决定我们的业务架构设计。所以我们的架构必须完整性地,正确地对业务实现支撑。

非功能性因素

满足了功能性因素以后,我们就得要考虑怎么能够稳定地,可靠地,可持续性地支持我们的业务功能,比如性能,可靠性,扩展性,兼容性等等。

  1. 可靠性
    为了更好的服务于功能,我们需要确保架构能够稳定、高效的运行。不会时不时的出现服务崩溃或者不可用的情况。
  2. 可用性
    同样的,服务对外要始终处于可用的状态,即使单个服务实例出现问题,我们依然可以正常的对外提供服务。
  3. 扩展性
    功能性需求不是一层不变的,尤其在当今盛行敏捷的时代,需求不是一次性提出的。我们需要对系统、服务的整体能力有全面的定位和把控。这就需要我们的架构在新的需求出现的时候,可以方便的进行扩展支持。
  4. 治理能力
    好的架构一定是方便运营、管理和监控的。甚至微观到工程管理,代码一定是易于维护、扩展、协同的。
  5. 响应性能
    一般的,功能性需求都会对性能有一定的预期。这个业务要我们在架构上做很多工作,比如读写分离、缓存、异步等等的介入,以满足整体架构的响应能力。

在这里插入图片描述

设计原则

  • 价值为王:系统架构设计应该以实现业务价值为目标,始终关注用户需求和业务场景,确保设计出的系统能够满足用户需求和业务场景,为企业创造价值。
  • 以终为始:在进行系统架构设计时,需要明确系统的目标和愿景,并以此为起点,进行设计和实现。以确保系统的设计和实现都是为了实现业务价值,满足用户需求。
  • 分治原则:将系统划分为多个子系统或模块,每个子系统或模块都可以独立地进行开发、测试、部署和维护。这样可以降低系统的复杂度,提高系统的可维护性和可扩展性。
  • 服务自治:每个服务都应该具备独立的能力,能够独立地进行开发、测试、部署和维护。这样可以提高服务的可用性和可靠性,降低系统的耦合度。
  • 拥抱变化:系统架构设计应该能够适应业务需求的变化和市场的变化,具备快速响应和灵活应变的能力。
  • 系统安全性:系统架构设计应该充分考虑系统的安全性,包括数据安全、应用安全、系统安全等方面,确保系统的安全性和稳定性。
  • 不作不死:系统架构设计应该遵循“最小化变更范围”原则,避免过度设计和复杂度的出现,从而提高系统的可维护性和可扩展性。

常见的架构设计方案

之前比较流行的是MVC,MVC有很多的优点,但是缺点也不少:

  1. 视图与控制器的连接过紧,视图如果不依赖控制器,那么它的应用就会十分有限,这妨碍了他们的独立。
  2. 模型对视图数据的访问效率较低,工作量大,并且有一些高级的界面工具或构造器不支持MVC框架。
  3. MVC架构使得我们面向视图开发,但是视图的变化是不可控的,容易受到用户主观的影响。同时复杂系统必然存在纷繁复杂的依赖,依赖不可能存在于视图,最终表现为接口依赖。

所以现在比较流行如下几种方案:
在这里插入图片描述

领域驱动架构

领域驱动设计是通过将软件实现与核心业务概念的演进紧密相连,从而实现复杂需求的软件开发方法。
领域驱动设计包括三要素:

  1. 专业知识:就是前期在与客户沟通需求过程中,学习到的关于业务方面的知识。 这类知识并不仅仅只是对需求的理解,更多的要思考业务需求实际要解决的是什么问题。
  2. 抽象能力:一般指发现核心业务对象,简化问题空间的能力。
  3. 细分问题:把业务问题细化为更小更容易处理的子问题。

领域驱动设计,使得我们不再用数据进行驱动,而是使用领域进行驱动。遇到问题,我们先进行领域上的划分和拆解。这个问题属于哪个问题域,或者需要拆解到哪些问题域里面去,然后再通过领域的组合以及依赖,完成最终问题的解决。

微服务架构

微服务架构是一种软件开发架构,它将应用程序拆分成小型、独立的微服务,每个微服务都有自己的功能集,并运行在其独立的进程中。

微服务架构有以下优点:

  1. 开发人员可以只关注整个结构中的其中某一层,可以很容易的用新的实现来替换原有层次的实现,可以降低层与层之间的依赖,有利于标准化。
  2. 有利于各层逻辑的复用,如PetShop可经过简单的配置实现Sqlserver和Oracle之间的转换。
  3. 扩展性强,不同层负责不同的层面,有利于系统的扩展和维护。
  4. 安全性高,用户端只能通过逻辑层来访问数据层,减少了入口点,把很多危险的系统功能都屏蔽了。
  5. 项目结构更清楚,分工更明确,有利于后期的维护和升级。

云原生架构

在这里插入图片描述
云原生架构是一种创新的软件开发方法,专为充分利用云计算模型而设计。
云原生架构通过结合使用云计算和各种云服务来创建具有更大可扩展性的可定制模块化基础架构,从而提高了团队的效率,生产力和协作能力。
云原生架构的核心原则:

  1. 云原生架构是一种设计方法,利用AWS等EC2,S3,Lambda等云服务来支持动态,敏捷的应用程序开发技术,这些技术采用模块化方法通过一套基于云的套件来构建,运行和更新软件微服务与整体应用程序基础架构。
  2. 微服务和容器化通过简化云提供商之间的转移或独立地以不同的语言或框架部署服务而没有冲突或停机的情况,从而支持云本机应用程序的敏捷性和动态性。
  3. 将微服务架构集成到应用程序开发中可支持协作,效率和生产力,因为DevOps团队能够同时独立处理应用程序的不同组件或实现新功能而又不牺牲稳定性。

DevOps架构

在这里插入图片描述

DevOps架构,它旨在加强软件产品开发与交付过程中的协作、自动化、持续性和监控等方面,以实现更高效、更迅速和更可靠的软件交付。
DevOps通常包括以下核心组成部分:

  • 持续集成:将代码频繁地集成到一个共享的代码库中,并对代码进行自动化测试,以确保代码质量和稳定性,并及时发现和解决错误。
  • 持续交付:通过自动化测试、构建、部署和运行环节,实现快速、可靠和可重复的软件发布,从而减少手动操作和人工干预带来的错误和风险。
  • 自动化运维:将基础设施的管理、配置和维护工作自动化,并将其作为代码、脚本或配置文件存储在版本控制系统中,以便快速搭建、复制和修改环境。
  • 容器化技术:使用容器化技术(如Docker)将应用程序和其依赖项打包成独立的、可移植的容器,在不同的环境中快速部署和运行。
  • 监控和日志分析:通过对软件运行时数据进行采集、储存、分析和可视化,监控系统状态、性能和安全等方面的指标,并及时发现和修复问题。

大数据架构

在这里插入图片描述
大数据架构是一种面向海量数据、高并发、高可靠、高性能的计算和存储系统架构,用于管理和处理大规模的结构化、半结构化和非结构化数据。它具有以下几个特点:

  • 高可扩展性:大数据架构应该能够轻松地扩展到海量数据和高并发请求下。
  • 高容错性:大数据架构应该在硬件、网络和软件故障等异常情况下保证系统稳定性。
  • 实时计算:大数据架构需要支持实时计算和流式处理,以满足复杂的业务场景。
  • 数据安全:大数据架构需要保证数据的机密性、完整性和可用性,避免数据泄露和损坏。
  • 成本效益:大数据架构应该充分考虑成本问题,尽可能利用开源技术和云平台来降低系统运维和资源开销。

比如常见的大数据架构包括Hadoop、Spark、Storm、Kafka等开源软件,它们可以被组合在一起形成一个完整的数据处理流水线。例如,Hadoop可以提供分布式文件系统HDFS和MapReduce计算模型,Spark可以提供内存计算和机器学习功能,Storm可以提供实时数据处理功能,Kafka可以提供高可靠的消息队列服务。使用这些开源软件和云平台,企业可以构建出适合自己场景的大数据处理系统,提升自身的业务竞争力

今天架构设计的思想就为大家分享到这里,希望大家多多点赞关注,我的文章能给大家带来更多的帮助!!!

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

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

相关文章

损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU超详细精讲及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值不一样的程度,损失函数越小,通常模型的性能越好。不同的模型用的损失函数一般也不一样。 损失函数的使用主要是在模型的训练阶段,如果我们想让预测值无限接近于真实值,就需要将损…

献给蓝初小白系列(二)——Liunx应急响应

1、Linux被入侵的症状​​ ​​https://blog.csdn.net/weixin_52351575/article/details/131221720​​ 2、Linux应急措施 顺序是:隔离主机--->阻断通信--->清除病毒--->可疑用户--->启动项和服务--->文件与后门--->杀毒、重装系统、恢复数据 …

python代码加密方案

为何要对代码加密? python的解释特性是将py编译为独有的二进制编码pyc 文件,然后对pyc中的指令进行解释执行,但是pyc的反编译却非常简单,可直接反编译为源码,当需要将产品发布到外部环境的时候,源码的保护尤…

Guitar Pro是什么软件 Guitar Pro有什么用

相信玩吉他的朋友多多少少都听说过Guitar Pro这款软件,那大家知道Guitar Pro是什么软件?Guitar Pro有什么用呢?今天小编就和大家分享一下关于Guitar Pro这款吉他软件的相关内容。 一、Guitar Pro是什么软件 简单说Guitar Pro是一款吉他谱软…

Vue实现元素沿着坐标数组移动,超出窗口视图时页面跟随元素滚动

一、实现元素沿着坐标数组移动 现在想要实现船沿着下图中的每个河岸移动。 实现思路: 1、将所有河岸的位置以 [{x: 1, y: 2}, {x: 4, y: 4}, …] 的形式保存在数组中。 data() {return {coordinateArr: [{ x: 54, y: 16 }, { x: 15, y: 31 }, { x: 51, y: 69 }…

leetcode77. 组合(回溯算法-java)

组合 leetcode77. 组合题目描述解题思路代码演示 递归专题 leetcode77. 组合 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/combinations 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个…

量化交易:止盈策略与回测

我们买基金或股票的时候通常用最简单的策略进行决策:低买高卖,跌的多了就加仓拉低持有成本,达到收益率就卖出。 那么如何用代码表示这个策略呢?首先定义交易信号则是:0.5%时买入,目标止盈线是1.5%&#xf…

Java官方笔记12异常

Exception Definition: An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the programs instructions. the checked exception 比如,java.io.FileNotFoundException the error 比如,java.i…

Flink流批一体计算(2):Flink关键特性

目录 流式处理 丰富的状态管理 流处理 自定义时间流处理 有状态流处理 通过状态快照实现的容错 流式处理 在自然环境中,数据的产生原本就是流式的。无论是来自 Web 服务器的事件数据,证券交易所的交易数据,还是来自工厂车间机器上的…

优先级队列建立小根堆来解决前K个高频元素(TOP K问题)

目录 场景一:解决前K个高频元素需要解决如下几个问题: 优先级队列PriorityQueue 堆的定义 题目链接 场景二:亿万级数据取前TOP K / 后TOP K 数据 场景一:解决前K个高频元素需要解决如下几个问题: 1.记录每一个元…

【C++】4.工具:读取ini配置信息

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍读取ini配置信息。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&…

医院PACS系统的发展历史

PACS全称Picture Archivingand Communication Systems。它是应用在医院影像科室的系统,主要的任务就是把日常产生的各种医学影像(包括核磁,CT,超声,X光机,红外仪、显微仪等设备产生的图像)通过各…

【工程应用八】终极的基于形状匹配方案解决(小模型+预生成模型+无效边缘去除+多尺度+各项异性+最小组件尺寸)...

我估摸着这个应该是关于形状匹配或者模版匹配的最后一篇文章了,其实大概是2个多月前这些东西都已经弄完了,只是一直静不下来心整理文章,提醒一点,这篇文章后续可能会有多次修改(但不会重新发文章,而是在后台直接修改或…

【MySQL 日志管理、备份与恢复】

目录 一、数据库备份的分类1、从物理与逻辑的角度1.1、物理备份: 对数据库操作系统的物理文件(如数据文件,日志文件等)的备份1.2、逻辑备份 2、从数据库的备份策略角度3、常见的备份方法3.1、物理冷备3.2、专用备份工具mysqldump 或者 mysqlh…

【Windows系统】windows服务

概述 Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服…

C++算法:多源最短路径(Floyd)

文章目录 前言一、Floyd算法二、代码实现总结 前言 前文单源最短路径Dijkstra中我们讨论了如何解决有向无环图的最短路径问题,Dijkstra只能解决一个起始点的问题,如果要解决每个顶点到任一顶点的最短路径呢?一个方法就是再循环一次&#xff…

ASEMI代理光宝高速光耦LTV-60L规格,LTV-60L封装

编辑-Z LTV-60L参数描述: 型号:LTV-60L 封装:LSOP-6 储存温度TST:-55~125℃ 工作温度TA:-40~105℃ 隔离电压VISO:5000VRMS 电源电压VCC:7V 平均正向输入电流IF:20mA 输入功…

电脑滤镜软件哪个好 滤镜调色有什么技巧

无论是图片还是视频,滤镜的作用都很大,通过滤镜改变色彩,能让图片或视频增加故事性和美感。电脑滤镜软件哪个好, 电脑滤镜软件有很多,这里我们主要介绍几款视频滤镜软件。滤镜调色有什么技巧?有模板的,我们…

api-hook,更轻量的接口测试工具

目录 前言 现状 api-hook优势 研发介绍 最后 前言 api-hook是一种轻量级的接口测试工具,它基于Python语言编写,可以通过配置文件定义接口测试用例,支持HTTP和HTTPS协议,并提供了灵活的校验机制和数据处理方式。 在网站的开发过…

Tailwindcss 入门

Tailwindcss 是一个功能类优先的 CSS 框架,通过 flex, pt-4, text-center 和 rotate-90 这种原子类组合快速构建网站,而不需要离开你的 HTML。就是记住原子类,不要再自己想 CSS 命名一股脑子写 HTMl 就行了! 它与常规的 Bootstra…