【Docker】技术架构演进

news2024/11/16 21:37:17

基本概念

应用(Application) / 系统(System)

​ 为了完成一整套服务的一个程序或者一组相互配合的程序群。生活例子类比:为了完成一项任务,而搭建的由一个人或者一群相互配的人组成的团队。

模块(Module) / 组件(Component)

​ 当应用较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于理解。生活例子类比:军队中为了进行某据点的攻克,将人员分为突击小组、爆破小组、掩护小组、通信小组等 。

分布式(Distributed)

​ 系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别工作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。生活例子类比:为了更好的满足现实需要,一个在同一个办公场地的工作小组被分散到多个城市的不同工作场地中进行远程配合工作完成目标。跨主机之间的模块之间的通信基本要借助网络支撑完成。

集群(Cluster)

​ 被部署于多台服务器上的、为了实现特定目标的一个/组特定的组件,整个整体被称为集群。比如多个 MySQL 工作在不同服务器上,共同提供数据库服务目标,可以被称为一组数据库集群。生活例子类比:为了解决军队攻克防守坚固的大城市的作战目标,指挥部将大批炮兵部队集中起来形成一个炮兵打击集群。

​ 分布式 vs 集群。通常不用太严格区分两者的细微概念,细究的话,分布式强调的是物理形态,即工作在不同服务器上并且通过网络通信配合完成任务;而集群更在意逻辑形态,即是否为了完成特定服务目标。

主(Master) / 从(Slave)

​ 集群中,通常有一个程序需要承担更多的职责,被称为主;其他承担附属职责的被称为从。比如 MySQL 集群中,只有其中一台服务器上数据库允许进行数据的写入(增/删/改),其他数据库的数据修改全部要从这台数据库同步而来,则把那台数据库称为主库,其他数据库称为从库。

中间件(Middleware)

​ 一类提供不同应用程序用于相互通信的软件,即处于不同技术、工具和数据库之间的桥梁。生活例子类比:一家饭店开始时,会每天去市场挑选买菜,但随着饭店业务量变大,成立一个采购部,由采购部专职于采买业务,称为厨房和菜市场之间的桥梁。

容器(Docker)

​ Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。可以理解为一个集装箱,集装箱里面是每个用户的货物,整体打包。

容器编排(K8S)

​ kubernetes,简称 K8s,是用 8 代替名字中间的 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用, Kubernetes 的目标是让部署容器化的应用简单并且高效。可以理解为一个货船,安装集装箱的大小,货物情况合理的来组织集装箱完成整体货物的搬运。

吞吐 VS 并发

吞吐考察单位时间段内,系统可以成功处理的请求的数量。并发指系统同一时刻支持的请求最高量。例如一条 2 车道高速公路,一分钟可以通过 20 辆车,则并发是 20,一分钟的吞吐量是 20。实践中,并发量往往无法直接获取,很多时候都是用极短的时间段(比如 1 秒)的吞吐量做代替。我们平时用高并发(Hight Concurrnet)这个非量化目标简要表达系统的追求。

单机架构

出现原因

互联网早期,服务的访问量比较小,单机足以满足需求。系统架构简单,无需专业的运维团队。

简介

单机架构:应用服务和数据库服务共用一台服务器。

image-20230617002423942

相关软件

  • Web 服务器软件: Tomcat、 Netty、 Nginx、 Apache 等
  • 数据库软件: MySQL、 Oracle、 PostgreSQL、 SQL Server 等

案例

用户在浏览器中输入 www.bit.com,首先经过 DNS 服务将域名解析成 IP 地址10.102.41.1,随后浏览器访问该 IP 对应的应用服务。

image-20230617003029094

优缺点

优点:

  • 部署简单,硬件成本低。

缺点:

  • 存在严重的性能瓶颈。数据库和应用相互竞争。

应用数据分离架构

出现原因

​ 访问量逐步上升,逐渐逼近了硬件资源的极限,同时团队也在此期间积累了对业务流程的一批经验。 单机服务存在严重的资源竞争,导致站点变慢。但由于预算仍然很紧张,我们选择了将应用和数据分离的做法,可以最小代价的提升系统的承载能力。

简介

应用数据分离架构:将数据库服务独立部署在同一个数据中心的其他服务器上,应用服务通过网络访问数据。

image-20230617003939330

案例

image-20230617004024663

优缺点

优点:

  • 成本相对可控。性能相比单机有提升。
  • 数据库单独隔离,不会因为应用把数据库搞坏,有一定的容灾能力。

缺点:

  • 硬件成本变高,性能有瓶颈,无法应对海量并发。

应用服务集群架构

负载均衡

负载均衡:为了解决用户流量向哪台应用服务器分发的问题, 需要一个专门的系统组件做流量分发。实际中负载均衡不仅仅指的是工作在应用层的,甚至可能是其他的网络层之中。

流量调度算法:

  • Round-Robin 轮询算法。即非常公平地将请求依次分给不同的应用服务器。
  • Weight-Round-Robin 轮询算法。为不同的服务器(比如性能不同)赋予不同的权重(weight)。
  • 一致哈希散列算法:通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。

出现原因

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

简介

应用服务集群架构:引入了负载均衡,应用以集群方式运作。

image-20230617005716353

相关软件:
负载均衡软件: Nginx、 HAProxy、 LVS、 F5 等 。

案例

image-20230617010253689

优缺点

优点:

  • 应用服务高可用:应用满足高可用,不会一个服务出问题整个站点挂掉。
  • 应用服务具备一定高性能:如果不访问数据库,应用相关处理通过扩展可以支持海量请求快速响应。
  • 应用服务有一定扩展能力:支持横向扩展。

缺点:

  • 数据库成为性能瓶颈,无法应对数据库的海量查询。
  • 数据库是单点,没有高可用。
  • 运维工作增多,扩展后部署运维工作增多,需要开发对应的工具应对快速部署。硬件成本高。

读写分离架构

出现原因

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

简介

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

image-20230617013125830

相关软件:
MyCat、 TDDL、 Amoeba、 Cobar 等类似数据库中间件等。

案例

image-20230617013230605

优缺点

优点:

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

缺点:

  • 热点数据的频繁读取导致数据库负载很高。
  • 当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致。
  • 服务成本提高。

冷热分离架构 --引入缓存

热数据和冷数据

**热点数据:**随着访问量继续增加,业务中一些数据的读取频率远大于其他数据的读取频率。

**冷点数据:**业务中一些数据的读取频率远小于其他数据的读取频率。

针对热数据,为了提升其读取的响应时间,可以增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的 html 页面等。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。其中涉及的技术包括:使用 memcached 作为本地缓存,使用Redis 作为分布式缓存,还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。

简介

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

image-20230617014129827

相关软件:
Memcached、 Redis 等缓存软件 。

案例

image-20230617014210989

优缺点

优点:

  • 大幅降低对数据库的访问请求,性能提升非常明显。

缺点:

  • 带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题。
  • 服务器成本需要进一步增加。
  • 业务体量支持变大后,数据不断增加,数据库单库太大,单个表体量也太大,数据查询会很慢,导致数据库再度成为系统瓶颈。

垂直分库架构

出现原因

随着业务的数据量增大,大量的数据存储在同一个库中已经显得有些力不从心了,所以可以按照业务,将数据分别存储。

比如针对评论数据,可按照商品 ID 进行 hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户 ID 或记录编号来路由数据。只要实时操作的表数据量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩展的方式来提高性能。

这种做法显著的增加了数据库运维的难度,对 DBA 的要求较高。数据库设计到这种结构时,已经可以称为分布式数据库,但是这只是一个逻辑的数据库整体,数据库里不同的组成部分是由不同的组件单独来实现的,如分库分表的管理和请求分发,由 Mycat 实现,SQL 的解析由单机的数据库实现,读写分离可能由网关和消息队列来实现,查询结果的汇总可能由数据库接口层来实现等等,这种架构其实是 MPP(大规模并行处理)架构的一类实现。

简介

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

image-20230617014833741

垂直分库:

image-20230617014955710

相关软件:
Greenplum、 TiDB、 Postgresql XC、 HAWQ 等,商用的如南大通用的 GBase、睿帆科技的雪球 DB、华为的 LibrA 等。

案例分析

image-20230617015032567

优缺点

优点:

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

缺点:

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

微服务

出现原因

扩展性差:微服务架构前,应用程序无法轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统。

持续开发困难:微服务架构前,一个很小的代码改动,也需要重新部署整个应用,无法频繁并轻松的发布版本。

不可靠:微服务架构前,即使系统的一个功能不起作用,可能导致整个系统无法工作。

不灵活:无法使用不同的技术构建单体应用程序。

代码维护难:微服务架构前,所有功能耦合在一起,新人不知道何从下手。

简介

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

image-20230617015810129

相关软件
Spring Cloud、 Dubbo、Grpc

案例

image-20230617015930983

优缺点

优点:

  • 灵活性高:服务独立测试、部署、升级、发布。
  • 独立扩展:每个服务可以各自进行扩展。
  • 提高容错性:一个服务问题并不会让整个系统瘫痪;
  • 新技术的应用容易:支持多种编程语言。

缺点:

  • 运维复杂度高:业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难。
  • 资源使用变多:所有这些独立运行的微服务都需要需要占用内存和 CPU 。
  • 处理故障困难:一个请求跨多个服务调用,需要查看不同服务的日志完成问题定位。

容器编排

出现原因

​ 随着业务增长,然后发现系统的资源利用率不高,很多资源用来应对短时高并发,平时又闲置,需要动态扩缩容,还没有办法直接下线服务器,而且开发、测试、生产每套环境都要隔离的环境,运维的工作量变的非常大。容器化技术的出现给这些问题的解决带来了新的思路 。

​ 目前最流行的容器化技术是 Docker,最流行的容器管理服务是 Kubernetes(K8S),应用/服务可以打包为 Docker 镜像,通过 K8S 来动态分发和部署镜像。 Docker 镜像可理解为一个能运行你的应用/服务的最小的操作系统,里面放着应用/服务的运行代码,运行环境根据实际的需要设置好。把整个“操作系统”打包为一个镜像后,就可以分发到需要部署相关服务的机器上,直接启动 Docker 镜像就可以把服务起起来,使服务的部署和运维变得简单。

微服务缺点:

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

什么是容器

容器可以理解为一个一个集装箱,集装箱之间互不干扰

image-20230617020507957

简介

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

image-20230617020233703

案例

image-20230617021453319

优缺点

优点:

  • 部署、运维简单快速:一条命令就可以完成几百个服务的部署或者扩缩容。
  • 隔离性好:容器与容器之间文件系统、网络等互相隔离,不会产生环境冲突。
  • 轻松支持滚动更新:版本间切换都可以通过一个命令完成升级或者回滚。

缺点:

  • 技术栈变多,对研发团队要求高。
  • 机器还是需要公司自身来管理,在非大促的时候,还是需要闲置着大量的机器资源来应对大促,机器自身成本和运维成本都极高,资源利用率低,可以通过购买云厂商服务器解决。

实战架构

下图是一个互联网的电商架构:

image-20230617021640185

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

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

相关文章

C++【STL】之list的使用

文章目录: list介绍list使用1. 默认成员函数1.1 构造函数1.2 拷贝构造1.3 赋值重载1.4 析构函数 2. 迭代器3. 容量操作4. 数据访问5. 数据修改5.1 插入删除5.2 交换调整清理 6. 其他操作6.1 链表拼接6.2 链表移除6.3 排序6.4 链表逆置 list介绍 list是可以在常数范围…

STM32软件定时器

目录 什么是定时器? 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 软件定时器相关 API 函数 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时器 5. 更改软件定时器定时时间 实操 cubeMX配置 …

chatgpt赋能python:Python设置画布背景颜色

Python设置画布背景颜色 Python语言是一种广泛应用于科学计算、数据处理和数据可视化的高级脚本语言。它之所以如此流行,主要是因为它简单易学,并且具有很强的灵活性。在Python中,我们可以使用各种库来创建图形化界面、游戏和数据可视化应用…

C高级 day35

1、ubuntu的网络配置 1、查看网络是否连接 ping baidu.com 2、保证虚拟机有桥接网络 虚拟机---->设置---->网络适配器------>选择桥接或者是Vmnet0 给虚拟机添加桥接网络,如果没有vmnet0,添加网络 3、配置虚拟机的桥接网络 右上角网络图标-----…

RunCat 自定义动图

下载资源 下载资源 Runners Store 在商店购买 Self-Made Runner 设置 添加多张图片 下载 zhiyin_basketball 图片 zhiyin_basketball 下载 更新版本 设置图片 Format: PNGHeight: 36pxWidth: 10~100px 调整图片大小 使用convert命令查看图片宽和高 convert 0.png -print …

MFC视类和框架类学习1

VC6新建一个单文档工程,名称为test;将会生成如下的类; 这里说的框架类是指CMainFrm类; 视类是指CxxxxView类; 生成的视类公共继承自CView类, class CTestView : public CView { ...... CView类继承自CWnd…

安装ps出现计算机丢失d3dcompiler_47.dll缺失的解决方法

本教程操作系统:Windows系统、 d3dcompiler_47.dll是电脑文件中的dll文件(动态链接库文件)。如果计算机中丢失了某个dll文件,可能会导致某些软件和游戏等程序无法正常启动运行,并且导致电脑系统弹窗报错。 在我们打开…

局域网视频会议系统相较于SaaS会议系统的优势

局域网视频会议系统和SaaS会议系统都是远程协作和视频通讯的应用技术,各自有各自的特点和功能。 局域网视频会议系统相较于SaaS会议系统可以具备以下一些优势: 1. 安全性更高:局域网视频会议系统在企业内部进入,采用专属的内外网安…

Win10电脑C盘爆红了可以删除哪些文件?

Win10电脑C盘爆红了可以删除哪些文件?Win10电脑中用户发现C盘爆红了,想通过删除C盘内的文件来解决C盘爆红的问题,那么哪些文件可以删除呢,用户可以打开Temp、Help、Prefectch等文件夹进行删除,以下就是Win10电脑C盘爆红…

Python入门基本练习题(54题)

Python入门基本练习题(54题) 目录 第一节 、Python基础关键字和语法 1、 用单引号括出需要打印输出的内容 2、 用双引号括出需要打印输出的内容 3、 用三引号括出需要打印输出的内容 4、 \n(换行符)的使用 5、 \t&#xff0…

chatgpt赋能python:Python词云入门:构建你自己的词云图

Python词云入门:构建你自己的词云图 如果你是一个数据科学家或者是数据分析师,那么你肯定已经听过了“词云图”这个词。词云图是数据可视化的一种方式,用于呈现文本数据中最频繁出现的词汇。在这篇文章中,我将提供一个详细的教程…

前端怎么使用node-input-validator给接口添加参数校验(以strapi 4.9为例)

node-input-validator是什么? 简称NIV (Node Input Validator)用于node.js的验证库使用它可以扩展库以添加自定义规则。npm NIV文档 使用方法 我们以strapi 4.9 版本项目为例,来试用一下它对我们接口的校验规则 下载依赖 npm i node-input-validat…

【人工智能】人工智能和双曲几何

一、说明 作为人工智能技术的理论支撑,几何学是必不可少的;目前直接的几何技术有:计算几何--对集合体如点云处理有用;射影几何--对3d重构有用;双曲几何--在自然语言的词嵌入做基础数学模型,另外深度学习国外…

Intellij IDEA编写Spark应用程序的环境配置和操作步骤

本文介绍如何在win系统中使用IDEA开发spark应用程序,并将其打成jar包上传到虚拟机中的三个Ubuntu系统,然后在分布式环境中运行。 主要步骤包括: 安装Scala插件:在Intellij IDEA中安装Scala插件,并重启IDEA。创建Mave…

航空保障装备虚拟3d展览展示仿真系统助力企业降本增效

航空装备被认为是一个现代化国家核心竞争力的集中体现。航空装备制造业不仅是维护发展环境稳定的重要保障,也是推动经济转型升级的战略性产业。 3D虚拟展示技术是数字化转型中一项不可或缺的技术手段,将3D虚拟现实技术与工业制造业的有机融合&#xff0c…

chatgpt赋能python:Python第三方包安装方法详解

Python第三方包安装方法详解 为什么要安装第三方包? 在Python编程中,常常需要使用到一些额外的功能模块,但是Python自身不具备这些功能,需要通过安装第三方包来实现。例如,Python标准库中没有Jupyter Notebook工具&a…

T5、RoBERTa、悟道·天鹰、紫东太初、CPM作者谈基础模型前沿技术丨大模型科研、创业避坑指南...

导读 大语言模型日益火爆,学者们的研究方向是指明灯。那么相关大模型重要项目的主要贡献者怎么看?6月9日的北京智源大会“基础模型前沿技术”论坛邀请了T5、RoBERTa、悟道天鹰、紫东太初、CPM等重要模型工作作者出席。 图注:五位嘉宾现场讨论…

chatgpt赋能python:Python如何设置画布颜色:一份详尽指南

Python如何设置画布颜色:一份详尽指南 在计算机图形学中,画布颜色是指画布的背景颜色。当然,通过Python设置画布颜色非常简单,本篇文章将为您提供一份详尽指南。 什么是画布颜色? 在Python中创建一个画布时&#xf…

MySQL 官方示例数据库如何下载

文章结构 下载 MySQL 的示例数据库示例数据库介绍以及安装后续就是自己使用了参考网址 MySQL 提供了一些非常好的用来演示 MySQL 各项功能的示例数据库,同 Oracle 也提供了示例数据库。但是很少有人知道 MySQL 也提供,或许是因为它没有像 Oracle 一样在安…

chatgpt赋能python:Python教程:如何设置画布大小?

Python教程:如何设置画布大小? 在Python中,我们可以使用各种图形库来创建各种类型的图。有时,我们需要调整图像的大小以适应我们的需求。所以,在这篇文章中,我将介绍如何使用Python来设置画布大小。 什么…