微服务架构:从单机到分布式的革命性升级

作者:chengooooooo日期:10/2/2025

本文为学习文章 只用于个人学习用途 可能会有ai生成 与 摘抄自己总结的部分内容

同时也是个人在面试过程中被经常提起的内容 以springcloud为例 展开本文具体内容

先提出问题 传统单机情况下 本地服务的缺陷是什么? 为什么要用微服务的概念 微服务和原来单机部署情况下有什么不同 要实现微服务 在哪微 怎么体现微 ?

单机服务的缺陷

单机模式下 最直观的问题往往是 可用性 如果流量过大导致系统的所有cpu资源全部被占满 某个中间件 / 某个核心接口被流量冲垮了崩溃了 会出现单点故障(某节点出现问题导致整个系统不可用)并且没有固定的故障恢复的机制 大概率需要人工反复调试 相当复杂 有没有自动路由/自动注册服务的一体化集成?

包括其扩展性也很差 只能不断加cpu / 内存来上硬件 但是成本太高 而且也不能根据每个模块的特定业务需求的实际负载(实际处理请求的能力)不能进行独立的扩展和提高 只能做整条链路上的负载均衡 而且没有限流与熔断相关的熔断/兜底的机制 有没有这种特殊的算法 / 实现范例?

还有就是因为所有人都用一个系统 开发过程中难免遇到个人习惯因素导致的系统强耦合的情况 也就是修改一个地方可能影响全局不可用 这是非常不能接受的 而且任何小改动可能最后需要重新部署整个项目 非常麻烦

包括在技术栈的选型上 所有人都只能公用一套语言和框架 可能会造成系统的滞后性!

所以 微服务为了解决 服务不可用 服务扩展与负载控制 服务降耦合 服务技术开放性 几个方面进行延伸

微服务是什么

相比于之前单机服务在 部署难度 开发难度 不可用保障 每个模块的强耦合上

个人理解微服务将模块进行分区隔离 降低模块间的耦合 也就是把单机拆分成多个微型服务 来协同完成业务(分布式系统实现方式之一) 可以说 微服务就是分布式系统的重要实现方式之一 他们都涉及到多个独立组件通过网络通信协作

区别上来看 微服务更强调服务细粒度 独立性 业务边界性 而分布式是比较广泛的概念 可以是多节点的系统协同完成业务操作 比如数据库的主从 redis 的集群 哨兵分片等等

对应问题的解决方案:

在部署上 微服务可以独立部署 并且以水平扩展的方式来增加模块

技术选型上更为自由和多样 并且实现了分布式架构

每个服务运行在自己的进程里 通过http/restful 这种轻量级机制进行通信

独立的数据存储 既然要避免强耦合 在中间件的选型和实现上也要解耦 数据库需要对于每个服务单独存储

同时 微服务(springcloud)本身也提供很多优秀的组件供业内使用 传统服务在nginx转发路由后直接进入API网关来判断请求url里的服务类型 微服务就是在这里进行优化和爆改 做了更精细 更可靠 与高度扩展的各项功能

微服务各部分组件

服务熔断:为了防止服务因为调用失败超过阈值时 一直重试阻塞流程导致后续服务雪崩 所以微服务采用熔断器来防止请求重复重试,在超过重试次数后打开熔断器 停止再次调用服务

限流:用来控制服务请求速率的技术 防止某个服务因为请求过多而崩溃 在分布式系统里限流可以应用在api网关 服务调用等等 比如sentinel

服务注册和发现;传统情况下 单体服务可能会手动指定服务对应url 前端才能访问后端对应代码 微服务允许服务动态注册自己并且发现其他服务 在分布式相同里 服务注册和发现可应用在多服务之间的通信 比如 eureka 来实现服务注册和发现

配置中心: 用来集中管理微服务工具的配置的工具 允许开发者在运行时动态修改配置 不用重新启动服务 在分布式系统里 配置中心可以用在各个服务的配置管理 比如spring cloud config来实现

API网关: API网关 相对于单机的nginx来说 他是微服务的一个入口点 负责处理客户端请求 并且把请求路由到对应微服务 分布式系统里API网关可以应用在客户端和微服务之间的通信 比如gateway来实现路由转发

分布式追踪: 为了便于定位日志中的出错问题 可以用监控工具来实现定位 比如 skywalking 可以追踪各服务之间的调用日志

消息队列: 最常见的用法就是用来解耦系统组件来实现异步通信 在服务间可以通过消息队列实现异步通信 即使某服务不可用也不会影响整个系统的正常运行 或者在流量过大的情况下 消息队列可以起到削峰填谷 流量削减的作用 把瞬时高并发转化为异步处理的场景 避免系统因为短时间请求量过大导致系统崩溃 同时可以把微服务的日志发送到消息队列里 然后用日志的消费服务系统再统一收集 存储和分析 这样也能减轻每个服务的压力 也便于排查日志和问题

**分布式事务:**微服务也可以被看做多个节点之间相互协作而产生的结果 除了基本的服务间调用所用到的通信协议 同时也需要保证数据一致性 为了保证全流程操作一致性 市面上有许多分布式事务 比如 2pc 3pc saga tcc等等 以及利用消息队列可靠性传输来确保事务参与和主事务状态保持一致 2pc指 协调者 tc询问各个参与者是否可执行事务提交 如果所有参与者都同意 那么tc再给所有参与者发送正式提交请求 虽然保证强一致性但是会有同步阻塞的问题 性能很低

3pc 是对2pc的改进 也就是增加了pre提交阶段 减少参与者的阻塞范围

Sagas 在seata组件里的saga模式 使用状态机实现 一种是原始的基于监听事件驱动的实现(步骤比较少的情况 还有可能产生环形监听 两个业务互相监听对方产生的事件) 还有一种是基于命令的实现(定义协调者(协调中心)管理事务)中间会涉及到状态机的编排 并且协调中心独立(需要维护)

tcc 手动锁定资源 预操作资源try 再验证实现 confirm 失败后撤销操作 cancel

实现方式与部署

单体就是直接部署 一体化流程 可能就最后需要devops

微服务的部署可以通过云计算来实现

云计算的特点:可以根据需求动态分配资源 天然提供自动化部署 监控 和 管理工具 包括提供负载均衡 服务发现等等 比如云厂商(阿里云 腾讯云 华为云等等)就提供一体化服务


微服务架构:从单机到分布式的革命性升级》 是转载文章,点击查看原文


相关推荐


Excel文件瘦身指南:快速瘦身,告别卡顿-Excel易用宝
Excel_easy10/1/2025

明明工作簿文件中没有几行数据,打开表格的时候要等好一会儿,写个VLOOKUP函数公式鼠标指针都要转半天。其实这是由于文件中积累着各种冗余的信息导致的表格体积变大,计算卡顿等现象。单击【易用宝】→【工作簿】→【Excel文件瘦身】。表格文件超大,打开卡顿,闪烁,这种慢慢慢,烦人!我们只需给表格文件瘦个身就ok了。你有没有遇到过这种情况呢?


AI大模型学习(14)AI 小白入门!用 OpenCV+Python 打造人体姿态识别系统,超详细教程来了
icoder8889/30/2025

这篇教程介绍了如何使用Python+OpenCV+MediaPipe搭建入门级人体姿态识别系统。主要内容包括:人体姿态识别的应用场景(如健身APP、体感游戏)、开发环境搭建(安装Python、OpenCV和MediaPipe库)、核心代码实现(通过30行代码完成摄像头姿态检测),以及进阶功能开发(深蹲动作纠正算法和PPT体感控制器)。教程详细解析了MediaPipe的BlazePose模型架构和33个关键点的生理学意义,并提供了多线程优化等性能提升方案。该项目适合AI初学者实践,无需复杂算法即可实现实时人体


第6篇、Flask 表单处理与用户认证完全指南:从零到实战
何双新2025/10/2

标签:Python Flask Web开发 表单验证 Session Cookie 用户认证 安全编程 🎯 为什么选择这篇文章? 在Web开发的世界里,表单处理和用户认证是每个开发者必须掌握的核心技能。无论是构建电商网站、社交平台还是企业管理系统,都离不开用户登录、数据提交、状态保持这些基础功能。 Flask作为Python最轻量级的Web框架,以其简洁优雅的设计理念,让开发者能够快速构建功能完整的Web应用。本文将带你从零开始,深入理解Flask的表单处理机制,掌握Session和


PlantUML 完整教程:从入门到精通
对不起初见2025/10/2

什么是 PlantUML PlantUML 是一个开源工具,允许用户使用简单直观的文本描述来快速创建 UML 图表。它基于纯文本语法,能够生成多种类型的图表,包括时序图、用例图、类图、活动图、组件图、状态图等。 PlantUML 的核心理念是:用代码画图,让图表版本可控。 核心特点 • 文本驱动:使用简单的文本语法描述图表 • 版本控制友好:纯文本格式可轻松集成到 Git 等版本控制系统 • 多格式输出:支持 PNG、SVG、PDF、LaTeX 等多种输出格式 • 跨平台:基于 Java,可在


【深入浅出PyTorch】--3.1.PyTorch组成模块1
西柚小萌新吖(●ˇ∀ˇ●)2025/10/3

通过本节学习,你将掌握: 机器学习/深度学习任务的整体流程。各个阶段在任务中的作用与实现方式。深度学习与传统机器学习在实现上的关键差异。PyTorch 如何支持深度学习任务的模块化实现。 二、机器学习任务的标准流程 步骤内容说明1. 数据预处理- 统一数据格式 - 清除异常值 - 进行必要的数据变换(如归一化、标准化) - 划分数据集:训练集、验证集、测试集 - 常见方法:按比例随机划分、KFold 交叉验证 - 工具支持:sklearn.model_selection.train_t


【Matlab】matlab代码实现最小凸包
智慧浩海2025/10/4

实现最小凸包的算法有多种方法,其中一种常见的方法是使用Graham扫描算法。下面是用Matlab实现Graham扫描算法找到最小凸包的示例代码: function [convexHull] = grahamScan(points) % 找到包含所有点的最小凸包 n = length(points); % 找到y坐标最小的点作为起始点 [~,idx] = min(points(:,2)); startPoint = points(idx,:);


在AI技术快速实现创意的时代,挖掘游戏开发框架新需求成为关键
qife1222025/10/6

内容描述 核心功能定位:该项目是一个专为经典游戏主机设计的增强型JavaScript运行环境,旨在为用户提供完整的自制软件开发工具包。它通过简化开发流程,让开发者能够使用JavaScript这一简单语言创建游戏和应用程序,无需编译过程,只需编写脚本即可快速测试。 关键应用场景:主要应用于经典游戏主机的自制软件开发,包括游戏创作、应用程序开发、图形渲染、音频处理、网络通信等多个领域。开发者可以利用该环境快速原型设计和开发各类交互式内容。 功能特性 多模块支持:系统提供丰富的功能模块,


【前端工程化】脚手架篇 - 模板引擎 & 动态依赖管理脚手架
ObjectX不知名程序员2025/10/7

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 在日常工作中,我们经常为会遇到需要创建新项目的需求,为了统计代码风格,项目配置,提升效率,我们可以创建一个cli工具,帮助我们实现这样的功能。你也可以搭建一个自己用,毕竟省下来的时间都是自己的 🥑 你能学到什么? 希望在你阅读本篇文章之后,不会觉得浪费了时间。如果你跟着读下来,你将会学到: cli工具的基本搭建流程 如何通过模板引擎实现可选依赖 模板系统如何设计 如何根据模板引擎生成所需项目 熟悉一个组件库的基本结构 熟悉一


OSI 七层模型
日更嵌入式的打工靓仔2025/10/9

一、OSI 七层模型的核心定位与价值​ OSI 七层模型(Open Systems Interconnection Reference Model)是国际标准化组织(ISO)于 1984 年制定的网络通信体系结构标准,其核心目标是打破不同厂商设备的通信壁垒,通过分层化设计实现 “功能解耦、接口标准化”。该模型将网络通信的复杂流程拆解为七个逻辑层次,每层通过定义明确的 “服务原语”(Service Primitive)为上层提供服务,并通过 “协议数据单元(PDU)” 与下层交互,确保不同系统间


【Node】认识一下Node.js 中的 VM 模块
你的人类朋友2025/10/10

前言 今天介绍 Node.js 中的 VM(Virtual Machine)模块的基本概念和使用方法。 很多人不太了解他,比如在下 所以本文也不会过于深入,会偏向入门! 小目标:看完之后向自己解释一下:啥是 VM 模块?它有什么作用? 什么是 VM 模块 VM 模块是 Node.js 内置的模块,用于在 V8 虚拟机上下文中编译和执行 JavaScript 代码。 说人话就是,VM 模块允许你在隔离的环境中运行 JavaScript 代码。 核心功能 这边用代码进行举例子,后面会介绍具体的使用

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0