Docker从认识到实践再到底层原理(一)|技术架构

在这里插入图片描述

前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

  • 高质量博客汇总

然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关注!

  • Docker从认识到实践再到底层原理

博客参考:比特就业课


第一章-技术架构

单机架构

简介

所有的服务都部署到一台服务器上。

简单来说,就是全部都放在一台服务器上。

在这里插入图片描述

出现原因

在互联网初期,使用量有限,一个单机服务器架构就能够满足要求。

技术案例

相关软件:

  • Web 服务器软件: Tomcat、Netty、Nginx、Apache 等

  • 数据库软件:MySQL、Oracle、PostgreSQL、SQL Server 等

架构优缺点

优势在于配置简便、开销较小,但劣势则在于会面临明显的性能限制,数据库和应用程序会相互争夺资源。

应用数据分离架构

简介

很简单,就是应用服务和数据库服务使用不同的服务器。

在这里插入图片描述

注意,数据库和应用之间多了一条线,这条线就是网络。

出现原因

由于资源竞争激烈,单机情况下可能导致网站响应速度减缓。

架构工作原理

DNS返回的是应用服务器的ip,然后应用服务器再去数据库服务里面去找。

优缺点

  • 优点:经济可控性较高,性能比单机模式好,在数据库独立隔离方面表现出色,应用故障不会对数据库造成影响,还具备一定的容错能力。

  • 缺点:硬件投入增加,性能上存在限制,难以应对大规模高并发需求。

应用服务集群架构

简介

引入了负载均衡,应用是以集群方式运作的。

在这里插入图片描述

出现原因

一台应用服务器,不能扛得住高并发,高并发的话容易崩。

架构工作原理

如示意图所展示的情景,采用多个应用服务器的布局方案,以减轻高并发压力。

**负载均衡的意义:**为了解决将用户请求分配到哪个应用服务器的问题,需要引入专用的系统组件来进行流量分发。在实际应用中,负载均衡的范围不仅仅限于应用层,还可以涵盖其他网络层。

同时,负载均衡算法有多种类型,以下是几种常见的简要介绍:

  • 轮询算法(Round-Robin): 将请求公平地依次分配给不同的应用服务器,确保公正性。
  • 加权轮询算法(Weight-Round-Robin): 根据服务器性能等因素分配不同的权重,使性能较好的服务器分配更多的请求。
  • 一致性哈希算法: 通过计算用户特征(例如 IP 地址)得到哈希值,根据哈希结果进行请求分发。这种方法的优势在于,相同用户的请求总是被分配给同一台服务器,类似于我们常见的专属客户代表服务。

这种布局的好处在于可以有效地应对高并发情况,确保系统的稳定性和响应速度。

在这里插入图片描述

DNS如何做负载均衡呢?

我们知道DNS可以通过域名返回ip地址。

比如我要访问www.taobao.com, 第一次我返回ip1,表示第一个LVS,第二次返回ip2,表示第二个LVS… 以此类推。DNS也可以完成负载均衡的工作了。

优缺点

优势:

  1. 保障应用服务的持续可用性:即便某个应用服务器发生故障,整个网站不会因此而崩溃。
  2. 具备一定的高性能表现:在无需访问数据库的情况下(如已有缓存数据),能够快速响应大量请求。
  3. 具备一定的横向扩展能力:通过横向增加服务器数量来实现系统的扩展。

劣势:

  1. 数据库性能成为瓶颈:由于只有一个数据库,当多个用户同时请求数据时,数据库可能会面临性能问题。
  2. 数据库是单一服务器的独立架构,缺乏高可用性。
  3. 增加运维负担:随着扩展部署,运维任务也增加,需要开发相应工具来解决快速部署的挑战。
  4. 需要承担较高的硬件成本。

读写分离/主从分离架构

简介

通过将数据库的读写任务分配到不同的节点上,我们建立了数据库服务器的主从集群。在这个集群中,通常会配置一个主节点和一个或多个从节点,也可以是一个主节点和多个从节点。在这种架构中,主数据库负责处理写操作,而从数据库则专注于处理读操作。

出现原因

数据库成为瓶颈的情况下,特别是在互联网应用中,读操作通常明显多于写操作。这种情况下,数据库因为处理大量读请求而承受巨大压力。因此,我们可以将读写操作分离,以应对这一挑战。

架构工作原理

在这里插入图片描述

如果是写操作,就访问主数据库,然后更改完之后,将数据同步到所有的从数据库中。

如果是读操作,就访问从数据库即可。

在这里插入图片描述

这种中间组件常见的有:MyCat、TDDL、Amoeba、Cobar 等

优缺点

优点:

  1. 数据库读取性能提升
  2. 读取被其他服务器分担,写的性能间接提升
  3. 数据库有从库,数据库的可用性能高了

缺点:

  1. 热点数据的频繁读取导致数据库负载会很高
  2. 当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致
  3. 服务器成本需要进一步增加

冷热分离架构

简介

引入缓存,实行冷热分离,将热点数据放到缓存中快速响应

出现原因

海量的请求导致数据库负载过高,站点响应再度变慢。

架构工作原理

热点数据直接找缓存,不要去找数据库了。

在这里插入图片描述
在这里插入图片描述

写入的时候缓存和数据库都要写入!而且只能保证同时成功或者同时失败(软件可以做到)

读取的时候,如果缓存中有就直接在缓存中读,如果没有,就去数据库读。

架构优缺点

优势:

  1. 明显提升性能:通过分离读写操作,显著减轻了对数据库的访问负担。

缺陷:

  1. 引发缓存相关问题:此举可能导致一致性问题、缓存击穿、缓存失效以及缓存雪崩等困扰。
  2. 增加服务器开销:实施该策略可能需要投入更多成本用于服务器设备。
  3. 业务规模扩大后可能遇到问题:随着业务体量增大,数据量持续增加,可能导致数据库规模过大,单个表数据过于庞大,从而影响查询性能,使数据库再次成为瓶颈。

垂直分库架构(分布式数据库架构)

简介

数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解成分布式数据库架构。

出现原因

上面提到的单机的写库会逐渐达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式。

架构工作原理

什么是分库分表

在这里插入图片描述

如图所示。

分布式数据库架构

在这里插入图片描述

优缺点

优点:

  1. 数据库吞吐量大幅提升,不再是瓶颈

缺点:

  1. 跨库join、分布式事务等问题,需要解决。目前的mpp都有对应的解决方案。
  2. 数据库和缓存结合目前能够扛住海量的请求,但是应用的代码整体耦合在一起,修改一行代码需要整体重新发布。

微服务架构

简介

微服务是一种架构风格,按照业务板块来划分应用代码,使单个应用的职责更加清晰,相互之间可以做到独立升级迭代。

出现原因

  1. 扩展困难:系统无法轻松扩展,因为每次需要更新应用程序时,必须重新构建整个系统。
  2. 持续开发受阻:即使是微小的代码更改,也必须重新部署整个应用,难以频繁、轻松地发布新版本。
  3. 不可靠性:即便系统的某个功能出现故障,也可能导致整个系统崩溃。
  4. 缺乏灵活性:不支持使用不同的技术构建单一应用程序。
  5. 代码维护困难:所有功能都紧密耦合在一起,使得接管这段代码的人难以找到改进的切入点。

架构工作原理

在这里插入图片描述

在这里插入图片描述

优缺点

优势:

  1. 高度灵活性:每个服务都能独立地经受测试、部署、升级和发布。
  2. 独立可扩展性:每个服务都能独自进行扩展,不会影响其他服务。
  3. 提升容错能力:一个服务出现问题不会导致整个系统崩溃。

劣势:

  1. 复杂运维:随着业务的不断发展,应用和服务的数量增多,部署变得更加复杂。
  2. 资源需求增加:每个独立运行的微服务都需要占用一定资源。
  3. 故障排查难度增加:由于一个请求可能需要多个服务调用,故障排查变得困难,需要查看不同服务的日志来定位问题。

容器编排架构

简介

借助容器化技术(如docker)将服务/应用打包成镜像,通过容器编排工具(如k8s)来动态分发和部署镜像。服务以容器化方式运行。

出现原因

  1. 微服务拆分细,服务多部署工作量大,而且配置复杂,容易出错。
  2. 微服务数量多扩容麻烦,而且容易出错,每次缩容然后扩容后重新配置服务对应的环境参数信息,很复杂。
  3. 微服务至今啊运行环境可能冲突,需要更多的资源来进行部署或者通过修改配置来解决冲突。

架构工作原理

在这里插入图片描述

在这里插入图片描述

优缺点

优势:

  1. 快速部署、轻松运维:使用简单的命令即可完成数百个服务的部署或扩缩容操作。
  2. 强大隔离性:容器之间在文件系统、网络等方面具有高度隔离性,避免了环境冲突问题。
  3. 便捷滚动更新:通过单一命令实现不同版本的切换,支持轻松的滚动更新。

劣势:

  1. 技术栈复杂化,对研发团队的要求较高。
  2. 需要自行管理机器资源:在非高峰时段可能需要闲置大量机器资源来备战高峰期,这带来了机器成本和运维成本上的挑战。为解决这个问题,可考虑采购云服务商提供的服务器资源。

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

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

相关文章

多张图片转为pdf怎么弄?

多张图片转为pdf怎么弄?在网络传输过程中,为了避免图片格式文件出现差错,并确保图片的清晰度和色彩不因不同设备而有所改变,常见的做法是将图片转换为PDF格式。然而,当涉及到多张图片时,逐一转换将会变得相…

MybatisPlus入门

MybatisPlus入门 1.MyBatis-Plus1.1 ORM介绍1.2 MyBatis-Plus介绍 2.代码链接数据库2.1 创建项目2.2 添加依赖2.3 链接数据库2.3.1 准备数据库2.3.2 链接数据库2.3.3 创建实体类 2.4 创建Mapper层2.5 创建Controller层2.6 浏览器访问测试 MybatisPlus官方网站: 官网…

微信8.0.41更新来了,看看有哪些变化吧

微信给我们带来了极大的方便,无论是日常聊天还是工作沟通,几乎离不开它。 时不时会给我一种熟悉的陌生感。 这个功能,好像我之前是没见过的。 就比如公众号信息流,刷着刷着就会发现,怎么会有看一看的信息推流会突然出现…

pytest pytest.ini 配置日志输出至文件

创建pytest.ini 文件 [pytest] log_file pytest_log.txt log_file_level INFO log_file_date_format %Y-%m-%d %H:%M:%S log_file_format %(asctime)s | %(filename)s | %(funcName)s | line:%(lineno)d | %(levelname)s | %(message)s import pytest import loggingdef …

【Linux】线程安全-互斥同步

文章目录 线程安全问题的引入线程互斥互斥概念互斥锁互斥锁的计数器当中如何保证原子性互斥锁基础API初始化互斥锁变量函数动态初始化静态初始化 加锁函数阻塞加锁非阻塞加锁带有超时时间的加锁 解锁函数销毁互斥锁函数 线程同步线程同步的必要性条件变量条件变量的使用原理条件…

从零开始的Hadoop学习(五)| HDFS概述、shell操作、API操作

1. HDFS 概述 1.1 HDFS 产出背景及定义 1)HDFS 产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切 需要一种系统来管理多台机器上的…

基于飞腾芯片的设计与调试入门指导

一、啥是自主可控 国产CPU现在厂家细算起来其实有很多,现在华为、小米也在做自己的CPU,瑞芯微、全志等的SoC现在也是广泛应用。但是真正能叫做自主可控的CPU厂商,只有6家。那啥是自主可控?首先来不严谨的讲下现在数字芯片是怎么做的设计。FPGA大家都知道,可以通过Verilog…

SOD-123FL贴片整流二极管,有哪些型号?

近日发现,客户对整流二极管的需求特别大。常有客户前来东沃电子咨询整流二极管型号参数、选型、替代、价格、交期、样品等方面的问题。那么,关于DS1A、DS1B、DS1D、DS1G、DS1J、DS1K、DS1M贴片整流二极管,您知道多少呢?东沃电子推…

【微服务部署】06-日志集成

文章目录 1. EFK日志三件套集成1.1 核心组件1.2 部署 2. Exceptionless日志系统2.1 Exceptionless核心特性2.2 Exceptionless部署文件2.3 K8s中使用Exceptionless 1. EFK日志三件套集成 1.1 核心组件 Elasticsearch(存储)Fluentd(收集器&am…

W5100S-EVB-PICO主动PING主机IP检测连通性(十)

前言 上一章节我们用我们开发板在UDP组播模式下进行数据回环测试,本章我们用开发板去主动ping主机IP地址来检测与该主机之间网络的连通性。 什么是PING? PING是一种命令, 是用来探测主机到主机之间是否可通信,如果不能ping到某台…

LeetCodeHot100python版本:单调栈,栈,队列,堆

单调栈 739. 每日温度 42. 接雨水 双指针 单调栈(横向求解) ​​​​​​84. 柱状图中最大的矩形 栈和队列 队列:先入先出 栈:先入后出 两个栈 模拟 队列 一个队列 可以模拟 栈 20. 有效的括号 ​​​​​​155. 最小栈 394. 字符串解码 堆 215. 数组中的第K个最大元素 (…

STM32 Cubemx 同名外设中断及回调

文章目录 前言示例工程个人理解 前言 最近在学习STM32,采用HAL库开发方式。记录一下同名外设中断及回调。 这里提及的同名外设指USART1/2之类的相同外设,但不是同一个instance。 示例工程 以使用cubemx配置两个同名外设EXTI0/EXT4为例。 在NVIC配置…

JS三座大山 —— 原型和原型链

系列文章目录 内容链接2023前端面试笔记HTML52023前端面试笔记CSS3 文章目录 系列文章目录前言一、原型是什么?二、原型链是什么?2.1 原型链全方面解析2.2 为什么构造函数也有原型? 总结 前言 理解原型和原型链可以帮助我们更好地理解 Java…

传统分拣弊端明显,AI机器视觉赋能物流行业包裹分类产线数智化升级

随着电子商务的快速发展,物流行业的包裹数量持续增长,给物流企业带来了巨大的运营压力。目前,国内大型物流运转中心已开始采用机器视觉自动化设备,但多数快递公司处于半自动化状态,中小型物流分拣中心目前仍靠人工录入…

每日一题——旋转图像

旋转图像 题目链接 方法一:利用辅助数组 通过对示例的观察和分析,我们可以得到这样的结论: 对于原数组的下标为i行元素,顺时针旋转九十度后,都变成了下标为(n-1-i)列元素。如图所示&#xff…

代替forever下一个部署node的持久化工具---pm2

最近有个后端项目,用的是node,在持久化的时候会挂掉,详细了解到用的是nohup,然后先详细了解了一下nohup nohup是一个Linux命令,用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行1nohup的英文全称…

基于RabbitMQ的模拟消息队列需求文档

文章目录 一、项目背景二、需求分析1.核心概念2.BrokerServer核心组件3.核心API4.交换机类型5.持久化6.网络通信7.消息应答 三、消息队列模块划分 一、项目背景 什么是消息队列? 消息队列就是,基于阻塞队列,封装成一个独立的服务器程序&#…

Nginx百科之gzip压缩、黑白名单、防盗链、零拷贝、跨域、双机热备

引言 早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业…

three.js渲染带动画的glb文件

1. 准备工作 将下列文件在three.js的包中找到,注意的是我这里使用的是模块化版本的,这里不知道模块化的,可以先去看一下es6的模块化。 控制器: OrbitControls.js 加载器:GLTFLoader.js 材质: RoomEnvironm…

数据时代的必备利器:数据可视化工具的崭新价值

在当今信息时代,数据扮演着越来越重要的角色,而数据的可视化呈现正是一种强大的工具,能够帮助我们更好地理解和利用这些数据。虽然Excel和PPT在处理数据方面有着不可否认的作用,但在处理大规模、复杂数据时,数据可视化…