当前位置: 首页 > news >正文

Docker之技术架构【八大架构演进之路】

Docker之技术架构

  • 1. 八大架构演进之路
    • 1.1 单机架构
    • 1.2 应用数据分离架构
    • 1.3 应用服务集群架构
    • 1.4 读写分离架构
    • 1.5 冷热分离架构
    • 1.6 垂直分库架构
    • 1.7 微服务架构
    • 1.8 容器编排架构(docker出现)
  • 2. 一个互联网实战架构


本章意在让大家了解Docker出现的历史原因,从宏观上认识Docker以及Docker在架构中起到的作用。


1. 八大架构演进之路


1.1 单机架构


1. 简介

  • 应用服务和数据库服务共用一台服务器。

2. 出现原因

  • 出现在互联网早期,访问量比较小,单机足以满足需求。

3. 架构工作原理

在这里插入图片描述

4. 技术案例

  • 用户通过浏览器或app,访问对应服务器。先输入网址www.taobao.com,之后通过DNS解析,找到服务器ip地址。之后请求通过Tomcat客户端,转发给数据库端MySQL。拿到数据后,原路返回给用户,返回的时候不用再经过DNS了。

在这里插入图片描述
5. 优缺点

  • 优点:
    • 部署简单,成本低。
  • 缺点:
    • 存在严重的性能瓶颈;
    • 数据库和应用互相竞争资源。

1.2 应用数据分离架构


1. 简介

  • 应用服务和数据库服务使用不同的服务器。

2. 出现原因

  • 单机存在严重的资源竞争,导致站点变慢。

3. 架构工作原理

在这里插入图片描述

4. 技术案例

在这里插入图片描述

5. 优缺点

  • 优点:
    • 成本相对可控;
    • 性能比单机有提升;
    • 数据库单独隔离,不会因为应用把数据库搞坏,有一定的容灾能力。
  • 缺点:
    • 硬件成本变高;
    • 性能有瓶颈,无法应对海量并发。

1.3 应用服务集群架构


1. 简介

  • 引入了负载均衡,应用以集群方式运行。

2. 出现原因

  • 单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢。

3. 架构工作原理

  • 通过调整软件架构,增加应用层硬件,将用户流量分担到不同的应用层服务器上,来提升系统的承载能力。

在这里插入图片描述

4. 技术案例

  • 本例中,负载均衡层一共有三层,分别是DNS,LVS/F5,Nginx。Nginx是软件实现的,最高支持万级左右的高并发。LVVS/F5则是硬件实现的,性能更高,最高支持百万级左右的高并发。DNS本身也有并发功能,可以达到亿万级。
  • 如果并发量高到连DNS层的并发都无法满足了,还可以向上找到浏览器、APP,让用户在本地就配置好分配的ip,绕过DNS直接访问服务器。

在这里插入图片描述

软件设计哲学:

  • 一个人搞不定,喊兄弟过来(横向扩展Tomcat);
  • 没有什么是加一层解决不了的。

5. 优缺点

  • 优点:
    • 应用服务高可用,不会一个服务出问题,整个站点挂掉;
    • 应用服务具备一定高性能,如果不访问数据库,应用相关处理通过扩展可以支持海量请求快速响应;
    • 应用服务有一定扩展能力,支持横向扩展。
  • 缺点:
    • 数据库成为性能瓶颈,无法应对数据库的海量查询;
    • 数据库只有一个,一旦挂掉整个系统就挂掉了,容错率低;
    • 运维工作增多,扩展后部署运维工作增多,需要开发对应的工具应对快速部署;
    • 硬件成本较高。

1.4 读写分离架构


1. 简介

  • 将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从、一主多从都可以。数据库主机负责写操作,从机只负责读操作。

2. 出现原因

  • 数据库成为瓶颈,而互联网应用一般读多写少,数据库承载压力大,主要是由这些读的请求造成的,那么我们可以把读操作和写操作分开。

3. 架构工作原理

在这里插入图片描述

4. 技术案例

  • 对于写入操作,由主数据库先执行,之后再通过主数据库同步到从数据库。读取操作直接由从数据库执行即可。
  • 主从数据库的分配,以及从数据库的并发调度,由mycat, tddl中间层实现。

在这里插入图片描述

5. 优缺点

  • 优点:
    • 数据库的读取性能提升;
    • 读取被其他服务器分担,写的性能间接提升;
    • 数据库有从库,数据库的可用性提高了。
  • 缺点:
    • 热点数据的频繁读取导致数据库负载很高;
    • 当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致;
    • 服务器成本需要进一步增加。

1.5 冷热分离架构


1. 简介

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

2. 出现原因

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

3. 架构工作原理

在这里插入图片描述

4. 技术案例

  • 缓冲区可以采用Redis实现;
  • 用户发送写入请求,经过一层一层转化,先访问到了Redis,向缓冲区写入。之后再由缓冲区向数据库写入;
  • 用户发送读取请求,经过一层一层转化,先访问Redis,如果请求的数据在缓冲区中,则直接从缓冲区读走数据,返回给用户;如果缓冲区中没有请求的数据,则要去数据库查找数据,返回。

在这里插入图片描述

5. 优缺点

  • 优点:
    • 大幅降低对数据库的访问请求,性能提升非常明显。
  • 缺点:
    • 带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题;
    • 服务器成本需要进一步增加;
    • 业务体量支持变大后,数据不断增加,数据库单库太大,单个表体量也太大,数据查询会很慢,导致数据库再度成为系统瓶颈。

1.6 垂直分库架构


1. 简介

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

2. 出现原因

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

3. 架构工作原理

在这里插入图片描述

4. 技术案例

  • 采用分库分表的方式,实现该架构:

在这里插入图片描述

  • 直接使用分布式数据库,实现该架构:
    • 使用Redis Cluster缓存集群;
    • 使用现成的分布式数据库Greenplum、TiDB、Postgresql XC、HAWQ 等。

在这里插入图片描述

5. 优缺点

  • 优点:
    • 数据库吞吐量大幅提升,不再是瓶颈。
  • 缺点:
    • 数据库和缓存结合目前能够抗住海量的请求,但是应用的代码整体耦合在一起,修改一行代码需要整体重新发布。

1.7 微服务架构


1. 简介

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

2. 出现原因

  • 扩展性差:应用程序无法轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统;
  • 持续开发困难:一个很小的代码改动,也需要重新部署整个应用,无法频繁并轻松的发布版本;
  • 不可靠:即使系统的一个功能不起作用,可能导致整个系统无法工作;
  • 不灵活:无法使用不同的技术构建单体应用程序;
  • 代码维护难:所有功能耦合在一起,新人不知道何从下手。

3. 架构工作原理

在这里插入图片描述

4. 技术案例

  • 常见的服务治理框架有SpringCloudDubbo

在这里插入图片描述

5. 优缺点

  • 优点:
    • 灵活性高:服务独立测试、部署、升级、发布;
    • 独立扩展:每个服务可以各自进行扩展;
    • 提高容错性:一个服务问题并不会让整个系统瘫痪;
    • 新技术的应用容易:支持多种编程语言。
  • 缺点:
    • 运维复杂度高:业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难;
    • 处理故障困难:一个请求跨多个服务调用,需要查看不同服务的日志完成问题定位。

1.8 容器编排架构(docker出现)


1. 简介

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

2. 出现原因

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

3. 架构工作原理

在这里插入图片描述

4. 技术案例

  • 在一个大公司中,可能存在很多部门。比如公共服务层是一个部门,该部门有自己的k8s集群,管理旗下的多个容器化微服务。应用服务层分出两个部门,一个商城部,一个直播部,每个部门都有自己的k8s集群。
    在这里插入图片描述

2. 一个互联网实战架构


在这里插入图片描述


相关文章:

Docker之技术架构【八大架构演进之路】

Docker之技术架构 1. 八大架构演进之路1.1 单机架构1.2 应用数据分离架构1.3 应用服务集群架构1.4 读写分离架构1.5 冷热分离架构1.6 垂直分库架构1.7 微服务架构1.8 容器编排架构(docker出现) 2. 一个互联网实战架构 本章意在让大家了解Docker出现的历史…...

CSP-X2024山东小学组T4:刷题

题目链接 CSP-X2024山东小学组T4:刷题 题目描述 比赛之路多艰,做题方得提升。努力刷题的人在比赛中往往能取得很好的成绩,小红就是这样的人。 为了继续提升自己的编程实力,小红整理了一份刷题题单,并选中了题单中的…...

【Windows指令】Windows常用快捷指令

一.查找系统上所有可用的 .cpl 文件 要查找系统上所有可用的 .cpl 文件,你可以浏览到以下目录: C:\Windows\System32在“System32”文件夹中搜索扩展名为 .cpl 的文件,将列出所有可用的控制面板小程序。 ❗某些 .cpl 文件可能仅存在于特定的…...

NLP中的神经网络基础

一:多层感知器模型 1:感知器 解释一下,为什么写成 wxb>0 ,其实原本是 wx > t ,t就是阈值,超过这个阈值fx就为1,现在把t放在左边。 在感知器里面涉及到两个问题: 第一个,特征提…...

安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析

在信息技术迅猛发展的今天,企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具,其安全性和效率至关重要。免密登录作为一种新兴的身份验证技术,正逐渐成为提升运维管理效率和安全性的重要…...

初学elasticsearch

ES 文章目录 ES一、初识elasticsearch1、什么是elasticsearch,elastic static,Lucene2、倒排索引2.1、正向索引和倒排序索引 3、es与mysql的概念对比3.1、文档3.2、索引3.3、es与数据库中的关系 二、索引库操作1、mapping属性2、创建索引库和映射基本语法…...

HTMLCSS:惊!3D 折叠按钮

这段代码创建了一个具有 3D 效果和动画的按钮,按钮上有 SVG 图标和文本。按钮在鼠标悬停时会显示一个漂浮点动画,图标会消失并显示一个线条动画。这种效果适用于吸引用户注意并提供视觉反馈。按钮的折叠效果和背景渐变增加了页面的美观性。 演示效果 HT…...

SDK 指南

在前端开发中,SDK(Software Development Kit,软件开发工具包)是一个用于帮助开发者在特定平台、框架或技术栈中实现某些功能的工具集。 1. SDK 是什么? SDK 是一种开发工具包,它提供了开发人员实现某些功…...

Web 应用项目开发全流程解析与实战经验分享

目录 一、引言 二、需求分析 三、技术选型 四、架构设计 五、开发实现 六、测试优化 七、部署上线 八、实战经验分享 九、总结 一、引言 在当今数字化时代,Web 应用已经深入到我们生活和工作的各个角落。从社交网络到电子商务,从在线办公到娱乐…...

WPS中插入矩阵的方法

WPS中插入矩阵的方法: 1、先选择插入公式中的矩阵中的第二个括号矩阵 选中矩阵右键,点击插入 点击在此后插入列和在此后插入行,会得到3x3矩阵,如图 分别点击两次会得到4x4矩阵,如图,可以画出4x4矩阵...

Python调用R语言中的程序包来执行回归树、随机森林、条件推断树和条件推断森林算法

要使用Python调用R语言中的程序包来执行回归树、随机森林、条件推断树和条件推断森林算法,重新计算中国居民收入不平等,并进行分类汇总,我们可以使用rpy2库。rpy2允许在Python中嵌入R代码并调用R函数。以下是一个详细的步骤和示例代码&#x…...

uniapp input苹果中文键盘输入拼音直接切换输入焦点监听失效

问题: uniapp微信小程序,苹果手机中文键盘状态下,输入字母时,不点击确定也不点击空白处,直接切换到下一个input输入框,UI界面会保留上个输入框输入的内容,但input、blur事件监听到的值都是空&a…...

多智能体/多机器人网络中的图论法

一、引言 1、网络科学至今受到广泛关注的原因: (1)大量的学科(尤其生物及材料科学)需要对元素间相互作用在多层级系统中所扮演的角色有更深层次的理解; (2)科技的发展促进了综合网…...

华为:数字化转型只有“起点”,没有“终点”

上个月,我收到了一位朋友的私信,他询问我是否有关于华为数字化转型的资料。幸运的是,我手头正好收藏了一些,于是我便分享给他。 然后在昨天,他又再次联系我,并感慨:“如果当初我在进行企业数字…...

centos server系统新装后的网络配置

当前状态: ping www.baidu.com报错 1、检查IP ip addr show记录要编辑的网卡 link/ether 后的XX:XX:XX:XX:XX:XX号 2、以em1为例: vi /etc/sysconfig/network-scripts/ifcfg-em1,新增如下行: HWADDRXX:XX:XX:XX:XX:XX(具体值…...

【问题实录】服务器ping不通win11笔记本

项目场景 测试服务器和win11笔记本之间网络是否通常 问题描述 服务器ping不通win11笔记本,win11笔记本可以ping通服务器 解决方案 1、打开:控制面板\系统和安全\Windows Defender 防火墙 2、点击“高级设置”,然后点击“入站规则”&…...

WEB入门——文件上传漏洞

文件上传漏洞 一、文件上传漏洞 1.1常见的WebShell有哪些?1.2 一句话木马演示1.2 文件上传漏洞可以利用需满足三个条件1.3 文件上传导致的危害 二、常用工具 2.1 搭建upload-labs环境2.2 工具准备 三、文件上传绕过 3.1 客户端绕过 3.1.1 实战练习 :upl…...

公交车信息管理系统:构建智能城市交通的基石

程序设计 本系统主要使用Java语言编码设计功能,MySQL数据库管控数据信息,SSM框架创建系统架构,通过这些关键技术对系统进行详细设计,设计和实现系统相关的功能模块。最后对系统进行测试,这一环节的结果,基本…...

jdk各个版本介绍

JDK(Java Development Kit)是Java开发者用于构建、测试和部署Java应用程序的工具包。随着Java语言的不断演进,JDK也经历了多个版本的更新。下面是对JDK各个主要版本的简要介绍: JDK 1.0 - 1.4(经典时代) •…...

分布式事务解决方案seata和MQ

seata之XA模式 特点:强一致性、会锁定资源。 seata之AT模式 seata之TCC模式 特点:对代码有侵入 MQ解决分布式事务 特点:效率高、实时性差 分布式事务的消息幂等 1、tokenredis保证幂等 2、分布式锁 分布式任务调度...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

ESP32读取DHT11温湿度数据

芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

Java编程之桥接模式

定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

日常一水C

多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...

算术操作符与类型转换:从基础到精通

目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...