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><…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
