当前位置: 首页 > article >正文

由docker引入架构简单展开说说技术栈学习之路

想象一下,你开了一家线上小卖部(单机版),突然爆单了怎么办?别急,技术架构的升级打怪之路,可比哆啦A梦的口袋还神奇!

第1关:单枪匹马的创业初期(单机架构)

  • 场景: 顾客不多,老板身兼数职(服务器),既要招呼客人(应用服务),又要管仓库(数据库)。所有活儿一台机器搞定。

  • 优点: 简单!省钱!开发快,上线快。

  • 缺点: 人一多(访问量大),老板累瘫(服务器崩溃),小店关门(系统宕机)。

  • 技术小伙伴: Tomcat (招呼客人), MySQL (管仓库)。

第2关:招个库管,解放老板(应用数据分离)

  • 问题: 顾客多了,老板又招呼客人又找货,手忙脚乱。

  • 妙招: 雇个专职库管(数据库服务器)!老板专心招呼(应用服务器),库管专心管货,俩人用对讲机(网络)沟通。

  • 效果: 效率提升,能接待更多顾客。成本增加一点点(多一台服务器)。

  • 核心: 分离职责是性能提升的第一步。

第3关:开分店,招更多店员(应用服务集群)

  • 问题: 生意火爆!一个老板(应用服务器)累吐血也忙不过来。

  • 抉择时刻:

    • 方案A (买超强老板 - Scale Up):重金聘请一个超人老板(更贵更强的服务器)。贵!而且超人也有极限。

    • 方案B (开分店 - Scale Out):多开几家分店(多台应用服务器),每家配个普通老板。成本可控,潜力无限!

  • 选择B!关键道具登场:智能前台(负载均衡)

    • 作用: 顾客进门(用户请求),智能前台(如Nginx)看哪家分店(应用服务器)闲,就把顾客引到哪家。公平轮班(Round-Robin)或者让能力强的店多接客(Weighted)。

  • 效果: 接待能力水平扩展!顾客再多也不怕(理论上)。

  • 分布式雏形: 多个“老板”在不同地方(服务器)通过网络协作,这就是分布式的物理形态!多个“老板”集群起来共同完成“招呼顾客”的目标。

第4关:库管也顶不住了?给库管找帮手!(读写分离/主从架构)

  • 新瓶颈: 分店多了,所有老板都找同一个库管查库存、改库存,库管累哭了(数据库压力大)。

  • 妙招: 库管团队化!

    • 主库管(Master): 唯一有“修改库存”权限的大佬(写请求)。

    • 从库管(Slaves): 一群小弟,只负责“查库存”(读请求)。他们的数据是主库管同步过来的副本。

  • 核心思想: 读写分离。大部分顾客只是看看(读多写少),让小弟们分担查询压力。主库管专心处理关键的修改操作(下单、支付)。

  • 需要帮手: 数据库中间件(如MyCat)—— 自动把“查”的请求分给小弟(从库),把“改”的请求交给大佬(主库)。

  • 分布式力量: 数据库服务也实现了分布式部署集群化(主+从集群),共同提供数据服务。

第5关:明星商品太火爆?提前摆上货架!(引入缓存 - 冷热分离)

  • 问题: 爆款商品(热数据)被疯狂查询,库管小弟们(从库)也查得冒烟了。

  • 妙招: 在店铺最显眼的地方(应用服务器本地缓存,如Memcached),甚至店门口放个大广告牌(分布式缓存,如Redis),直接把爆款商品信息贴出来!

  • 效果: 大部分顾客看一眼广告牌(缓存)就走了,根本不用麻烦库管(数据库)。数据库压力骤降,响应飞快!

  • 注意: 广告牌信息得及时更新(缓存一致性),别卖光了还挂着(缓存穿透/击穿/雪崩问题)。

第6关:仓库爆仓?分门别类建新仓!(垂直分库)

  • 问题: 商品、订单、用户信息全堆在一个大仓库(单库),找东西慢,管理混乱。

  • 妙招: 按业务分仓库!用户一个仓,商品一个仓,订单一个仓(垂直分库)。甚至一个仓太大,再按规则分成小隔间(分表,如按用户ID哈希、按时间分表)。

  • 效果: 数据管理更清晰,查询更快(数据量小了)。单个库/表压力小了。

  • 技术实现: 需要强大的“仓库管理员”(如MyCat, ShardingSphere)知道去哪找数据(路由)。

  • 分布式深化: 数据本身也实现了分布式存储。逻辑上还是一个“大仓库”,物理上分散在多台机器。这已经是分布式数据库的范畴了(如TiDB)。

🚀 第7关:小店变大集团!独立事业部运营(微服务架构)

  • 问题: 公司大了(系统复杂),部门多了(开发团队)。商品部改个价格,财务部系统崩了?用户体验部想加个功能,得等订单部排期?沟通成本高,开发慢,发布风险大!

  • 革命性方案:微服务!

    • 核心思想: 把大公司(单体应用)拆分成一堆独立运营的小公司(微服务)!每个小公司(服务)只专心做好一件事(单一职责),比如:

      • 用户服务: 只管注册登录。

      • 商品服务: 只管商品展示。

      • 订单服务: 只管下单支付。

      • 支付服务: 只管收钱。

    • 怎么协作? 小公司之间签合同(定义API接口),通过专门的“快递员”(如HTTP/RPC, 消息队列)传递信息(服务调用)。设立“集团总部”(API Gateway)统一对外接待客户(用户请求),再分发给内部小公司。

  • 分布式威力全开:

    • 物理分布式: 每个服务都可以独立部署在不同服务器甚至不同集群上。

    • 逻辑分布式: 系统功能被拆解成自治的单元。

  • 微服务核心价值:

    1. 独立自治: 各服务独立开发、测试、部署、升级、伸缩。商品部改价格,只要他们自己的服务上线,不影响财务部(理论上 😉)。

    2. 技术异构: 用户服务用Java,商品服务用Go?没问题!选最适合的技术栈。

    3. 弹性伸缩: 双十一订单服务压力大?单独给订单服务多加机器(水平扩展)!用户服务不忙?缩容省钱。

    4. 容错性提升: 订单服务挂了?支付服务可能还能用(部分可用),比整个系统全挂强。可以通过熔断、降级等机制保护系统。

    5. 更易维护: 代码库小,逻辑清晰,新人上手快。

  • 技术小伙伴: Spring Cloud, Dubbo (管理微服务协作), Nginx/Gateway (统一入口), Kafka/RabbitMQ (异步通信)。

第8关:集团高效运营的秘密武器(容器化与K8S)

 

  • 新烦恼: 小公司(微服务)太多了!开公司(部署)、招人(扩缩容)、搬家(迁移)、保证水电(环境一致)太麻烦,运维累趴。

  • 终极方案:集装箱化运营!

    • Docker (集装箱): 把每个小公司(微服务)连同它的办公桌椅、电脑软件(代码+环境)一起,打包塞进一个标准集装箱(镜像)。这个集装箱在任何码头(服务器)都能快速开箱即用!

    • Kubernetes/K8s (超级物流中心): 管理成千上万个集装箱(容器)。自动安排哪个集装箱放哪个码头(调度),码头不够了自动租新码头(自动扩缩容),集装箱坏了自动换新的(自愈),保证整个集团(应用)高效稳定运转。

  • 效果: 部署快如闪电,资源利用超高,运维轻松百倍,微服务管理如虎添翼!真正的云原生基石。

  • 技术小伙伴: Docker, Kubernetes。

🌟 总结:分布式与微服务的江湖地位

  • 分布式: “人多力量大”的物理基础。 它的核心是把任务分散到多台机器上干。解决了单台机器性能(CPU、内存、磁盘、网络)和可靠性(一台挂了全完)的瓶颈。是支撑高并发(扛得住很多人访问) 和高可用(挂了也能很快恢复服务) 的基石。从应用集群、数据库主从、缓存集群到分库分表,都是分布式思想的体现。

  • 微服务: “分而治之”的逻辑艺术。 它的核心是把一个庞大复杂的软件系统拆分成小的、独立的服务。解决了单体应用在复杂性、开发效率、部署风险、技术迭代和团队协作上的难题。是构建大型、复杂、快速迭代系统的首选架构。它极大地依赖分布式技术(因为服务要独立部署和扩展),是分布式思想在应用架构设计上的升华。

通俗版:

  • 想象你要盖摩天大楼(高并发大系统)。

  • 分布式:告诉你别指望一根擎天柱(单机),得打很多根地基(多台机器),用坚固的钢筋网络(网络)把它们连成一个稳固整体。保证楼不倒(高可用),能容纳很多人(高并发)。

  • 微服务:告诉你别把整栋楼设计成一个巨大水泥块(单体应用)。要划分成功能明确的独立单元(公寓、商场、写字楼),每个单元有自己的设计、施工、维护团队(独立服务)。这样修改一个单元(比如升级商场)不影响其他住户(公寓、写字楼),建起来更快更灵活。

写在最后

技术架构的演进,就像创业公司从小作坊到跨国集团的成长史。没有一步登天的银弹,只有针对当前瓶颈,选择最合适的“进化”方案。单机 -> 分离 -> 集群(分布式初显)-> 读写分离/缓存(分布式深化)-> 分库分表(数据分布式)-> 微服务(应用逻辑分布式)-> 容器化(运维自动化),每一步都为了解决实际问题。理解分布式是“多台机器协作”的力量之源,理解微服务是“拆分管理”的智慧之道,你就能在构建强大系统的道路上,走得更稳更远!记住:架构是为业务服务的,合适的就是最好的!

下图是一个总体架构图

相关文章:

由docker引入架构简单展开说说技术栈学习之路

想象一下,你开了一家线上小卖部(单机版),突然爆单了怎么办?别急,技术架构的升级打怪之路,可比哆啦A梦的口袋还神奇! 第1关:单枪匹马的创业初期(单机架构&…...

linux 1.0.5

环境变量到底是什么 也就是windows上面的环境变量 就是这个东东,用户变量和系统变量,那这些到底是啥呢? 主包只是用过,配置来配置去的,就是不知道是啥意思 windows上面的环境变量 windows的ls命令是dir 输入calc可有…...

强化学习的前世今生(五)— SAC算法

书接前四篇 强化学习的前世今生(一) 强化学习的前世今生(二) 强化学习的前世今生(三)— PPO算法 强化学习的前世今生(四)— DDPG算法 本文为大家介绍SAC算法 7 SAC 7.1 最大熵强化…...

SQL进阶之旅 Day 8:窗口函数实用技巧

【SQL进阶之旅 Day 8】窗口函数实用技巧 在现代数据库开发中,处理复杂的业务逻辑和大规模数据时,仅仅依靠传统的GROUP BY和JOIN操作已经无法满足需求。**窗口函数(Window Function)**作为SQL标准的一部分,为开发者提供…...

生成对抗网络(GAN)基础原理深度解析:从直观理解到形式化表达

摘要 本文详细解析 生成对抗网络(GAN) 的 核心原理,从通俗类比入手,结合印假钞与警察博弈的案例阐述生成器 与 判别器 的对抗机制;通过模型结构示意图,解析 噪声采样、样本生成 及判别流程;基于…...

ubuntu 安装redis-6.2.9 源码安装和相关配置详解

目录 1 查看redis 软件列表 2 操作系统信息 3 redis软件下载并编译安装 4 redis 配置文件 5 启动redis 6 redis登录测试 7 设置redis开机启动 8 redis 配置详解 1 查看redis 软件列表 https://download.redis.io/releases/ 2 操作系统信息 rootu24-redis-120:~# cat /…...

c++之数组

目录 C数组基础概念 数组常见操作 二维数组定义与初始化 二维数组遍历方法 二维数组与函数 C数组基础概念 数组是C中用于存储相同类型元素的连续内存结构。通过索引访问元素,索引从0开始。数组大小必须在编译时确定,属于静态数据结构。 #include &…...

torch.distributed.launch 、 torchrun 和 torch.distributed.run 无法与 nohup 兼容

问题现象: 使用nohup 启动torch的分布式训练后, 由于ssh断开与服务器的连接, 导致训练过程出错: WARNING:torch.distributed.elastic.agent.server.api:Received 1 death signal, shutting down workers WARNING:torch.distribu…...

[SC]C++ 中 struct vs. class 的唯一区别

SystemC中 struct vs. class 的唯一区别 一、背景: 在 SystemC 示例里你会常看到这样的写法:SC_MODULE(Top) {// … ports, signals, 进程注册 … };而如果你展开宏 SC_MODULE(Top),它本质上就是:struct Top : sc_core::sc_module {// public:// Top(sc_core::sc_module_…...

React从基础入门到高级实战:React 高级主题 - React设计模式:提升代码架构的艺术

React设计模式:提升代码架构的艺术 引言 在React开发中,设计模式是构建可维护、可扩展和高性能应用的关键。随着应用复杂性的增加,掌握高级设计模式不仅是技术上的挑战,更是打造优雅架构的艺术。对于有经验的开发者而言&#xf…...

【GitHub开源AI精选】WhisperX:70倍实时语音转录、革命性词级时间戳与多说话人分离技术

系列篇章💥 No.文章1【GitHub开源AI精选】LLM 驱动的影视解说工具:Narrato AI 一站式高效创作实践2【GitHub开源AI精选】德国比勒费尔德大学TryOffDiff——高保真服装重建的虚拟试穿技术新突破3【GitHub开源AI精选】哈工大(深圳)…...

【leetcode】459.重复的子字符串

文章目录 题目题解枚举 题目 459.重复的子字符串 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “aba” 输出: false 示例 3: 输入…...

华为OD机试真题——文件目录大小(2025 A卷:100分)Java/python/JavaScript/C++/C语言/GO六种语言最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《文件目录大小》: 目录 题…...

【Java】mybatis-plus乐观锁与Spring重试机制

上一篇【Java】mybatis-plus乐观锁-基本使用 讲到了mybatis-plus的基本使用,简单的使用Version和一个基础配置类即可实现乐观锁。 但是mybatis-plus本身并没有自带重试机制。 即当我们带上版本号去更新数据,但是由于另一个线程已经将版本号修改了&#x…...

Linux 与 Windows:哪个操作系统适合你?

Linux vs Windows:系统选择的关键考量 在数字化转型浪潮中,操作系统作为底层基础设施的重要性日益凸显。Linux与Windows作为主流选择,其差异不仅体现在技术架构上,更深刻影响着开发效率、运维成本与安全性。本文将从​​7个核心维度​​展开对比分析,并提供典型应用场景建…...

C#委托的概念与使用方法

一、委托的基本概念 委托是一种引用类型,它允许将方法作为参数进行传递。简单来说,委托就像是对方法的引用,可以通过委托来调用对应的方法。 委托具有类型安全性,它会检查方法的签名是否与委托的签名匹配,这有助于避免…...

消费者行为变革下开源AI智能名片与链动2+1模式S2B2C商城小程序的协同创新路径

摘要:在信息爆炸与消费理性化趋势下,消费者从被动接受转向主动筛选,企业营销模式面临重构挑战。本文提出开源AI智能名片与链动21模式S2B2C商城小程序的协同创新框架,通过AI驱动的精准触达、链动裂变机制与S2B2C生态赋能&#xff0…...

软考 系统架构设计师系列知识点之杂项集萃(78)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(77) 第139题 以下关于软件测试工具的叙述,错误的是()。 A. 静态测试工具可用于对软件需求、结构设计、详细设计和代码进行评审、走查和审查 B. 静…...

解决MyBatis参数绑定中参数名不一致导致的错误问题

前言 作为一名Java开发者,我在实际项目中曾多次遇到MyBatis参数绑定的问题。其中最常见的一种情况是:在Mapper接口中定义的参数名与XML映射文件中的占位符名称不一致,导致运行时抛出Parameter xxx not found类异常。这类问题看似简单&#x…...

如何解决MySQL Workbench中的错误Error Code: 1175

错误描述: 在MySQL Workbench8.0中练习SQL语句时,执行一条update语句,总是提示如下错误: Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY columnTo disab…...

Docker 镜像(或 Docker 容器)中查找文件命令

在 Docker 镜像(或 Docker 容器)中运行如下两个命令时: cd / find . -name generate.py它们的含义如下,我们来一行一行详细拆解,并结合例子讲解: ✅ 第一行:cd / ✅ 含义 cd 是“change dire…...

MySQL进阶篇(存储引擎、索引、视图、SQL性能优化、存储过程、触发器、锁)

MySQL进阶篇 存储引擎篇MySQL体系结构存储引擎简介常用存储引擎简介存储引擎的选择 索引篇索引简介索引结构(1)BTree索引(2)hash索引 索引分类索引语法SQL性能分析指标(1)SQL执行频率(2)慢查询日志(3)profile详情(4)explain或desc执行计划 索引使用引起索引的失效行为SQL提示覆…...

python批量解析提取word内容到excel

# 基于Python实现Word文档内容批量提取与Excel自动化存储 ## 引言 在日常办公场景中,常需要从大量Word文档中提取结构化数据并整理到Excel表格中。传统手动操作效率低下,本文介绍如何通过Python实现自动化批处理,使用python-docx和openpyxl…...

BugKu Web渗透之game1

启动场景,打开网页如下: 是一个游戏。 步骤一: 右键查看源代码也没有发现异常。 步骤二: 点击开始游戏来看看。 结果他是这种搭高楼的游戏。我玩了一下子,玩到350分就game over。 之后就显示游戏结束,如…...

使用Composer创建公共类库

概述 如果多个项目中存在使用相同类库、模块的情况,此时可以考虑将类库或者模块单独抽取出来,形成独立类库,通过composer 来进行依赖管理,这样可以更方便维护,大大提升开发效率。 优势 可以对特定模块进行统一维护和…...

Axure设计案例——科技感渐变柱状图

想让你的数据展示瞬间脱颖而出,成为众人瞩目的焦点吗?快来看看这个 Axure 设计的科技感渐变柱状图案例!科技感设计风格以炫酷的渐变色彩打破传统柱状图的单调,营造出一种令人惊叹的视觉盛宴。每一个柱状体都仿佛蕴含着无限能量&am…...

LeetCode 热题 100 394. 字符串解码

LeetCode 热题 100 | 394. 字符串解码 大家好!今天我们来探讨一道非常有趣的算法题目——LeetCode 394. 字符串解码。这道题考察了我们对栈这种数据结构的理解和应用能力,同时也涉及到了字符串的处理技巧。接下来,我将详细地为大家解析这道题…...

互联网大厂智能体平台体验笔记字节扣子罗盘、阿里云百炼、百度千帆 、腾讯元器、TI-ONE平台、云智能体开发平台

互联网大厂 字节扣子、阿里云百炼、百度千帆 、腾讯元器、TI-ONE平台、云智能体开发平台 体验 开始动手 了解 智能体,发现已经落后时代太远 光头部互联网大厂对开 公开的平台就已经这么多,可以学习和了解,相关的信息 整理了对应的平台地址…...

深入解析ReactJS中JSX的底层工作原理

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

亡羊补牢与持续改进 - SRE 的安全日志、审计与事件响应

亡羊补牢与持续改进 - SRE 的安全日志、审计与事件响应 如果说我们之前讨论的安全措施(如 IAM、网络策略、密钥管理、漏洞补丁)是为我们的“数字城堡”修筑坚固的城墙、设置精密的门锁、定期检查和修补潜在的裂缝,那么安全日志就像是遍布城堡内外的监控摄像头和出入登记簿,…...