分布式 vs 微服务:别再傻傻分不清了

分布式 vs 微服务:别再傻傻分不清了

分布式 vs 微服务:别再傻傻分不清了 🤔

🌺The Begin🌺点点关注,收藏不迷路🌺

引言:一对容易混淆的"双胞胎"

在日常开发中,经常听到有人把"分布式"和"微服务"混为一谈:

  • “我们系统要做微服务,所以要部署多台服务器”
  • “分布式系统?就是微服务吧?”

其实它们是两个不同维度的概念!打个比方:

  • 分布式 = 几个人一起搬一张大桌子(协作完成同一件事)
  • 微服务 = 把大桌子拆成小桌子,每人管一张(拆分成独立单元)

微服务架构

用户请求

API网关

订单服务
独立业务

用户服务
独立业务

商品服务
独立业务

分布式系统

任务

节点1
处理部分任务

节点2
处理部分任务

节点3
处理部分任务

结果整合


一、核心定义:完全不同的维度 📚

1.1 什么是分布式系统?

分布式系统是由多台计算机或多个节点组成的系统,各节点之间通过网络进行通信和协作,共同完成一个或多个共享的任务。

核心点:分布式的各个节点目标是一致的,之所以要分布式只是为了有更好的能力,能更快、更高效地承接任务。
// 分布式系统的例子:分布式计算// 任务:计算1-10000的累加和// 分布式拆分: 节点1:计算1-2500的累加和 → 结果A 节点2:计算2501-5000的累加和 → 结果B 节点3:计算5001-7500的累加和 → 结果C 节点4:计算7501-10000的累加和 → 结果D// 最终汇总:结果 = A + B + C + D

常见例子:

  • 分布式文件系统(HDFS):一个大文件分成多块存在不同机器
  • 分布式数据库(TiDB):一张表的数据分散在多台机器
  • 分布式缓存(Redis Cluster):数据分片存储

1.2 什么是微服务?

微服务是一种服务的架构风格,它主要是为了把一个大而全的服务,拆分成多个可以独立、松耦合的服务单元,为了让这些服务单元可以独立部署、运行、管理。

核心点:每个服务有自己的独立业务边界,可以单独开发、部署、扩展。
// 微服务的例子:电商系统拆分// 原来是一个大而全的电商应用 └── 电商系统.war ├── 用户模块 ├── 商品模块 ├── 订单模块 ├── 支付模块 └── 库存模块 // 拆分成独立服务 服务A:用户服务(单独部署)→ 只处理用户相关 服务B:商品服务(单独部署)→ 只处理商品相关 服务C:订单服务(单独部署)→ 只处理订单相关 服务D:支付服务(单独部署)→ 只处理支付相关 服务E:库存服务(单独部署)→ 只处理库存相关 

常见例子:

  • 电商系统:拆分为用户、商品、订单、支付等独立服务
  • 内容平台:拆分为内容、评论、用户、推荐等独立服务
  • 支付系统:拆分为交易、账户、风控、对账等独立服务

二、核心区别:目标 vs 形态 🎯

2.1 对比表

维度分布式系统微服务架构
核心关注点如何协作完成任务如何拆分成独立单元
节点关系分工合作,目标一致独立自治,各司其职
数据存储通常共享数据视图独立数据库
部署方式可以统一部署独立部署
典型例子Hadoop、TiDBSpring Cloud应用
本质属性是一种"系统形态"是一种"架构风格"

2.2 用一个例子说清楚

想象一个大型餐厅:

分布式系统的视角

餐厅有很多厨师,每个厨师负责一部分菜品: - 厨师A:切菜 - 厨师B:炒菜 - 厨师C:装盘 - 厨师D:摆盘 他们**分工协作**,共同完成一道菜的烹饪。 

微服务的视角

餐厅分成了多个独立窗口: - 川菜窗口:独立厨房、独立厨师、独立菜单 - 粤菜窗口:独立厨房、独立厨师、独立菜单 - 湘菜窗口:独立厨房、独立厨师、独立菜单 每个窗口**独立经营**,但都属于同一家餐厅。 

2.3 代码层面的区别

// 分布式系统的例子:分布式计算任务publicclassDistributedTask{// 一个任务拆分成多个子任务,分布式执行publicResultexecuteTask(List<Data> datas){// 1. 数据分片List<List<Data>> shards =shardData(datas,10);// 2. 分布式执行(10个节点并行处理)List<Future<PartialResult>> futures =newArrayList<>();for(List<Data> shard : shards){Future<PartialResult> future = executorService.submit(()->processShard(shard)// 每个节点处理一部分数据); futures.add(future);}// 3. 汇总结果returnmergeResults(futures);}privatePartialResultprocessShard(List<Data> shard){// 所有节点执行相同的处理逻辑// 只是处理的数据不同}}
// 微服务的例子:独立业务服务// 用户服务 - 只处理用户相关@RestController@RequestMapping("/users")publicclassUserService{@AutowiredprivateUserRepository userRepository;// 独立数据库@GetMapping("/{id}")publicUsergetUser(@PathVariableLong id){return userRepository.findById(id);}// 所有方法都和用户相关}// 订单服务 - 只处理订单相关 @RestController@RequestMapping("/orders")publicclassOrderService{@AutowiredprivateOrderRepository orderRepository;// 独立数据库@PostMappingpublicOrdercreateOrder(@RequestBodyOrderDTO dto){// 只处理订单创建逻辑// 如果需要用户信息,调用用户服务User user = userServiceClient.getUser(dto.getUserId());// 继续订单处理}}

三、分布式系统的常见形态 🏗️

分布式系统可以有不同的架构风格,微服务只是其中一种。

3.1 分布式计算

大数据计算任务

节点1
Map阶段

节点2
Map阶段

节点3
Map阶段

节点4
Reduce阶段

最终结果

例子:Hadoop MapReduce、Spark

3.2 分布式存储

// 分布式存储:数据分片存储// 100GB的数据,分散在10台机器上 机器1:存储 0-10GB 的数据 机器2:存储 10-20GB 的数据 机器3:存储 20-30GB 的数据 ... 机器10:存储 90-100GB 的数据 // 查询时,需要从多台机器读取数据// 写入时,根据路由规则写到对应机器

例子:HDFS、TiDB、Elasticsearch

3.3 分布式缓存

// Redis Cluster 分片存储// 根据key的hash值,决定存储到哪个节点int slot =CRC16(key)%16384;if(slot >=0&& slot <5460){// 存储到节点1}elseif(slot >=5460&& slot <10922){// 存储到节点2}else{// 存储到节点3}

3.4 微服务架构

// 微服务本质也是一种分布式系统// 但它强调的是"业务拆分"而不是"任务拆分"// 用户服务@RestController@RequestMapping("/users")publicclassUserController{// 独立的业务逻辑}// 订单服务 @RestController@RequestMapping("/orders")publicclassOrderController{// 独立的业务逻辑}

四、两者关系:维恩图 📊

分布式系统

分布式计算
如Hadoop

分布式存储
如HDFS

分布式缓存
如Redis Cluster

微服务架构

关系总结

  1. 微服务必然是分布式的:因为服务部署在不同节点
  2. 分布式不一定是微服务:可以是其他形态
  3. 微服务是一种特殊的分布式系统:专注于业务拆分

五、实际场景对比 🌰

5.1 电商大促场景

分布式视角

// 处理10万个并发订单,需要分布式处理// 订单处理是同一个逻辑,只是分摊到多台机器 机器1:处理前3.3万订单 机器2:处理中间3.3万订单 机器3:处理最后3.4万订单 

微服务视角

// 不同的业务逻辑拆分成不同服务// 每个服务独立处理自己的业务 用户服务:处理用户登录、注册 商品服务:处理商品查询、库存 订单服务:处理订单创建、查询 支付服务:处理支付流程 

5.2 数据库对比

场景分布式系统微服务
数据拆分维度按数据量拆分按业务拆分
数据关系数据是一体的数据是独立的
查询方式可能需要跨节点查询通常不跨服务查询
典型例子分库分表每个服务独立数据库

六、总结:别再混淆了! 🎯

6.1 一句话区分

分布式解决的是"怎么做"的问题(多机协作)

微服务解决的是"做什么"的问题(业务拆分)

6.2 记忆口诀

分布式,为能力,多机协作同目标 微服务,为解耦,独立拆分各业务 一个是手段,一个是风格 两者可结合,但非同一物 

6.3 最终理解

  • 如果问"为什么用多台机器?" → 可能是在谈分布式
  • 如果问"为什么拆分成多个服务?" → 可能是在谈微服务
  • 如果问"微服务为什么需要多台机器?" → 因为微服务本身就是分布式的一种

技术面试加分项

“微服务架构本质上是一种特殊的分布式系统,但它更侧重于业务层面的拆分和解耦,而分布式系统更侧重于技术层面的协作和扩展。它们不是非此即彼的关系,而是不同维度的概念。”

(本文为架构设计系列文章,欢迎关注更多系统设计深度内容)

在这里插入图片描述

🌺The End🌺点点关注,收藏不迷路🌺

Read more

FPGA内部资源详解:LUT、FF、BRAM、DSP、PLL是什么?综合报告怎么看

FPGA内部资源详解:LUT、FF、BRAM、DSP、PLL是什么?综合报告怎么看

本文是《FPGA入门到实战》专栏第8篇。上一篇完成了第一个下板项目,本篇从芯片内部视角出发,深入讲解 FPGA 的五大核心硬件资源:LUT、FF、BRAM、DSP 和 PLL。理解这些资源的工作原理和使用限制,是写出高质量 FPGA 代码、读懂综合报告的基础。 FPGA内部资源详解:LUT、FF、BRAM、DSP、PLL是什么?综合报告怎么看 * 1. 为什么要了解内部资源 * 1.1 Artix-7 资源概览 * 2. LUT 查找表 * 2.1 LUT 是什么 * 2.2 LUT 实现任意 6 输入函数 * 2.3 LUT 的双输出模式(O5/

By Ne0inhk
【OpenHarmony】鸿蒙Flutter智能家居应用开发实战指南

【OpenHarmony】鸿蒙Flutter智能家居应用开发实战指南

鸿蒙Flutter智能家居应用开发实战指南 概述 智能家居是鸿蒙全场景生态的重要应用场景。本文讲解如何基于鸿蒙Flutter框架,开发一套完整的智能家居应用,实现设备发现、控制、场景联动、语音交互等核心功能。 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 系统架构设计 整体架构图 ┌────────────────────────────────────────────────────────────┐ │ 用户交互层 (Flutter) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ 设备控制面板 │ │ 场景编排 │ │ 语音交互 │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └───────────────────────┬────────────────────────────────────┘ │ RPC/事件总线 ┌────────────────────

By Ne0inhk

OpenClaw中飞书机器人配置指南:如何让群消息免 @ 也能自动回复

用 OpenClaw 做飞书机器人时,默认配置下,群里的消息必须 @ 机器人 才能触发回复。这在很多场景下很不方便——如果希望机器人在群里"隐身"工作,不用 @ 就能自动监听和回复,需要额外配置。 本文记录我解决这个问题的完整过程,供同样踩坑的同学参考。 问题描述 现象: * 飞书群里 @ 机器人 → 正常回复 ✅ * 飞书群里不 @ 机器人 → 没有任何反应 ❌ 环境: * OpenClaw 框架 * 飞书自建应用(机器人) * WebSocket 长连接模式 解决过程 第一步:修改 OpenClaw 配置 在 openclaw.json 中找到飞书渠道配置: "channels":{"feishu":{"requireMention&

By Ne0inhk
Trae x 图片素描MCP一键将普通图片转换为多风格素描效果

Trae x 图片素描MCP一键将普通图片转换为多风格素描效果

目录 * 前言 * 一、核心工具与优势解析 * 二、操作步骤:从安装到生成素描效果 * 第一步:获取MCP配置代码 * 第二步:下载 * 第三步:在 Trae 中导入 MCP 配置并建立连接 * 第四步:核心功能调用 * 三、三大素描风格差异化应用 * 四.总结 前言 在设计创作、社交媒体分享、教育演示等场景中,素描风格的图片往往能以简洁的线条突出主体特征,带来独特的艺术质感。然而,传统素描效果制作需借助专业设计软件(如Photoshop、Procreate),不仅操作复杂,还需掌握一定的绘画技巧,难以满足普通用户快速生成素描的需求。 为解决这一痛点,本文将介绍蓝耘MCP广场提供的图片素描MCP工具(工具ID:3423)。该工具基于MCP(Model Context Protocol)协议开发,支持单张/批量图片转换、3种素描风格切换及自定义参数调节,兼容多种图片格式与中文路径,无需专业设计能力,

By Ne0inhk