架构演变 之 超市进化

1. 单机架构 → 小卖部(夫妻店)

  • 场景:一个老板包揽所有工作——进货、摆货、收银、打扫,店里只有一个小仓库。
  • 对应架构:所有功能(数据库、业务逻辑、页面)都挤在一台服务器上。
  • 问题
    • 人一多就排队(并发差);
    • 老板生病/仓库着火,店直接关门(单点故障);
    • 想卖更多东西?只能把小仓库塞爆(性能瓶颈)。

2. 分层架构 → 中型超市(分部门协作)

  • 场景:超市大了,老板雇了员工,分成了 前台收银组理货组仓库管理组
    • 前台:只负责收银(用户界面层);
    • 理货组:处理商品上架、促销(业务逻辑层);
    • 仓库组:管库存和进货(数据库层)。
  • 对应架构:系统分三层(表现层、逻辑层、数据层),各层独立。
  • 优点
    • 分工明确,招人容易(维护方便);
    • 仓库爆了可以租隔壁仓库(数据库单独扩容)。
  • 缺点
    • 部门间得频繁沟通(层间调用多,性能损耗);
    • 促销活动需要三个部门一起改(耦合度高)。

3. 微服务架构 → 大型连锁超市(独立业务线)

  • 场景:超市变成连锁品牌,每条业务线独立运营:
    • 生鲜区:自己管进货、定价、促销;
    • 日用品区:单独管理库存和配送;
    • 收银系统:统一对接所有区域。
  • 对应架构:每个业务拆成独立服务(用户服务、订单服务、支付服务),通过API交互。
  • 优点
    • 生鲜区坏了,日用品区照常营业(容错性强);
    • 生鲜区可以自己升级冷链系统(独立部署)。
  • 缺点
    • 各区域要协调促销活动(服务间通信复杂);
    • 总部的监控中心必须盯着所有区域(需要分布式监控)。

4. 分布式架构 → 全国连锁超市(多地分仓)

  • 场景:超市覆盖全国,每个城市有分店和仓库:
    • 北京店:服务北方用户,库存从华北仓调货;
    • 上海店:服务南方用户,库存从华东仓调货;
    • 总部同步各仓库存,避免超卖。
  • 对应架构:数据库和服务器分散在多地,数据同步(如MySQL主从复制、Redis集群)。
  • 优点
    • 北京用户不用从上海调货(低延迟);
    • 华北仓着火,华东仓能顶替(高可用)。
  • 缺点
    • 总部得确保各仓库存一致(数据一致性难题);
    • 建分仓成本高(服务器和运维成本翻倍)。

5. Serverless架构 → 临时快闪店(外包按需雇人)

  • 场景:超市在圣诞节临时开个快闪店:
    • 不雇长期员工,按当天客流量临时找兼职;
    • 卖完就撤场,不操心后续运维。
  • 对应架构:代码丢给云平台,按调用次数计费(如AWS Lambda)。
  • 优点
    • 不用养员工(省服务器成本);
    • 突然来1000个顾客?平台自动派兼职(自动扩容)。
  • 缺点
    • 快闪店只能卖圣诞商品(适合短期/特定场景)。

总结:超市规模决定架构选择

超市阶段对应架构核心矛盾
小卖部单机架构规模小但扛不住风险
中型分部门超市分层架构分工明确但协作效率低
大型连锁超市微服务架构灵活但管理成本高
全国分仓超市分布式架构抗压但数据同步难
临时快闪店Serverless省心但受限于场景

补充说明

1. 什么情况下微服务内部用单体架构?
  • 场景:业务简单,代码量少,比如一个“用户积分计算服务”。
  • 特点
    • 代码不分层,所有逻辑堆在一起(比如直接在一个类里处理请求、计算积分、写数据库);
    • 不拆分模块,没有明确的接口隔离;
    • 适合快速开发,小团队维护。
2. 什么情况下微服务内部用分层架构?
  • 场景:业务复杂,需要多人协作,比如“订单服务”包含下单、支付、退款等多个子模块。
  • 特点
    • 分层:比如分Controller(接请求)、Service(业务逻辑)、DAO(操作数据库);
    • 模块化:按功能拆包,比如order.controllerorder.serviceorder.repository
    • 依赖隔离:Service层不直接操作数据库,通过接口调用DAO层。
  • 注意点
  • 接口层(Controller/API):仅处理请求/响应、参数校验;
  • 业务层(Service):核心逻辑,禁止直接操作数据库;
  • 数据层(Repository/DAO):仅负责数据库/外部API调用。

-微服务架构下的每个服务,可以是单体,也可以是分层架构
-使用Serverless→ 通常不分层,一个函数干一件事。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 和 RV1126 交叉编译Mosqutiio-1.6.9

最近需要交叉编译mosquitto,遇到一些小问题记录一下。 1.众所周知使用它自带的Makefile编译的时候,只需要在编译前,指定它config.mk中的变量:CFLAGS头文件路径 和 LDFLAGS库文件路径就ok,例子如下: expor…

Photoshop 中如何快速抠图?

Photoshop 中如何快速抠图? 抠图是 Photoshop 中的常见操作,无论是去除背景还是提取特定对象,都需要掌握高效的抠图技巧。本文将介绍几种快速抠图的方法,帮助你轻松完成设计任务。 1. 快速选择工具(Quick Selection T…

解决 React 中的 Hydration Failed 错误

解决 React 中的 Hydration Failed 错误 React 的 服务器端渲染(SSR)通过在服务器端生成 HTML 并将其发送给客户端,帮助提高页面加载速度和搜索引擎优化(SEO)。然而,在进行 SSR 后,React 需要进…

如何使用postman来测试接口

一、postman的介绍与下载 可参考: https://blog.csdn.net/freeking101/article/details/80774271 二、api获取网站 阿里云API应用市场 地址:云市场_镜像市场_软件商店_建站软件_服务器软件_API接口_应用市场 - 阿里云 三、具体测试过程 可模拟浏览…

数据库系统概论(二)数据模型

数据库系统概论(二)数据模型 数据库系统概论(二)数据模型前言一、数据建模二、概念模型三、数据模型的三要素四、层次模型五、网状模型六、关系模型 总结(核心概念速记): 数据库系统概论&#x…

清华同方国产电脑能改windows吗_清华同方国产系统改win7教程

清华同方国产电脑能改windows吗?清华同方国产电脑如果采用的是兆芯kx-6000系列或kx-7000系列以及海光c86 3250 3350 X86架构处理器可以安装windows。在安装win7时bios中要关闭“安全启动”和开启legacy传统模式支持,如果是NVME接口的固态硬盘&#xff0c…

安卓Android与iOS设备管理对比:企业选择指南

目录 一、管理方式差异 Android Enterprise方案包含三种典型模式: Apple MDM方案主要提供两种模式: 二、安全防护能力 Android系统特点: 三、应用管理方案 四、设备选择建议 五、典型场景推荐 需求场景 推荐方案 六、决策建议要点…

再聊 Flutter Riverpod ,注解模式下的 Riverpod 有什么特别之处,还有发展方向

三年前我们通过 《Flutter Riverpod 全面深入解析》 深入理解了 riverpod 的内部实现,而时隔三年之后,如今Riverpod 的主流模式已经是注解,那今天就让我们来聊聊 riverpod 的注解有什么特殊之处。 前言 在此之前,我们需要先回忆…

前端项目Axios封装Vue3详细教程(附源码)

前端项目Axios封装Vue3详细教程(附源码) 一、引言 在前端项目开发中,HTTP请求是不可或缺的一部分。Axios作为一个基于Promise的HTTP客户端,因其易用性和丰富的功能而广受欢迎。在Vue3项目中,合理地封装Axios不仅可以提…

手写一个Tomcat

Tomcat 是一个广泛使用的开源 Java Servlet 容器,用于运行 Java Web 应用程序。虽然 Tomcat 本身功能强大且复杂,但通过手写一个简易版的 Tomcat,我们可以更好地理解其核心工作原理。本文将带你一步步实现一个简易版的 Tomcat,并深…

在 UniApp 开发的网站中使图片能够缓存,不一直刷新

在 UniApp 开发的网站中,要使图片能够缓存,不一直刷新,可以考虑以下几种方法: 1. 使用适当的 HTTP 缓存头 确保你的服务器在响应图片时,返回合适的缓存控制 HTTP 头。以下是一些常用的 HTTP 头来控制缓存&#xff1a…

Makefile——make工具编译STM32工程

一、Makefile相关指令 1.1、变量 符号含义替换追加:恒等于 1.2、隐含规则 符号含义%.o任意的.o文件*.o所有的.o文件 1.3、通配符 符号含义$^所有依赖文件$所有目标文件$<所有依赖文件的第一个文件 1.4、编译器指令常用参数功能说明 符号含义举例-E预处理&#xff0c;…

深入理解Linux文件系统权限:从基础到高级应用全解析

1. 什么是文件系统权限&#xff1f;它是如何工作的&#xff1f; 文件权限的本质 想象你的电脑是一个大房子&#xff0c;每个文件和目录都是房间里的物品。文件系统权限就像是一把钥匙&#xff0c;决定谁能进房间、能看什么、能修改什么。 权限三要素&#xff1a; 读&#xff…

C语言:6.22练习题数组解答

#include <stdio.h> #include <string.h> // 用于 strlen() int main() {char a[100];int j 0;// 从用户输入读取字符串printf("请输入一个字符串: ");fgets(a, sizeof(a), stdin);// 遍历字符串中的每个字符for (int i 0; i < strlen(a); i) {if (…

一、docker的安装

一、docker桌面 二、docker的配置文件 1、docker配置文件位置/etc/docker/daemon.json 使用json格式&#xff0c;graphdata-root {"graph":"/deploy/docker","registry-mirrors": ["https://8auvmfwy.mirror.aliyuncs.com"],"…

Matlab 多项式拟合点法线(二维)

文章目录 一、简介二、实现代码三、实现效果一、简介 这个思路其实很简单,假设我们有一组曲线点,我们可以对其拟合曲线并计算其导数来获取每个点的法向量,当然这一思路也可以扩展至三维。具体过程如下所示: 二、实现代码 %% *********

DeepSeek-R1 论文阅读总结

1. QA问答&#xff08;我的笔记&#xff09; Q1: DeepSeek如何处理可读性问题&#xff1f; 通过构建冷启动数据&#xff08;数千条长CoT数据&#xff09;微调基础模型&#xff0c;结合多阶段训练流程&#xff08;RL训练、拒绝采样生成SFT数据&#xff09;&#xff0c;并优化输…

Manus AI:多语言手写识别的技术革命与未来图景

摘要&#xff1a;在全球化浪潮下&#xff0c;跨语言沟通的需求日益迫切&#xff0c;但手写文字的多样性却成为技术突破的难点。Manus AI凭借其多语言手写识别技术&#xff0c;将潦草笔迹转化为精准数字文本&#xff0c;覆盖全球超百种语言。本文从技术原理、应用场景、行业价值…

Flutter——最详细原生交互(MethodChannel、EventChannel、BasicMessageChannel)使用教程

MethodChannel&#xff08;方法通道&#xff09; 用途&#xff1a;实现 双向通信&#xff0c;用于调用原生平台提供的 API 并获取返回结果。 场景&#xff1a;适合一次性操作&#xff0c;如调用相机、获取设备信息等。 使用步骤&#xff1a; Flutter 端&#xff1a;通过 Meth…

Python控制语句-循环语句-while

1.若k为整形,下述while循环执行的次数为()。 k=1000 while k>1: print(k) k=k/2 A、9 B、10 C、11 D、100 答案:A。k=k/2意味着每循环一次,k的值就会变为原来的一半,直到k的值不大于1。 2.下面的代码,哪些会输出1,2,3三个数字( )。 A、 for i in range(3): print(i) …