Docker:技术架构演进

文章目录

  • 基本概念
  • 架构演进
    • 单机架构
    • 应用数据分离架构
    • 应用服务集群架构
    • 读写分离/主从分离架构
    • 冷热分离架构
    • 垂直分库
    • 微服务
    • 容器编排架构

本篇开始进行对于Docker的学习,Docker是一个陌生的词汇,那么本篇开始就先从技术架构的角度出发,先对于技术架构有一个基本的认识

基本概念

  1. 应用和系统:为了完成一整套服务的一个程序或者是一组相互配合的程序
  2. 模块和组件:当应用量比较庞大时,会把整个目标划分为多个模块和组件
  3. 分布式:系统中的多个模块被部署到不同的服务器上,那这样就可以叫做是分布式系统,换句话说,比如平时的web服务器和数据库放在不同的服务器上,那这就是一个分布式的系统
  4. 集群:部署在多个服务器上,为了实现一个特定功能的组件,那这个整体就被叫做是集群,比如MySQL会工作在不同的服务器上,一起来进行数据库的服务目标,这样就可以被叫做是一组数据库集群
  5. 中间件:一类提供不同应用程序用户相互通信的软件,也就是说是不同技术工具或者是数据库之间的桥梁,这种就是中间件
  6. 容器:可以让开发者把应用以及依赖放到一个可以移植的镜像中,发布到各种操作系统的机器上,实现出一个虚拟化的功能
  7. 容器编排:这是一个用于进行管理云平台上多个主机上的容器化的应用,可以让部署容器化的应用更加简单高效

架构演进

现在假设做了一个项目,这个项目会随着时间的推移不断复杂,那么就需要不断的更换架构

单机架构

在项目的最初期,由于工程量比较小,所以使用最基础的内容就可以了,因此,使用普通的基础的单机架构即可:

在这里插入图片描述
这也是最基础的架构,把所有的内容都放到了单机服务器上

应用数据分离架构

随着工程的升级,此时随着数据越来越多,原来的单机服务器已经不能够满足日常的需求了,因此就要想办法降低这个单机服务器上的数据量,因此就采取出了应用数据分离架构

在这里插入图片描述
这种架构模式也比较简单,直接把应用的数据存储在了应用服务器上,而把存储的内容数据,放到了存储服务器上,其实也就是把数据库服务部署在了一个存储服务器上

应用服务集群架构

随着用户的继续增长,数据量变得更多了,此时单台的应用服务器已经不能够满足日常的需求了,因此现在又要进行升级技术,下面给出两种方案:

  1. 垂直扩展:购买更加优秀的应用服务器来进行应对这种更多的流量,优点是直接把项目换个机器部署即可,但是缺点是价格比较昂贵
  2. 水平扩展:把软件的架构进行调整,增加应用层的硬件,把用户的流量分担到不同的应用服务器中,从而增加系统的承载能力,这样的方案优势是可以控制成本,提升空间大,但是缺点是需要技术的支持,因为直接相当于更换了一种存储模式

之后,这个项目采取了一个水平扩展的方案,引入了一个负载均衡的方案,把用户的流量合理的分发到了不同的应用服务器上,当然这也需要一个专门的系统组件,叫做流量分发,实际的负载均衡不仅仅说的是工作在应用层的是负载均衡,在网络层的也可能是负载均衡

下面是这种模式下的架构图:

在这里插入图片描述

读写分离/主从分离架构

在把用户的请求通过负载均衡发送到不同的应用服务器后,确实可以进行并行处理很多的问题了,并且随着用户的增长还可以使用扩张服务器的方法来进行压力的缓解,但是现在的问题是,不管扩展多少个服务器,这些请求都会从数据库来进行读写数据,这就导致数据库的压力会很大,那么如何解决数据库压力大的问题?

如果想要使用扩展数据库的方法来解决,其实是不可以的,因为数据是需要保持一致性的,采取多个数据库服务器,会导致整体上的数据一致性不能得到合理的保证,因此引入了一个主从服务器的概念

保留一个主要的数据库作为写入数据库,而其他的数据库都是从属数据库,从库的所有数据都来自于主库的数据,经过同步之后,从库可以维护着和主库一样的数据,为了分担数据库的压力,可以把数据的请求全部给主库来进行处理,但是读取的数据请求分散到从库中,这样就会导致压力进一步的减少,达到一个缓解的目的

下面是这种架构的模式图:

在这里插入图片描述

冷热分离架构

随着访问量的继续增加,就会发现业务中的一些数据的读取频率是要比其他数据的要高的,那么这些数据就被叫做是热点数据,对于热点数据来说,可以把其缓存起来,这样就可以减少访问数据库的次数,比如前面用过的Redis就是这样达到原理

在这里插入图片描述

垂直分库

随着业务的增加,大量的数据存储在一个库中是不可行的,一个主数据库已经完成不了这么多的数据了,因此就可以把数据进行分别存储,比如对于评论和数据,可以进行商品ID的hash,分别存储到不同的库中即可,具体的模式图如下所示:

在这里插入图片描述

微服务

随着项目的持续增加,整个项目可能会有很多个模块来组成,因此就需要把业务分发给不同的开发团队来进行维护,每个团队独立实现自己的微服务,相互之间对数据的直接访问进行隔离,总体来说就是可以进行一些相互之间的调用关联等:

在这里插入图片描述

容器编排架构

系统的资源利用率其实在上述的架构中是不高的,为什么这样说?因为有很多的资源是用来应对短时的高并发,而很多的资源在正常情况下都是用不到的,那这样的问题如何解决?容器化技术就带来了解决方案

目前最为流行的容器化技术就是Docker了,容器管理服务是K8S,可以把应用服务打包为一个Docker镜像,使用K8S来进行动态的分发和镜像的部署,Docker的镜像可以理解为是一个能够运行你的服务的最小的一个操作系统,里面放的是其对应的数据,那么把整个操作系统打包wield一个镜像之后,就可以分发到对应的机器上,直接启动这个Docker的镜像,就可以把服务打包起来,使得服务部署变得轻松简单

在实际的使用中可能还会有生产和研发的K8S集群,这样的集群不会公用,会有对应的研发和测试集群等

在这里插入图片描述
至此,一个高可用,高并发的系统模型就这样诞生了

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

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

相关文章

【51单片机】智能百叶窗项目

文章目录 功能演示:前置要求:主要功能:主要模块:主函数代码: 具体的仿真程序和代码程序已经免费放置在资源中,如有需要,可以下载进行操作。 功能演示: 前置要求: 编译软…

【NoSQL】Redis练习

1、redis的编译安装 systemctl stop firewalld systemctl disable firewalld setenforce 0 yum install -y gcc gcc-c make wget cd /opt wget https://download.redis.io/releases/redis-5.0.7.tar.gz tar zxvf redis-5.0.7.tar.gz -C /opt/cd /opt/redis-5.0.7/ # 编译 make…

【全开源】CMS内容管理系统(ThinkPHP+FastAdmin)

基于ThinkPHPFastAdmin的CMS内容管理系统,自定义内容模型、自定义单页、自定义表单、专题、统计报表、会员发布等 提供全部前后台无加密源代码和数据库私有化部署,UniAPP版本提供全部无加密UniAPP源码​ 🔍 解锁内容管理新境界:C…

Typesense-开源的轻量级搜索引擎

Typesense-开源的轻量级搜索引擎 Typesense是一个快速、允许输入错误的搜索引擎,用于构建愉快的搜索体验。 开源的Algolia替代方案& 易于使用的弹性搜索替代方案 官网: https://typesense.org/ github: https://github.com/typesense/typesense 目前已有18.4k…

阅读笔记:Multi-threaded Rasterization in the Chromium Compositor

Multi-threaded Rasterization in the Chromium Compositor PPT 原始链接: https://docs.google.com/presentation/d/1nPEC4YRz-V1m_TsGB0pK3mZMRMVvHD1JXsHGr8I3Hvc/edit?uspsharing PPT主要介绍了Chromium浏览器中使用多线程光栅化(Impl-side painting)的机制&a…

Python自动化发送邮件如何实现?怎么配置?

Python自动化发送邮件需要注意什么?邮件群发的技巧? 无论是个人使用还是企业需求,电子邮件的发送都是必不可少的。而Python作为一门功能强大的编程语言,可以通过自动化脚本实现批量发送邮件,从而提高工作效率。AokSen…

【外汇天眼】选择外汇EA的关键:策略适配、风险控制与稳定性评估

外汇EA(Expert Advisor)是外汇交易市场中广泛使用的自动化交易系统。它们通过预定义的规则和算法自动执行交易,旨在为交易者提供便捷的交易体验,同时提高交易效率和准确性。本文将从策略选择、风险控制和稳定性评估三个方面&#…

Excel 生成所在月份的每一天列表

Excel 的 A2 格是日期 A1Fecha201/03/24 需要生成该日期所在月份的每一天的列表 A1WholeMonth201/03/24302/03/24403/03/24504/03/24605/03/24706/03/24807/03/24908/03/241009/03/241110/03/241211/03/241312/03/241413/03/241514/03/241615/03/241716/03/241817/03/241918…

鸿蒙嵌入式设备开发之hello world

1. 环境搭建 目前鸿蒙设备的开发环境,可以分为2个部分:Windows调试环境,和Linux编译环境。 其中, Linux环境负责编译代码,并生成鸿蒙的包。Windows环境负责连接设备,进行烧录和调试。 特别注意&#xf…

访问成员变量(反射)

文章目录 前言一、访问成员变量的方法二、Field类 1.常用方法2.实操展示总结 前言 为了实现随时随地调用某个类的某个成员变量,我们可以通过反射的Field类进行调用。这其中需要我们获取该类的Class对象,再调用Field类的相关方法,实时地灵活地…

618什么数码好物值得入手?优质数码清单分享,错过等明年!

在到来的618年中大促,各种数码好物竞相亮相,正是您更新装备、升级体验的黄金时刻,在这个购物的狂欢节里,我们特别为大家准备了一份精选的优质数码清单,帮助大家从海量的选择中筛选出真正值得入手的宝贝,这些…

Wireshark抓包日常运维实用过滤

0x0 Wireshark 介绍 Wireshark 是一款功能强大的网络分析工具,适用于网络专业人员。它提供了出色的过滤器,您可以轻松放大到您认为可能存在问题的位置。过滤器的主要好处是消除定位流量,并缩小要查找的数据类型。 0x1 根据源 IP 地址过滤主…

探秘Facebook:社交媒体的未来之路

Facebook,作为全球最大的社交媒体平台之一,一直处于数字社交革命的前沿。然而,随着科技和社会的不断发展,Facebook正面临着新的挑战和机遇。本文将探索Facebook的未来之路,揭示社交媒体的新趋势和发展方向。 1. 深度社…

恢复误删和格式化的文件的利器

一、简介 1、一款由Piriform开发的免费文件恢复工具,它能够帮助用户恢复那些不小心从电脑上删除的文件,包括从回收站清空的文件,以及因用户错误操作而从存储设备中删除的图片、音乐、文档等多种格式的文件。Recuva支持对硬盘、闪存卡、U盘等多种存储介质进行扫描与恢复,并且…

Codeforces Round 951 (Div. 2) F. Kostyanych‘s Theorem(思维题 交互好题)

题目 交互题&#xff0c;n&#xff08;n<1e5&#xff09;个点的完全图&#xff0c;无向的&#xff0c;初始恰好删了n-2条边 每次询问可以输入一个d&#xff1a;? d 交互器会输出一个当前度>d的点v&#xff0c; 如果有多个这样的点&#xff0c;输出度最小的&#xff…

1+x(Java)中级题库易混淆理论题(三)

SQL 语句中进行 group by 分组时&#xff0c;可以不写 where 子句 分组时可以多层分组&#xff0c;比如&#xff1a;先按照省、再按照市来分组。 File 类不能获取文件的内容 在使用 select 语句进行查询分组时&#xff0c;如果希望去掉不满足条件的分组&#xff0c;使用 hav…

高考加油,奥利给

又到了一年一度的高考时刻了啊&#xff0c;高考是漫漫人生路上的一个转折点&#xff0c;祝各位莘莘学子都超常发挥、金榜题名

阿贝云免费虚拟主机和免费云服务器评测

阿贝云是一家提供免费虚拟主机和免费云服务器的云服务提供商。他们的服务非常受用户欢迎&#xff0c;因为他们提供的免费方案相比其他竞争对手来说更具竞争力。用户可以在阿贝云上轻松创建自己的网站&#xff0c;并享受稳定可靠的服务。阿贝云的免费虚拟主机套餐包括免费的域名…

人类语言处理nlp部分笔记——二、BERT和它的家族-介绍和微调

参考自李宏毅课程-人类语言处理 二、BERT和它的家族-介绍和微调 1. What is pre-train model 这里所说的pre-train model是输入一串tokens&#xff0c;能够输出一串vectors&#xff0c;且每个vector可以表示对应的语义的模型&#xff0c;这些vectors也被称作为embeddings。以…

【set】集合总结

一、Set Set集合是Collection的子接口,代表一种集合,此种集合是元素不重复. 有两个常用实现类 HashSet 是元素不重复,无序,主要是指遍历顺序和插入顺序不一致 TreeSet 是元素不重复,排序 LinkedHashSet不常用 二、HashSet 1.1 介绍 HashSet是Set的实现类 底层是由哈希表实…