分布式 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

Flutter 三方库 date_utils 的鸿蒙化适配指南 - 实现精准的业务日期计算、支持农历转换与分布式考勤场景下的时间逻辑编排实战

Flutter 三方库 date_utils 的鸿蒙化适配指南 - 实现精准的业务日期计算、支持农历转换与分布式考勤场景下的时间逻辑编排实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 date_utils 的鸿蒙化适配指南 - 实现精准的业务日期计算、支持农历转换与分布式考勤场景下的时间逻辑编排实战 前言 在进行 Flutter for OpenHarmony 的企业级 OA、日历或金融类应用开发时,原生的 DateTime 类虽然好用,但在处理复杂的业务日期逻辑(如:获取上月最后一天、计算两个日期间的工作日、农历转换等)时,往往需要编写大量繁琐的代码。date_utils 是一个功能完备的日期增强工具库。本文将介绍如何在鸿蒙端利用该库构建极致精准、业务友好的时间处理体系。 一、原直观解析 / 概念介绍 1.1 基础原理 date_utils 通过对 Dart 原生 DateTime 对象的封装和算法扩展,提供了一系列声明式的

By Ne0inhk

ClawdBot故障排查:Gateway not reachable错误定位与修复

ClawdBot故障排查:Gateway not reachable错误定位与修复 1. 问题现象与核心定位 你刚部署好ClawdBot,满怀期待地打开控制台,却在终端里看到这样一行报错: Gateway not reachable: Error: gateway closed (1006 abnormal closure (no close frame)): no close reason Gateway target: ws://127.0.0.1:18780 紧接着,clawdbot channels status --probe 命令返回的不是健康状态,而是一片沉默的“Config-only status”——这意味着你的ClawdBot后端网关根本没跑起来,所有通道(Telegram、Web UI、API)都处于断联状态。 这不是配置写错了,也不是Token填漏了,

By Ne0inhk

OpenClaw gateway start 报 401 Invalid API key?一个环境变量的坑

今天折腾了半小时,终于搞明白为什么 openclaw gateway start 一直报 HTTP 401: Invalid API key,而 openclaw gateway run 却能正常工作。 记录一下,免得以后又踩。 问题现象 用 openclaw gateway run 前台运行,一切正常,能正常对话。 但换成 openclaw gateway start(systemd 后台服务),就报错: HTTP 401: Invalid API key 明明配置文件里 API key 写得好好的,为什么会这样? 原因分析 run 和 start 的区别: * run — 前台运行,

By Ne0inhk
Spring AI Alibaba与 Agent Scope到底选哪个?

Spring AI Alibaba与 Agent Scope到底选哪个?

文章目录 * 引言 * 概念纠正 * 目前的两大发展方向 * Workflow模式(工作流) * 运行机制 * 后端视角类比 * 适用场景 * Agentic 模式 (智能体 / 自主模式) * 运行机制:Loop (循环) * 后端视角类比 * 适用场景 * AgentScope java 和 Spring AI Alibaba的区别 * 总结 引言 Spring AI Alibaba 和 Agent Scope 虽然都出自阿里巴巴,但它们的核心设计理念、适用场景以及对“Agent(智能体)”的定义有本质的区别。那我们怎么根据自己的场景来选择不同的框架呢?今天就来讲讲这两者适用的不同场景与相关概念,坐稳扶好! 概念纠正 有些人总是认为chatbot(ChatGPT、DeepSeek等)就是Agent,其实是错误的。 Agent = LLM(大脑)

By Ne0inhk