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

互联网系统的微观与宏观架构

互联网系统的架构设计,通常会根据项目的体量、业务场景以及技术需求被划分为微观架构(Micro-Architecture)和宏观架构(Macro-Architecture)。这两者的概念与职责既独立又相互关联。本文将通过一些系统案例,结合架构原则和复杂度的度量手段,探讨微观架构与宏观架构的区别、联系,以及对架构师的专业要求。

d73c7621e33d4f50b5bdf1a2feea09f6.png

一、微观架构与宏观架构的定义

  1. 微观架构:微观架构更关注系统内部模块的设计细节,通常涵盖组件的交互、接口定义、数据流向、数据库模式设计、服务的业务逻辑层次划分等。其设计目的是保证代码的可维护性、模块的可扩展性以及开发团队的高效协作。
  2. 宏观架构:宏观架构则聚焦系统整体的高层次设计,如系统模块划分、分布式系统的通信方式、服务间的依赖关系、容灾设计、负载均衡、分布式存储等。其目标是确保系统具备高可用性、扩展性和性能。

二、典型案例分析

  1. 微服务架构案例(微观架构与宏观架构结合)
    微服务架构是互联网系统中较为典型的设计,它通过将业务功能拆分成独立服务,每个服务都有自己的数据库与业务逻辑,最终通过 API 网关进行调用。这种架构需要在微观层面实现服务的解耦、服务间的接口设计、数据一致性等;而在宏观层面,微服务的划分、网络通信协议、服务注册与发现、容灾机制、监控等均属于关键设计。
    • 微观架构:微服务的具体实现,如数据库表设计、各个服务之间的接口定义、服务内部的业务逻辑。
    • 宏观架构:服务划分策略、API 网关的使用、服务发现、网络协议和负载均衡策略。
  1. 电商系统架构案例(宏观复杂度高)
    电商系统由于要处理大量并发请求,通常需要在宏观架构上重点考虑高可用、水平扩展和性能优化。具体来说,宏观架构的设计包括全站缓存方案(如 Redis)、分布式数据库拆分(如主从数据库设计)、支付系统的分布式事务处理以及订单流转的幂等设计。
    • 微观架构:每个子系统如购物车、订单系统、支付系统的内部逻辑和模块划分。
    • 宏观架构:电商系统如何分层,数据如何在前后端传递,如何确保交易系统的高可用性。
  1. 搜索引擎系统(微观架构复杂度高)
    搜索引擎系统的微观架构更为复杂,因为它需要对索引、分词、倒排索引、排序算法等进行精细的设计。而宏观架构层面则涉及如何构建集群、如何分布式存储海量数据、查询负载的均衡策略等。
    • 微观架构:分词器、索引构建算法、文档排序策略、数据存储格式。
    • 宏观架构:索引数据的分布式存储,查询请求的路由和负载均衡。

三、架构原则

无论是微观架构还是宏观架构,都需要遵循一些通用的设计原则,确保系统的健壮性、可扩展性和高可用性。

  1. 单一职责原则(SRP):每个模块或服务应该只专注于一个功能。这一原则对于微观架构尤为重要,能保证模块的高内聚、低耦合,使系统易于维护。
  2. 开闭原则(OCP):系统应该对扩展开放,对修改关闭。系统设计应允许通过扩展现有功能而不破坏原有代码。尤其在宏观架构中,这一原则可以确保业务扩展时不影响已有服务。
  3. 高内聚低耦合:高内聚意味着模块内部的相关性强,低耦合意味着模块之间的依赖关系弱。这一原则是设计微服务架构的核心,能够极大提升代码的可复用性与测试性。
  4. 高可用性设计:宏观架构的设计通常需要优先考虑系统的可用性。通过冗余设计、多活数据中心、异地容灾等手段确保在部分组件失效的情况下,系统仍然可以持续提供服务。
  5. 水平扩展性:系统应能通过增加节点或服务器进行横向扩展,而不必对原有系统做过多的调整。在微观架构中,模块化设计能使得代码易于扩展;在宏观架构中,支持水平扩展的设计可减少单点瓶颈。
  6. 最终一致性:对于分布式系统而言,数据一致性往往难以实时保证,因此需要采用最终一致性策略。微服务架构中经常通过事件驱动、消息队列等方式实现系统的最终一致性。

四、复杂度的度量手段

系统复杂度可以从多个维度进行度量,帮助架构师更好地理解和应对系统的复杂性。

  1. 模块化复杂度
    • 可以通过模块的数量、模块间的依赖关系来衡量微观架构的复杂度。使用依赖图、类图等工具,可以清晰地展示模块间的关系,从而评估模块的内聚性和耦合度。
  1. 性能复杂度
    • 评估系统在高并发下的表现。通常通过负载测试和性能测试工具(如 JMeter、Gatling)来测量系统的响应时间、吞吐量和并发处理能力。对于宏观架构,架构师需要能够预测和衡量系统在高并发场景下的瓶颈和拓展点。
  1. 可维护性复杂度
    • 微观架构中的代码复杂度通常可以通过代码审查工具(如 SonarQube)进行分析,从而评估代码的可读性、可维护性、单元测试覆盖率等指标。
  1. 拓展性复杂度
    • 在宏观架构中,复杂度可以通过系统的水平扩展能力、服务拆分的灵活性来度量。设计一个易于扩展的架构,可以通过负载均衡、微服务架构、分布式系统等方案实现。

五、对架构师的要求

互联网系统架构的设计对架构师的能力有着极高的要求,尤其是在面对大型分布式系统时,架构师不仅要掌握微观和宏观层面的架构知识,还需具备极强的全局视野与技术实践能力。

  1. 全栈技术能力:架构师需掌握前后端技术栈、数据库优化、网络通信等技术,能够对各层的性能瓶颈、系统故障做出及时准确的判断。
  2. 架构思维与抽象能力:优秀的架构师能够通过抽象和模块化,将复杂的业务逻辑拆解成独立的子系统,降低系统的复杂性,使之具有高扩展性和可维护性。
  3. 分布式系统设计经验:在宏观架构设计中,架构师需要掌握分布式系统设计的各类工具与方法,如分布式一致性、CAP 理论、负载均衡和高可用性设计等。
  4. 快速迭代与敏捷开发:互联网产品通常需要快速迭代,因此架构师需要设计支持快速开发和上线的架构,确保系统能在业务快速变化时灵活响应。
  5. 业务理解能力:架构设计不仅仅是技术层面的工作,架构师还需要深入理解业务,预判业务的发展方向,从而做出前瞻性的设计。

结语

互联网系统的架构设计无论是微观架构还是宏观架构,都是在平衡系统复杂性与业务需求的基础上进行的。架构师需要在设计时把握好系统的规模和复杂度,并通过适当的设计原则、复杂度的度量工具,保障系统的高效性、扩展性和可维护性。

 

相关文章:

互联网系统的微观与宏观架构

互联网系统的架构设计,通常会根据项目的体量、业务场景以及技术需求被划分为微观架构(Micro-Architecture)和宏观架构(Macro-Architecture)。这两者的概念与职责既独立又相互关联。本文将通过一些系统案例,…...

数据库、数据仓库、数据湖和数据中台有什么区别

很多企业在面对数据存储和管理时不知道如何选择合适的方式,数据库、数据仓库、数据湖和数据中台,这些方式都是什么?有什么样的区别?企业根据其业务类型该选择哪一种?本文就针对这些问题,来探讨下这些方式都…...

vscode配色主题与图标库推荐

vscode配色主题推荐:Andromedavsocde图标库: vscode-icons Andromeda Dark theme with a taste of the universe 仙女座:一套宇宙深空体验的哑暗色主题; 高对比度,色彩饱和; Easy Installation Open the extensions sidebar on Visual Studio CodeSear…...

深度学习模型入门教程:从基础到应用

深度学习模型入门教程:从基础到应用 前言 在人工智能的浪潮中,深度学习作为一种强大的技术,正在各行各业中发挥着越来越重要的作用。从图像识别到自然语言处理,深度学习正在改变我们的生活和工作方式。本文将带您深入了解深度学…...

数据结构 软考

算法具有5个特性 可行性,有限性,确定性,输入, 输出 图: 有向图 Kruskal(克鲁斯卡尔)算法 和 prim(普鲁姆)算法 都是贪心算法 是一种用来在加权连通图中寻找最小生成树的算法,其操作对象是边. 找最小的不形成环 1.哈夫曼树(也叫最优树)…...

colcon构建ros2功能包时,出现exited with code 2报错的解决方案(bug)

背景: 在学习ros2时,跟着别人的示例进行构建,手敲的代码难免有一些语法错误。 问题: 在colcon构建时,并不会直接输出语法报错。而是出现exited with code 2错误,并提示未能生成功能包,就算加入…...

【大模型LLM面试合集】大语言模型架构_位置编码

位置编码 1.位置编码 不同于RNN、CNN等模型,对于Transformer模型来说,位置编码的加入是必不可少的,因为纯粹的Attention模块是无法捕捉输入顺序的,即无法区分不同位置的Token。为此我们大体有两个选择: 想办法将位置…...

FLINK 分流

在Apache Flink中,分流(Stream Splitting)是指将一条数据流拆分成完全独立的两条或多条流的过程。这通常基于一定的筛选条件,将符合条件的数据拣选出来并放入对应的流中。以下是关于Flink分流的详细解释: 一、分流方式…...

从零开始:构建一个高效的开源管理系统——使用 React 和 Ruoyi-Vue-Plus 的实战指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

windows下pycharm社区版2024下载与安装(包含新建第一个工程)

windows下pycharm社区版2024下载与安装 下载pycharm pycharm官网 安装pycharm 1.进入官网 pycharm官网 下载 点击Download–>右侧Other versions 下载对应的社区版(如下图):下载网址 2.点击运行下载好的安装包 点击下一步 3.更改pychar…...

重构案例:将纯HTML/JS项目迁移到Webpack

我们已经了解了许多关于 Webpack 的知识,但要完全熟练掌握它并非易事。一个很好的学习方法是通过实际项目练习。当我们对 Webpack 的配置有了足够的理解后,就可以尝试重构一些项目。本次我选择了一个纯HTML/JS的PC项目进行重构,项目位于 GitH…...

表格编辑demo

<el-form :model"form" :rules"status ? rules : {}" ref"form" class"form-container" :inline"true"><el-table :data"tableData"><el-table-column label"计算公式"><templat…...

企业自建邮件系统选U-Mail ,功能强大、安全稳定

在现代企业运营中&#xff0c;电子邮件扮演着至关重要的角色&#xff0c;随着企业规模的增长和业务的多样化&#xff0c;传统的租用第三方企业邮箱服务逐渐显现出其局限性。例如&#xff0c;存储空间受限、数据安全风险、缺乏灵活的管理和备份功能&#xff0c;以及无法与其他企…...

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析&#xff1a; 这道题提到了对于“区间”进行操作&#xff0c;而差分数列就是对于区间进行操作的好方法。 观察差分数列&#xff1a; 给定数列&#xff1a;1 3 5 2 7 1 差分数列&#xff1a;1 2 2 -3 5 6 题目要求把原数组全部…...

浪潮云启操作系统(InLinux)bcache缓存实践:理解OpenStack环境下虚拟机卷、Ceph OSD、bcache设备之间的映射关系

前言 在OpenStack平台上&#xff0c;采用bcache加速ceph分布式存储的方案被广泛用于企业和云环境。一方面&#xff0c;Ceph作为分布式存储系统&#xff0c;与虚拟机存储卷紧密结合&#xff0c;可以提供高可用和高性能的存储服务。另一方面&#xff0c;bcache作为混合存储方案&…...

通过ssh端口反向通道建立并实现linux系统的xrdp以及web访问

Content 1 问题描述2 原因分析3 解决办法3.1 安装x11以及gnome桌面环境查看是否安装x11否则使用下面指令安装x11组件查看是否安装gnome否则使用下面指令安装gnome桌面环境 3.2 安装xrdp使用下面指令安装xrdp&#xff08;如果安装了则跳过&#xff09;启动xrdp服务 3.3 远程服务…...

# 渗透测试#安全见闻8 量子物理面临的安全挑战

# 渗透测试#安全见闻8 量子物理面临的安全挑战 ##B站陇羽Sec## 量子计算原理与技术 量子计算是一种基于量子力学原理的计算方式&#xff0c;它利用量子位&#xff08;qubits&#xff09;来进行信息处理和计算…...

【rabbitmq】实现问答消息消费示例

目录 1. 说明2. 截图2.1 接口调用截图2.2 项目结构截图 3. 代码示例 1. 说明 1.实现的是一个简单的sse接口&#xff0c;单向的长连接&#xff0c;后端可以向前端不断输出数据。2.通过调用sse接口&#xff0c;触发rabbitmq向队列塞消息&#xff0c;向前端返回一个sseEmitter对象…...

单片机_RTOS__架构概念

经典单片机程序 void main() {while(1){函数1&#xff08;&#xff09;&#xff1b;函数2&#xff08;&#xff09;&#xff1b;}} 有无RTOS区别 裸机 RTOS RTOS程序 喂饭&#xff08;&#xff09; {while&#xff08;1&#xff09;{喂一口饭&#xff08;&#xff09;;} } …...

ClickHouse在百度MEG数据中台的落地和优化

导读 百度MEG上一代大数据产品存在平台分散、质量不均和易用性差等问题&#xff0c;导致开发效率低下、学习成本高&#xff0c;业务需求响应迟缓。为了解决这些问题&#xff0c;百度MEG内部开发了图灵3.0生态系统&#xff0c;包括Turing Data Engine(TDE)计算引擎、Turing Dat…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...