架构思维:架构的演进之路
文章目录
- 引言
- 为什么架构思维如此重要
- 架构师的特点
- 软件架构的知识体系
- 如何提升架构思维
- 大型互联网系统架构的演进之路
- 一、大型互联网系统的特点
- 二、系统处理能力提升的两种途径
- 三、大型互联网系统架构演化过程
- 四、总结

引言
在软件开发行业中,有很多技术人可能会问:“我又不是架构师,学架构有什么用?”实际上,架构并非只有架构师才需要理解,它无处不在,对每一位技术人来说,架构思维都是一种值得培养的思维方式。架构不仅仅是关于系统和代码的设计,它更是一种整体与部分之间关系的把控,是对关键细节的规划与设计。掌握架构思维,能从更高层次去思考问题,做出更加明智的决策。
为什么架构思维如此重要
很多人在人生和职业发展的道路上,尽管起点相差无几,但有些人却越走越远,而有些人则逐渐停滞不前。原因有很多,但其中一个重要原因就是前者更加清楚自己未来的目标,并通过架构设计,规划自己的学习和职业路径。
例如,工作中,你主动承担挑战性任务,还是按部就班执行上级安排?这些关键的细节往往决定了你未来的职业生涯。而这些选择背后的思考,正是架构思维的体现。架构思维帮助你更好地规划和设计人生中的各个环节,将每一个决定和细节有机地联系起来。
架构师的特点
-
强烈的好奇心
优秀的架构师不仅对技术本身充满好奇,还对周围的世界充满兴趣。他们的好奇心让他们能够敏锐地发现潜在的创新技术和方法。 -
敏锐的业务嗅觉
架构师不仅是技术专家,还是业务的推动者。能够根据业务需求设计解决方案,关注如何通过技术创造实际的业务价值。 -
扎实的技术基础
基本功非常重要,架构师需要深入理解操作系统、数据结构、数据库原理、编程语言等基础知识。扎实的基础知识为架构设计提供了强大的支撑。 -
出色的编程能力
尽管架构设计并不需要天天编程,但架构师必须具备优秀的编程能力,才能在面对复杂问题时保持敏锐的技术嗅觉,并设计出最优的架构。 -
对主流技术产品和模式的深刻领悟
优秀的架构师并不是凭空设计架构,而是建立在已有的优秀架构基础上,结合自身业务特点进行创新和改进。这要求架构师能够深入理解主流技术和产品的设计原理,善于从中提取精华,进行优化。
软件架构的知识体系
学习架构并非一蹴而就,它涉及多个方面的知识体系,主要可以分为以下三部分:
-
基础知识
学习架构的第一步是打牢基础。作为架构师,必须掌握数据结构、操作系统、算法、设计模式等基本技术。这些基础知识为架构设计提供了坚实的基础,是编程能力的核心。 -
技术选型与深刻理解
架构师不仅要知道如何使用技术,还要了解它们的优缺点和应用场景。对于大型互联网系统,主要包括缓存、异步处理、分布式存储、微服务等技术,这些都需要架构师有深入的理解。 -
架构设计
在进行架构设计时,架构师需要考虑如何构建高可用、高性能、安全性强的系统。架构设计不仅仅是技术的选择,更是如何将这些技术有机地结合,打造一个能支持业务增长的系统。
如何提升架构思维
虽然基础技术的积累需要长时间的打磨,但架构思维和技术能力却可以在相对短的时间内提升。
- 学会架构的思维方式,理解如何通过架构设计提升工作效率;
- 深入理解架构设计的关键技术,如高可用、高性能和安全性;
- 从实践案例中学习如何解决架构设计中的常见问题。
大型互联网系统架构的演进之路
分布式架构 - 分布式架构设计的特征与问题
随着互联网技术的不断发展,互联网系统的规模和复杂度也在不断攀升。从最初的单机系统到如今的分布式架构,大型互联网系统经历了漫长的演化过程。
一、大型互联网系统的特点
大型互联网系统有一些显著的特点,这些特点也正是现代技术和架构方案产生的根本原因。下面列举了这些关键特性:
-
高并发与大流量
在大型互联网系统中,需要应对数百万甚至数千万的并发用户请求。例如,在“双11”购物节期间,天猫系统会面临上千万独立用户的访问压力,系统需要具备极强的并发处理能力,以保证不会因为流量激增而崩溃。 -
高可用性
不同于传统软件系统,大型互联网系统需要 7×24 小时不间断地服务用户。为了确保系统的高可用性,必须在架构设计上特别考虑冗余和故障恢复机制。 -
海量数据存储
随着用户数量的增加,互联网系统会产生大量的数据,包括用户行为数据、第三方数据以及爬虫数据。如何高效地存储和管理这些海量数据,成为一个亟待解决的问题。 -
广泛的用户分布与复杂的网络环境
互联网服务面向全球用户,用户分布范围广,网络环境复杂。为了保证所有用户的体验,系统需要对不同地区的网络状况进行适配和优化。 -
安全性要求
互联网系统由于其开放性,经常会受到攻击。系统的架构必须要具备防护能力,以抵御各种网络攻击。 -
快速的需求变化与频繁的发布
相较于传统的软件产品,互联网产品的更新迭代速度非常快。许多互联网产品每周甚至每天都会发布新版本,以快速响应市场变化和用户需求。
二、系统处理能力提升的两种途径
为了应对互联网系统面临的挑战,系统的处理能力必须不断提升。常见的两种提升方式是垂直伸缩和水平伸缩。
-
垂直伸缩
垂直伸缩是通过提升单台服务器的性能来提高系统的处理能力。例如,增加更快的CPU、更多的内存、更大的硬盘等。虽然这种方式可以提升单机的处理能力,但当达到一定瓶颈时,垂直伸缩将变得不再有效,且成本非常高。 -
水平伸缩
相比垂直伸缩,水平伸缩通过增加更多的服务器组成集群来扩展系统的处理能力。这种方法不依赖于单台机器的性能,而是通过增加更多的节点,使得系统能够处理更高并发的请求。水平伸缩具有较高的灵活性和扩展性,是互联网架构中广泛采用的解决方案。
三、大型互联网系统架构演化过程
随着互联网用户量和数据量的不断增长,架构的演进也经历了多个阶段。从最初的单机系统,到如今的微服务和分布式架构,互联网架构逐步发展以满足不断增加的业务需求和技术挑战。
- 单机系统
在互联网早期,系统通常部署在单一的服务器上,能够满足少量用户的使用需求。

当用户逐渐增多,单机系统的性能无法满足需求时,开始引入数据库与应用分离,通过将数据库部署在独立的服务器上来提高性能。

- 分布式缓存与数据库集群
随着用户量的增加,传统的单机数据库无法应对大量的并发读写请求,系统开始引入分布式缓存(如Redis)和数据库集群,将数据库的负载分散到多个服务器上。此时,系统可以支撑数十万级别的用户访问。

- 反向代理与CDN加速
为了进一步提升访问速度并减少服务器压力,系统引入了反向代理和**内容分发网络(CDN)**加速技术。CDN通过将内容缓存到离用户最近的节点,减少了数据中心的负担,提高了响应速度和并发处理能力。

- 分布式文件系统与数据库分片
面对海量数据的存储需求,传统的数据库和文件系统无法应对。此时,互联网系统引入了分布式文件系统(如HDFS)和数据库分片技术,将数据分布在多个物理节点上,以提升存储容量和处理性能。

- 消息队列与微服务架构
随着系统的复杂性增加,互联网系统引入了分布式消息队列(如Kafka)来解耦应用程序之间的依赖。通过使用微服务架构,将系统划分为多个独立的服务模块,每个模块负责独立的业务功能,避免了传统单体架构中各个模块间的高耦合问题,提高了系统的灵活性和扩展性。

- 搜索引擎与NoSQL数据库
当系统面临更高的查询需求时,传统的关系型数据库无法高效地支持复杂的查询操作。此时,系统引入了搜索引擎(如Elasticsearch)和NoSQL数据库(如MongoDB),它们能够更好地处理海量非结构化数据和高并发查询请求。
四、总结
大型互联网系统面临的挑战主要体现在高并发、大流量、海量数据存储、安全性要求和频繁发布等方面。为了解决这些问题,系统架构的演进从最初的单机系统到如今的分布式系统,经历了多个阶段。垂直伸缩和水平伸缩是提升系统处理能力的两种主要途径,其中水平伸缩被广泛应用于互联网行业。
在架构演进过程中,重要的技术手段包括分布式缓存、负载均衡、分布式存储、微服务架构、消息队列、搜索引擎和NoSQL数据库等。这些技术不仅帮助互联网系统处理日益增长的用户请求和数据存储需求,还提高了系统的可扩展性、灵活性和容错能力。
在应对挑战的过程中,互联网架构主要的应对方法,就是从单机系统到分布式系统。即通过服务器拆分的方式,系统架构从单机系统一个服务器变成很多个服务器。这是整个发展思路以及发展过程。
其中最主要的发展阶段包括:
-
使用分布式的缓存,提高系统的访问特性,减少数据存储的压力;
-
使用负载均衡,提供更多的应用服务器提高系统计算处理能力;
-
使用分布式存储,提供更多的服务器,分摊数据的读写压力;
-
使用微服务与异步架构,使系统变得更加低耦合,使应用业务变得更加可复用,提升业务处理能力,从而支撑起一个大型网站系统架构。
随着用户量和业务复杂度的增加,互联网架构将继续向着更加高效、可靠和可扩展的方向发展,架构师们需要时刻关注这些变化,并不断优化系统架构以应对未来的挑战。

相关文章:
架构思维:架构的演进之路
文章目录 引言为什么架构思维如此重要架构师的特点软件架构的知识体系如何提升架构思维大型互联网系统架构的演进之路一、大型互联网系统的特点二、系统处理能力提升的两种途径三、大型互联网系统架构演化过程四、总结 引言 在软件开发行业中,有很多技术人可能会问…...
VC++零基础入门之系列教程 【附录E MFC快速参考指南】
附录E MFC快速参考指南 E.1 创建窗口 使用M F C CWnd wnd; W n d . C r e a t e E x ( E xSt y l e , C l a s s N a m e , Wi n d o w N a m e , S t y l e , x , y, Wi d t h , H e i g h t , P a r e n t , M e n u , P a r a m ) ; 使用A P I HWND hwnd=::CreateWi n d …...
vue3:vue3项目安装并引入Element-plus
一、安装Element-plus 1、安装语句位置 安装 | Element Plushttps://element-plus.org/zh-CN/guide/installation.html根据所需进行安装,这里使用npm包 2、找到项目位置 找到项目位置,在路径上输入cmd回车打开“运行”窗口 输入安装语句回车完成安装 …...
一文掌握python中正则表达式的各种使用
文章目录 1. 正则表达式基础1.1 常用元字符1.2 基本用法 2. 正则表达式高级功能2.1 分组捕获2.2 命名分组2.3 非贪婪匹配2.4 零宽断言2.5 编译正则表达式2.6 转义字符 3. 常见应用场景3.1 验证邮箱格式3.2 提取 URL3.3 提取日期3.4 提取HTML中的链接3.5 提取HTML中的图片链接3.…...
java.2.25
1. 注释 注释是对代码的解释和说明文字。 Java中的注释分为三种: 单行注释: // 这是单行注释文字多行注释: /* 这是多行注释文字 这是多行注释文字 这是多行注释文字 */ 注意:多行注释不能嵌套使用。文档注释:…...
45.matlab产生正弦叠加信号
,...
VScode 开发
目录 安装 VS Code 创建一个 Python 代码文件 安装 VS Code VSCode(全称:Visual Studio Code)是一款由微软开发且跨平台的免费源代码编辑器,VSCode 开发环境非常简单易用。 VSCode 安装也很简单,打开官网 Visual S…...
在llm和agent的背景下,有什么比较好的研究方向或者能解决现在的实际的社会问题
在llm和agent的背景下,有什么比较好的研究方向或者能解决现在的实际的社会问题 在LLM(大语言模型)与Agent(智能体)的融合背景下,研究方向和社会应用正呈现出多元化趋势。 一、技术研究方向 多模态智能体(Multi-modal Agents) 方向:将LLM与视觉、语音、触觉等多模态数…...
A Large Recurrent Action Model: xLSTM Enables Fast Inference for Robotics Tasks
奥地利林茨约翰开普勒大学机器学习研究所 ELLIS 小组,LIT 人工智能实验室奥地利林茨 NXAI 有限公司谷歌 DeepMind米拉 - 魁北克人工智能研究所 摘要 近年来,强化学习(Reinforcement Learning, RL)领域出现了一种趋势,…...
CSS按钮点击效果实战:scale(0.95) 与10个交互动画优化指南
[TOC](CSS按钮点击效果实战:scale(0.95) 与10个交互动画优化指南) 导语 在现代 Web 开发中,细腻的交互效果是提升用户体验的关键。通过简单的 CSS 动画(如 transform: scale(0.95)),无需 JavaScript 即可实现高效、流…...
计算机毕业设计SpringBoot+Vue.js学科竞赛管理系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
在Spring Boot+Vue前后端分离的项目中使用JWT实现基本的权限校验
说明 在 Spring Boot + Vue 前后端分离的项目中,如果不使用第三方服务(如 Spring Security、Shiro 等),可以通过自定义实现基本的权限校验。 使用JWT实现步骤 以下是实现步骤: 1. 设计权限模型 通常权限模型包括: 用户(User):系统的使用者。角色(Role):用户的权…...
Deep Seek-编码器
1. DeepSeek Coder 简介 DeepSeek Coder 由一系列代码语言模型组成,每个模型都在 2T 令牌上从头开始训练,其中 87% 的代码和 13% 的自然语言在中英文中组成。我们提供各种大小的代码模型,从 1B 到 33B 版本。每个模型都通过采用 16K 的窗口大小和额外的填空任务在项目级代码…...
在 MySQL 的 InnoDB 存储引擎中,部分数据库优化策略
在 MySQL 的 InnoDB 存储引擎中,以下操作是 同步的,并且会直接影响数据库执行 SQL 的效率: 1. Redo Log 的同步刷盘(事务提交时) 触发条件: 当 innodb_flush_log_at_trx_commit1 时,事务提交时强…...
一文掌握DrissionPage的详细使用
文章目录 1. 什么是DrissionPage?2. 安装 DrissionPage3. 基本使用3.1 初始化浏览器3.2 打开网页3.3 查找元素3.4 操作元素3.5 获取元素属性3.6 执行 JavaScript3.7 页面对象(Page Object)3.8 元素定位方式3.9 常用操作方法3.10 断言 4. 高级…...
Android平台轻量级RTSP服务模块技术对接说明
一、技术背景 随着内网无纸化办公、电子教室等应用场景对超低延迟音视频传输需求的日益增长,为避免用户或开发者单独部署 RTSP 或 RTMP 服务,大牛直播 SDK 推出了轻量级 RTSP 服务 SDK。该 SDK 能够将本地音视频数据(如摄像头、麦克风等&…...
代码随想录第二十天|二叉树part08--669.修建二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
刷题小记: 上期学习了二叉搜索树的插入和删除操作,这次学习如何按区间修剪二叉搜索树。还有两题,关于借助二叉搜索树的有序特性进行转换。 669.修剪二叉搜索树(669.修剪二叉搜索树) 题目分析: 给定一个…...
RoCEv2 高性能传输协议与 Lossless 无损网络
目录 文章目录 目录RoCERoCEv2 v.s. IBRoCEv2 协议栈RoCEv2 需要 Lossless NetworkLossless Network 拥塞控制技术网络拥塞的原因PFC 基于优先级的流量控制PFC Unfairness (带宽分配不公平)的问题PFC HOL(队头拥塞)的问题PFC Dead…...
C语言多人聊天室 ---chat(客户端聊天)
head.h #ifndef __HEAD_H #define __HEAD_H// 常用头文件 #include <stdio.h> #include <stdlib.h> #include <string.h>// 网络编程涉及的头文件 #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h>#include <…...
联想 SR590 服务器 530-8i RAID 控制器更换损坏的硬盘
坏了的硬盘会自动亮黄灯。用一个空的新盘来替换,新盘最好不要有东西。但是有东西可能也没啥,因为我看 RAID 控制器里有格式化的选项 1. 从 IPMI 把服务器关机,电源键进入绿色闪烁状态 2. 断电,推开塑料滑块拉出支架,…...
城电科技|会追日的智能花,光伏太阳花开启绿色能源新篇章
当艺术与科技相遇,会碰撞出怎样的火花?城电科技推出的光伏太阳花,以其独特的设计与智能化的功能,给出了答案。这款产品不仅具备太阳能发电的实用功能,更是一件充满科技属性的艺术性光伏产品,吸引了广泛关注…...
基于YOLO11深度学习的苹果叶片病害检测识别系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
FFmpeg 命令行全解析:高效音视频处理从入门到精通
FFmpeg FFmpeg 是一款开源的多媒体处理工具集,支持音视频编解码、格式转换、流媒体处理等全链路操作。核心功能与工具: 多媒体全链路支持 支持 1000+ 音视频编解码格式(如 H.264、HEVC、AV1)和协议(RTMP、RTSP、HLS),覆盖录制、转码、流化等全流程。提供三大核心工具: …...
kafka数据拉取和发送
文章目录 一、原生 KafkaConsumer1、pom文件引入kafka2、拉取数据3、发送数据二、在spring boot中使用@KafkaListener1、添加依赖2、application.yml3、消息拉取:consumer4、自定义ListenerContainerFactory5、消息发送:producer6、kafka通过clientId鉴权时的鉴权失败问题一、…...
多智能体框架
多个不同的角色的Agent,共同完成一份复杂的工作。由一个统筹管理的智能体,自主规划多个智能体分别做什么,以及执行的顺序。 agent 应该包含的属性 执行特定任务 根据其角色和目标做出决策 能够使用工具来实现目标 与其他代理沟通和协作 保留…...
C++ 正则表达式分组捕获入门指南
在 C 中,正则表达式(regex)是一种用于匹配字符串模式的强大工具。正则表达式不仅能帮助你查找符合特定模式的字符,还能捕获匹配的子字符串(即分组捕获)。这篇文章将介绍 C 正则表达式中的分组捕获机制&…...
C#中级教程(1)——解锁 C# 编程的调试与错误处理秘籍
一、认识错误:编程路上的 “绊脚石” 在 C# 编程中,错误大致可分为两类:语法错误和语义错误(逻辑错误)。语法错误就像是写作文时的错别字和病句,编译器一眼就能识别出来,比如变量名拼写错误、符…...
Jmeter接口并发测试
Apache JMeter 是一款开源的性能测试工具,广泛用于接口并发测试、负载测试和压力测试。以下是使用 JMeter 进行接口并发测试的详细步骤: 一、准备工作 安装 JMeter 下载地址:Apache JMeter 官网 确保已安装 Java 环境(JMeter 依…...
MySQL-增删改查
一、Create(创建) 📖 语法: INSERT INTO table_name(value_list); 当我们使用表的时候,就可以使用这个语法来向表中插入元素~ 我们这边创建一个用于示范的表(Student)~ create table student( id int, name varchar(20), chinese int, math…...
开源堡垒机 JumpServer 社区版实战教程:发布机的配置与Website资产配置使用
文章目录 开源堡垒机 JumpServer 社区版实战教程:发布机的配置与Website资产配置使用一、功能简述二、应用发布机2.1 版本要求2.2 创建应用发布机2.2.1 通过WinRM的协议进行应用发布机的创建2.2.2 通过OpenSSH的协议进行应用发布机的创建2.2.2.1 下载OpenSSH2.2.2.2…...
