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

docker 的八大技术架构(图解)

docker 的八大技术架构

在这里插入图片描述


单机架构

概念: 应用服务和数据库服务公用一台服务器
出现背景: 出现在互联网早期,访问量比较小,单机足以满足需求

架构优缺点:

  • 优点:部署简单,成本低

  • 缺点:存在严重的性能瓶颈,数据库和应用互相竞争资源

架构工作原理:

以购物网站为例,可以看到通过应用(划分了多个模块)和 数据库 在单个服务器上协作完成业务运行

示例如下图:
在这里插入图片描述

对应的工作原理:
在这里插入图片描述



应用数据分离架构

概念: 应用服务和数据库服务使用不同服务器
出现背景: 单机存在严重的资源竞争,导致站点变慢

架构优缺点:

  • 优点:

    1. 成本相对可控
    2. 优点性能相比单机有提升
    3. 数据库单独隔离,不会因为应用把数据库搞坏,有—定的容灾能力

  • 缺点:

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

架构应用原理:

还是以购物网站为例,可以看到应用(划分了多个模块)和 数据库 在各自的服务器上通过网络协作完成业务运行

示例如下图:

在这里插入图片描述

对应的工作原理:

在这里插入图片描述


应用服务集群架构

概念: 引入了负载均衡,应用以集群方式运作
出现背景: 单个应用不足以支持海量的并发请求,高并发的

架构优缺点:

  • 优点:

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

  • 缺点:

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

架构应用原理:

还是以购物网站为例,可以看到应用不再是一个,而是变成了多个,通过负载均衡来支持海量的并发

示例如下图:

在这里插入图片描述



在这里插入图片描述

对应的工作原理:

在这里插入图片描述



读写分离/主从分离架构

概念: 将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从、—主多从都可以,数据库主机负责写操作,从机只负责读操作
出现背景: 数据库成为瓶颈,而互联网应用一般读多写少,数据库承载压力大,主要是由这些读的请求造成的,那么我们可以把读操作和写操作分开

架构优缺点:

  • 优点:

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

  • 缺点:

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

架构应用原理:

还是以购物网站为例,可以看到应用不再是一个,而是变成了多个,数据库主机负责写操作,从机负责读操作,数据库主机通过复制将数据同步到从机

示例如下图:
在这里插入图片描述

对应的工作原理:

在这里插入图片描述



冷热分离架构

概念: 引入缓存,实行冷热分离,将热点数据放到缓存中快速响应
出现背景: 海量的请求导致数据库负载过高,站点响应再度变慢

架构优缺点:

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

  • 缺点:

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

架构应用原理:

还是以购物网站为例,可以看到多了缓存服务器,对于热点数据全部放到缓存中,不常用数据再去查询我们的数据库

示例如下图:

在这里插入图片描述

对应的工作原理:

在这里插入图片描述




垂直分库架构

概念: 数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构
出现背景: 单机的写库会逐渐会达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式

架构优缺点:

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

  • 缺点:

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

分库分表

在这里插入图片描述
分布式数据库

在这里插入图片描述

架构应用原理:

还是以购物网站为例,数据库是由多个主从库或者存储集群构成,支持分布式大规模并行处理

示例如下图:

在这里插入图片描述

对应的工作原理:

在这里插入图片描述



微服务器架构

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

出现背景:

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

架构优缺点:

  • 优点:

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

  • 缺点:

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

架构应用原理:

还是以购物网站为例,一个商城应用拆分成了多个微服务,如用户服务、交易服务和商品服务,相互之间协作支持整个商城的应用,还增添了直播带货的应用

示例如下图:
在这里插入图片描述

对应的工作原理:
在这里插入图片描述




容器编排架构

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

出现背景:

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

架构优缺点:

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

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

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

C++和Java部署到服务器的过程图示:

在这里插入图片描述
上述过程联系现实的理解:

在这里插入图片描述



架构应用原理: 还是以购物网站为例,一个商城应用拆分成了多个微服务,如用户服务、交易服务和商品服务,每一个微服务打包到容器之中,相互协作来完成系统功能,通过容器编排工具完成部署运维

在这里插入图片描述

对应的工作原理:

在这里插入图片描述

相关文章:

  • 【Web前端】CSS基本语法规范和引入方式常见选择器用法常见元素属性
  • Android 观察者模式
  • 【KMeans聚类概述】
  • HTTPS握手解析
  • 智慧公厕的技术融合策略
  • Ubuntu Desktop Server - user 用户与 root 用户切换
  • Spring:面试八股
  • c语言编译和链接
  • 二分图
  • web CSS笔记1
  • lua 获取指定路径下的所有文件夹
  • 批量删除 rabbitmq中随机队列
  • c++部分题
  • PCL点云处理之最小中值平方(Lmeds法)拟合平面(二百三十四)
  • 鸿蒙OS开发实例:【手撸服务卡片】
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Docker下部署自己的LNMP工作环境
  • echarts花样作死的坑
  • java8 Stream Pipelines 浅析
  • Java程序员幽默爆笑锦集
  • Kibana配置logstash,报表一体化
  • Netty 4.1 源代码学习:线程模型
  • Sass Day-01
  • vue-cli3搭建项目
  • 小程序开发之路(一)
  • 异常机制详解
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • python最赚钱的4个方向,你最心动的是哪个?
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ###C语言程序设计-----C语言学习(3)#
  • #define
  • #Linux(Source Insight安装及工程建立)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (9)STL算法之逆转旋转
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (TOJ2804)Even? Odd?
  • (二)hibernate配置管理
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (利用IDEA+Maven)定制属于自己的jar包
  • (强烈推荐)移动端音视频从零到上手(下)
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net refrector
  • .NET 发展历程
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET中GET与SET的用法
  • :如何用SQL脚本保存存储过程返回的结果集
  • @基于大模型的旅游路线推荐方案
  • [ solr入门 ] - 利用solrJ进行检索