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><…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
在Spring Boot中集成RabbitMQ的完整指南
前言 在现代微服务架构中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件,支持多种消息协议,具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...
MLP实战二:MLP 实现图像数字多分类
任务 实战(二):MLP 实现图像多分类 基于 mnist 数据集,建立 mlp 模型,实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入,可视化图形数字; 2、完成数据预处理:图像数据维度转换与…...
SQLSERVER-DB操作记录
在SQL Server中,将查询结果放入一张新表可以通过几种方法实现。 方法1:使用SELECT INTO语句 SELECT INTO 语句可以直接将查询结果作为一个新表创建出来。这个新表的结构(包括列名和数据类型)将与查询结果匹配。 SELECT * INTO 新…...
day51 python CBAM注意力
目录 一、CBAM 模块简介 二、CBAM 模块的实现 (一)通道注意力模块 (二)空间注意力模块 (三)CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...
Redis专题-实战篇一-基于Session和Redis实现登录业务
GitHub项目地址:https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码:e34399f 基于Redis实现登录业务提交版本码:60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...
