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

news2025/1/18 20:27:19

在这里插入图片描述

前言

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

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

  • 高质量博客汇总

然后就是博主最近最花时间的一个专栏《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.coloradmin.cn/o/943861.html

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

相关文章

数字孪生:重塑政府决策与公共服务

在之前的文章中为大家分享了数字孪生在很多行业的应用场景,本文和大家一起探讨一下数字孪生在政务管理方面能有哪些应用,以及其对公共服务提供的积极影响。 1)城市规划方面 数字孪生技术可用于模拟城市的发展和规划。政府可以建立城市的虚拟…

Promise构造函数,属性以及方法应用

&#xff08;一&#xff09;promise构造函数 <script type"text/javascript">const myPromise new Promise((resolve, reject) > {setTimeout(() > {resolve(foo)},300)})myPromise.then((value) > {console.log(value,value)}).catch((err) > {…

2023蓝帽杯初赛ctf部分题目

Web LovePHP 打开网站环境&#xff0c;发现显示出源码 来可以看到php版本是7.4.33 简单分析了下&#xff0c;主要是道反序列化的题其中发现get传入的参数里有_号是非法字符&#xff0c;如果直接传值传入my_secret.flag&#xff0c;会被php处理掉 绕过 _ 的方法 对于__可以…

蓝牙模块产品认证-国际市场准入准则之加拿大IC认证基础知识

蓝牙模块产品认证-国际市场准入准则之加拿大IC认证基础知识 一&#xff1a;前言加拿大IC介绍 1.1&#xff1a;IC更名 2016年3月加拿大工业部(IC, Industry Canada)正式更名为加拿大创新、科学和经济发展 部(ISED, Innovation, Science and Economic Development Canada) ISED…

客观-【2 线性表】

关键字&#xff1a; 求一阶导数、建立有序单链表时间复杂度、静态链表的指针、链表查找数据x的序号

五、升压电路boost

开关导通时&#xff1a;输入电压对电感充电&#xff0c;形成回路&#xff0c;vi—>电感L—>开关管q&#xff1b; 开关断开时&#xff1a;输入的能量和电感能量一起向负载提供能量&#xff0c;形成回路&#xff0c;Vi—>L—>D—>C—>RL&#xff0c;因此输出电…

R语言APRIORI关联规则、K-MEANS均值聚类分析中药专利复方治疗用药规律网络可视化...

全文链接&#xff1a;http://tecdat.cn/?p30605 应用关联规则、聚类方法等数据挖掘技术分析治疗的中药专利复方组方配伍规律&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 方法检索治疗中药专利复方&#xff0c;排除外用中药及中西药物合用的复方。最近我们…

前端 -- 基础 VSCode 工具生成骨架标签新增代码 解释详解

目录 文档类型声明标签 Lang 语言种类 字符集 文档类型声明标签 <!DOCTYPE> 文档类型声明&#xff0c;作用就是告诉浏览器 当前的页面是 使用哪种 HTML 版本 来显示的网页 HTML 版本也很多呀 &#xff0c;比如 &#xff1a; HTML5 ,HTML4&#xff0c;XHTML 等…

Android 手游聚合SDK小知识(一)

前言 回头想想&#xff0c;在安卓游戏SDK这个领域&#xff0c;我也呆了4年了&#xff0c;从啥都不懂的小菜鸟&#xff0c;逐渐靠自己不断学习&#xff0c;对这个行业也算有了一些理解&#xff0c;趁着最近有空&#xff0c;我想了一下&#xff0c;还是把最近这几年对游戏SDK聚合…

.jar中没有主清单属性【已解决】

原因 对jar解压缩&#xff0c;可以看到有一个MANIFEST.MF文件&#xff0c;此文件就是jar运行时要查找的清单目录。 主清单数据&#xff0c;就是我们要运行的主类即程序入口&#xff0c;缺少主清单属性&#xff0c;就不知道从哪开始运行。 因此我们需要对项目进行配置&#xff…

华为数通方向HCIP-DataCom H12-821题库(单选题:161-180)

第161题 以下关于 URPF(Unicast Reverse Path Forwarding) 的描述&#xff0c; 正确的是哪一项 A、部署了严格模式的 URPF&#xff0c;也能够可以同时部署允许匹配缺省路由模式 B、如果部署松散模式的 URPF&#xff0c;默认情况下不需要匹配明细路由 C、如果部署松散模式的…

[java基础知识复习] Java基础知识总结分享一

写代码&#xff1a; 1&#xff0c;明确需求。我要做什么&#xff1f; 2&#xff0c;分析思路。我要怎么做&#xff1f;1,2,3。 3&#xff0c;确定步骤。每一个思路部分用到哪些语句&#xff0c;方法&#xff0c;和对象。 4&#xff0c;代码实现。用具体的java语言代码把思路…

蓝牙模块产品认证-国际市场准入准则之欧美CE认证基础知识

蓝牙模块产品认证-国际市场准入准则之欧美CE认证基础知识 一&#xff1a;前言欧盟市场准入介绍 1.1&#xff1a;CE适用范围 欧盟(EU : European Union)有27成员国、其中大家熟知的国家有法国、德国、意大利、奥地利匈牙利、荷兰、波兰、西班牙、葡萄牙、希腊、丹麦、瑞典、比利…

接地气的开源读书讨论会!KCC@广州首次活动圆满结束

前期推文链接&#xff1a;KCC广州开源读书会&广州开源建设讨论会 More 2023 年 8 月 20 日&#xff0c;KCC广州在暨南大学石牌校区成功举办了其首场读书会 & 开源讨论会。这标志着 KCC广州首次正式步入公众视野&#xff0c;开展开源交流活动。 开源社副执行长、KCC广州…

信驰达CC2340系列低功耗蓝牙模块选型指南

自信驰达发布基于TI最新一代芯片研发的CC2340系列低功耗蓝牙模块后&#xff0c;您可能需要了解该系列模块之间有何差异&#xff0c;对您的项目来说&#xff0c;哪个模块最匹配且最有竞争力&#xff1f;本篇我们将对信驰达科技CC2340家族无线模块作对比分析&#xff0c;希望可以…

Ubuntu下安装nginx服务,实现通过URL读取ubuntu下图片

1.安装nginx包 sudo apt update sudo apt install nginx 2.安装完成后系统自动启动nginx sudo systemctl status nginx 查看nginx服务的状态 3.开启防火墙上的HTTP服务端口80 sudo ufw allow ‘Nginx HTTP’ 4.在浏览器输入 http://localhost 看到nginx的欢迎界面&#xff0c;…

C语言 - 结构体、结构体数组、结构体指针和结构体嵌套

结构体的意义 问题&#xff1a;学籍管理需要每个学生的下列数据&#xff1a;学号、姓名、性别、年龄、分数&#xff0c;请用 C 语言程序存储并处理一组学生的学籍。 单个学生学籍的数据结构&#xff1a; 学号&#xff08;num&#xff09;&#xff1a; int 型姓名&#xff08;…

【Day-22慢就是快】代码随想录-栈与队列-前K个高频元素

给定一个非空的整数数组&#xff0c;返回其中出现频率前 k 高的元素。 示例 1: 输入: nums [1,1,1,2,2,3], k 2输出: [1,2] 示例 2: 输入: nums [1], k 1输出: [1] ———————————————————————————————————————— 这道题目主要涉…

一文解析:共享WiFi项目到底怎么样呢?

大家都知道&#xff0c;现代社会已经离不开互联网的便利&#xff0c;而WiFi的普及更是提升了人们的生活质量和工作效率。然而&#xff0c;面对庞大的用户群体和不断增长的网络需求&#xff0c;无论人们到哪都是习惯性的连接上wifi。而共享WiFi的出现&#xff0c;正是满足了大众…

AtCoder Beginner Contest 317(D-G)

D - President (atcoder.jp) &#xff08;1&#xff09;题目大意 &#xff08;2&#xff09;解题思路 考虑到z最大不超过1e5&#xff0c;N最多不超过100&#xff0c;因此可以考虑用背包来写&#xff0c;dp[j]表示拿高桥拿j分最少需要花费多少个选民转换&#xff0c;最后把答案取…