Docker:技术架构演进
文章目录
- 基本概念
- 架构演进
- 单机架构
- 应用数据分离架构
- 应用服务集群架构
- 读写分离/主从分离架构
- 冷热分离架构
- 垂直分库
- 微服务
- 容器编排架构
本篇开始进行对于Docker的学习,Docker是一个陌生的词汇,那么本篇开始就先从技术架构的角度出发,先对于技术架构有一个基本的认识
基本概念
- 应用和系统:为了完成一整套服务的一个程序或者是一组相互配合的程序
- 模块和组件:当应用量比较庞大时,会把整个目标划分为多个模块和组件
- 分布式:系统中的多个模块被部署到不同的服务器上,那这样就可以叫做是分布式系统,换句话说,比如平时的web服务器和数据库放在不同的服务器上,那这就是一个分布式的系统
- 集群:部署在多个服务器上,为了实现一个特定功能的组件,那这个整体就被叫做是集群,比如MySQL会工作在不同的服务器上,一起来进行数据库的服务目标,这样就可以被叫做是一组数据库集群
- 中间件:一类提供不同应用程序用户相互通信的软件,也就是说是不同技术工具或者是数据库之间的桥梁,这种就是中间件
- 容器:可以让开发者把应用以及依赖放到一个可以移植的镜像中,发布到各种操作系统的机器上,实现出一个虚拟化的功能
- 容器编排:这是一个用于进行管理云平台上多个主机上的容器化的应用,可以让部署容器化的应用更加简单高效
架构演进
现在假设做了一个项目,这个项目会随着时间的推移不断复杂,那么就需要不断的更换架构
单机架构
在项目的最初期,由于工程量比较小,所以使用最基础的内容就可以了,因此,使用普通的基础的单机架构即可:

这也是最基础的架构,把所有的内容都放到了单机服务器上
应用数据分离架构
随着工程的升级,此时随着数据越来越多,原来的单机服务器已经不能够满足日常的需求了,因此就要想办法降低这个单机服务器上的数据量,因此就采取出了应用数据分离架构

这种架构模式也比较简单,直接把应用的数据存储在了应用服务器上,而把存储的内容数据,放到了存储服务器上,其实也就是把数据库服务部署在了一个存储服务器上
应用服务集群架构
随着用户的继续增长,数据量变得更多了,此时单台的应用服务器已经不能够满足日常的需求了,因此现在又要进行升级技术,下面给出两种方案:
- 垂直扩展:购买更加优秀的应用服务器来进行应对这种更多的流量,优点是直接把项目换个机器部署即可,但是缺点是价格比较昂贵
- 水平扩展:把软件的架构进行调整,增加应用层的硬件,把用户的流量分担到不同的应用服务器中,从而增加系统的承载能力,这样的方案优势是可以控制成本,提升空间大,但是缺点是需要技术的支持,因为直接相当于更换了一种存储模式
之后,这个项目采取了一个水平扩展的方案,引入了一个负载均衡的方案,把用户的流量合理的分发到了不同的应用服务器上,当然这也需要一个专门的系统组件,叫做流量分发,实际的负载均衡不仅仅说的是工作在应用层的是负载均衡,在网络层的也可能是负载均衡
下面是这种模式下的架构图:

读写分离/主从分离架构
在把用户的请求通过负载均衡发送到不同的应用服务器后,确实可以进行并行处理很多的问题了,并且随着用户的增长还可以使用扩张服务器的方法来进行压力的缓解,但是现在的问题是,不管扩展多少个服务器,这些请求都会从数据库来进行读写数据,这就导致数据库的压力会很大,那么如何解决数据库压力大的问题?
如果想要使用扩展数据库的方法来解决,其实是不可以的,因为数据是需要保持一致性的,采取多个数据库服务器,会导致整体上的数据一致性不能得到合理的保证,因此引入了一个主从服务器的概念
保留一个主要的数据库作为写入数据库,而其他的数据库都是从属数据库,从库的所有数据都来自于主库的数据,经过同步之后,从库可以维护着和主库一样的数据,为了分担数据库的压力,可以把数据的请求全部给主库来进行处理,但是读取的数据请求分散到从库中,这样就会导致压力进一步的减少,达到一个缓解的目的
下面是这种架构的模式图:

冷热分离架构
随着访问量的继续增加,就会发现业务中的一些数据的读取频率是要比其他数据的要高的,那么这些数据就被叫做是热点数据,对于热点数据来说,可以把其缓存起来,这样就可以减少访问数据库的次数,比如前面用过的Redis就是这样达到原理

垂直分库
随着业务的增加,大量的数据存储在一个库中是不可行的,一个主数据库已经完成不了这么多的数据了,因此就可以把数据进行分别存储,比如对于评论和数据,可以进行商品ID的hash,分别存储到不同的库中即可,具体的模式图如下所示:

微服务
随着项目的持续增加,整个项目可能会有很多个模块来组成,因此就需要把业务分发给不同的开发团队来进行维护,每个团队独立实现自己的微服务,相互之间对数据的直接访问进行隔离,总体来说就是可以进行一些相互之间的调用关联等:

容器编排架构
系统的资源利用率其实在上述的架构中是不高的,为什么这样说?因为有很多的资源是用来应对短时的高并发,而很多的资源在正常情况下都是用不到的,那这样的问题如何解决?容器化技术就带来了解决方案
目前最为流行的容器化技术就是Docker了,容器管理服务是K8S,可以把应用服务打包为一个Docker镜像,使用K8S来进行动态的分发和镜像的部署,Docker的镜像可以理解为是一个能够运行你的服务的最小的一个操作系统,里面放的是其对应的数据,那么把整个操作系统打包wield一个镜像之后,就可以分发到对应的机器上,直接启动这个Docker的镜像,就可以把服务打包起来,使得服务部署变得轻松简单
在实际的使用中可能还会有生产和研发的K8S集群,这样的集群不会公用,会有对应的研发和测试集群等

至此,一个高可用,高并发的系统模型就这样诞生了
相关文章:
Docker:技术架构演进
文章目录 基本概念架构演进单机架构应用数据分离架构应用服务集群架构读写分离/主从分离架构冷热分离架构垂直分库微服务容器编排架构 本篇开始进行对于Docker的学习,Docker是一个陌生的词汇,那么本篇开始就先从技术架构的角度出发,先对于技术…...
汽车MCU虚拟化--对中断虚拟化的思考(2)
目录 1.引入 2.TC4xx如何实现中断虚拟化 3.小结 1.引入 其实不管内核怎么变,针对中断虚拟化无非就是上面两种,要么透传给VM,要么由Hypervisor统一分发。汽车MCU虚拟化--对中断虚拟化的思考(1)-CSDN博客 那么,作为车规MCU龙头…...
python的继承
本章正式开始之前,先让我们回顾一下什么是 对象 ? 什么是 类 ? 小贝 喜欢 猫咪,今年领养了一只名叫 Kitty 的 布偶猫。则下列哪项是 对象 呢? A. 猫咪 B. Kitty C. 布偶猫 相比之下,闻闻 更喜欢 犬科 动…...
组件的注册和引用
在Vue中,开发者可以将页面中独立的、可重用的部分封装成组件,对组件的结构,样式和行为进行设置。组件是 Vue 的基本结构单元,组件之间可以相互引用。 一.注册组件 当在Vue项目中定义了一个新的组件后,要想在其他组件中…...
诊所如何赢得患者?做好这两点很关键!
大家都知道,社区周边的诊所原本是居民看病的第一选择,方便又快捷。但现在很多诊所服务都差不多,没有自己的特色,这就让患者有点难选择了。那诊所怎么做才能更吸引患者呢?其实,关键是要抓住患者的心…...
Qwen2本地部署的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
html+CSS+js部分基础运用15
1、完成输入框内容的实时反向输出。 2、银行账户余额变动自动通知项目。 设计要求:单击按钮后,余额按照输入框的数额减少,同时将按钮式的提示信息(金额)同步改变。利用侦听属性实现余额发生变化时发出提示信息&#x…...
从零开始学JAVA
一、编写Hello world程序 public class JavaMain1 {//主程序执行入口,main方法public static void main(String[] args){System.out.println("Hello world!");} } 运行结果 Hello world! java编写主程序常见错误: 1、System ---首字母没有…...
MySQL(四)查询
1、MySQL限性约束 —非空、唯一(自增)、主外键、检查(MySQL存在但是不能用)。 约束主要完成对数据的校验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。 1)常用五类约束 not null :非空约束,指定某列不为空。 unique:唯一约束,指定某列和几列组…...
嵌入式学习——网络编程(TCP)——day31
1. TCP和UDP的区别 TCP(Transmission Control Protocol,传输控制协议) UDP(User Datagram Protocol,用户数据报协议) 1.1 连接方式 TCP 是面向连接的协议,它在数据传输前需要通过三次握手建立…...
[STM32]定位器与PWM的LED控制
目录 1. 深入了解STM32定时器原理,掌握脉宽调制pwm生成方法。 (1)STM32定时器原理 原理概述 STM32定时器的常见模式 使用步骤 (2)脉宽调制pwm生成方法。 2. 实验 (1)LED亮灭 代码 测试效果 (2)呼吸灯 代码 测试效果 3.总结 1. 深入了解STM32定时器原…...
可视化数据科学平台在信贷领域应用系列五:零代码可视化建模
信贷风控模型是金融机构风险管理的核心工具,在信贷风险管理工作中扮演着至关重要的角色。随着信贷市场的环境不断变化,信贷业务的风险日趋复杂化和隐蔽化,开发和应用准确高效的信贷风控模型显得尤为重要。信贷风险控制面临着越来越大的挑战和…...
Windows 11广告植入“另辟蹊径”:PC Manager暗示若不使用必应搜索,你的系统可能需要“修复”
Edge浏览器近期增添了许多实用的新功能,如侧边栏、休眠标签页和沉浸式阅读器。话虽如此,浏览器中仍有一部分功能被部分用户视为“冗余软件”和不必要的累赘。 随着Windows 11用户逐渐习惯操作系统关键位置出现越来越多的广告,微软似乎正尝试以…...
一线教师教学工具汇总
亲爱的教师们!我们的教学工具箱里也该更新换代啦!今天,就让我来给大家安利一波超实用的教学神器: 百度文库小程序 —— 在线图书馆 百度文库,一个宝藏级的在线文档分享平台!在这里,你可以找到海…...
【数据结构】栈和队列-->理解和实现(赋源码)
Toc 欢迎光临我的Blog,喜欢就点歌关注吧♥ 前面介绍了顺序表、单链表、双向循环链表,基本上已经结束了链表的讲解,今天谈一下栈、队列。可以简单的说是前面学习的一特殊化实现,但是总体是相似的。 前言 栈是一种特殊的线性表&…...
一篇教会你CSS定位
前言:在网页布局的时候,我们需要将想要的元素放到指定的位置上,这个时候我们就可以使用CSS中的定位操作。 先让我们看一下本篇文章的大致内容: 目录 什么是定位 1.相对定位 2.绝对定位 3. 固定定位 4. 粘性定位 5. 定位层级…...
Hive的常规操作
Hive常规操作 hive常用交互命令 -e执行sql语句 [rootmaster ~]# hive -e "show databases";-f执行sql脚本 [rootmaster ~]# hive -f /usr/local/demo.sql查看hive中输入的所有命令 [rootmaster ~]# cat ~/.hivehistory操作库 创建库 语法: create…...
redis做为缓存,mysql的数据如何与redis进行同步呢?
让我们一步步来实现如何让MySQL数据库的数据和Redis缓存保持同步。想象一下,MySQL是一个大仓库,存放着所有重要的货物(数据),而Redis则像是一个快速取货窗口,让你能更快拿到常用的东西。为了让两者保持一致…...
【Map】集合总结
一、Map 之前学习的Collection集合体系是单列集合,即一次存取一个元素 Map是双列集合,一次存取一对元素,这一对儿称为键值对,key-value,且key是映射到value 所谓键映射到值,是指只能通过键找到值,无法通过值找键 Map中键不能重复!值允许重复 Map中一个键,只能对应一个值 Ma…...
SpringBoot实现发送邮件功能
目录 一、开启邮件服务 二、导入pom依赖 三、配置yml文件 四、发送邮件 4.1、发送文字邮件 4.2、发送html邮件 4.3、发送附件邮件 4.4、发送图片邮件 一、开启邮件服务 这里拿QQ邮箱举例。 翻到下面进行开启,之后获取授权码。 二、导入pom依赖 <dependency><…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
C# WPF 左右布局实现学习笔记(1)
开发流程视频: https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码: GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用(.NET Framework) 2.…...
ABAP设计模式之---“Tell, Don’t Ask原则”
“Tell, Don’t Ask”是一种重要的面向对象编程设计原则,它强调的是对象之间如何有效地交流和协作。 1. 什么是 Tell, Don’t Ask 原则? 这个原则的核心思想是: “告诉一个对象该做什么,而不是询问一个对象的状态再对它作出决策。…...
Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集
目录 一、引言:当爬虫遭遇"地域封锁"二、背景解析:分布式爬虫的两大技术挑战1. 传统Scrapy架构的局限性2. 地域限制的三种典型表现 三、架构设计:Scrapy-Redis 代理池的协同机制1. 分布式架构拓扑图2. 核心组件协同流程 四、技术实…...
