【分布式系统】 单机架构 | 分布式架构 | 集群 | 主从架构 | 分库分表 | 冷热分离 | 微服务

文章目录

    • @[toc]
  • 分布式系统
    • 一、单机架构
    • 二、分布式系统
    • 三、应用服务器集群
    • 四、读写分离 / 主从分离架构
    • 五、引入缓存/冷热分离架构
    • 六、垂直分库
    • 七、微服务架构——业务拆分
            • 代价
            • 优势
    • 八、名词解释
            • 1.应用(Application)/系统(System)
            • 2.模块(Model)/组件(Component)
            • 3.分布式(Distributed)
            • 4.集群(Cluster)
            • 5.主(Master)/从(Slave)
            • 6.中间件(Middleware)
          • 评价指标
            • 7.可用性(Availability)
            • 8.响应时间(RT)
            • 9.吞吐率(Throughout)、并发量(Concurrent)

分布式系统

一、单机架构

  • 只有一台服务器,来负责所有的工作。(应用程序+数据库服务器在同一台主机上)

在这里插入图片描述

  • 在前期,用户访问量少,对于性能和安全要求不高,采用简单的单机架构,不需要运维。
  • 在单机上提供应用服务和数据库服务
  • 如果业务进一步增长,用户量和数据量增多,一太主机无法应付时,就需要引入更多的主机和硬件资源,过度到分布式系统。

二、分布式系统

  • 应用程序和数据库服务器分离。分别放在不同的主机上部署。

  • 一台主机的硬件资源是有限的。(CPU资源、内存、硬盘、网络)服务器每次收到一个请求,都要消耗一些资源。如果同一时刻,收到大量请求,就会导致某项资源不够用,导致服务器处理请求的时间变长,甚至出错。

  • 因此,要进行开源、节流。

    开源:增加更多的硬件资源。增加更多的主机,形成分布式系统。

    节流:在软件上进行优化,根据性能测试找到哪个环节出现了瓶颈,对症下药。

  • 引入分布式,会提高系统的复杂度、提高出现bug的概率。

在这里插入图片描述

  应用服务 和 数据库服务进行分离。应用服务器,会包含更多的业务逻辑,可能会吃CPU和内存,给应用服务器进行CPU和内存的补强。 数据库服务器,需要更大是硬盘空间、更快的访问速度,需要配置更大的硬盘、上SSD。针对不同的硬件资源需求,进行合理的配置。

三、应用服务器集群

在这里插入图片描述

  • 引入负载均衡,应用服务器进行集群。当集群中的某个主机挂了,其他的主机仍任可以承担服务,从而提高系统的可用性。

  • 应用服务器比较吃CPU和内存,引入更多的应用服务器来缓解CPU和内存资源的消耗。

  • 用户的请求,先访问负载均衡器 / 网关服务器(单独的服务器),由负载均衡器(根据算法)来对请求进行分发。(相当于领导,把任务平均分配给属下)

  • 负载均衡器对于请求的承载能力,要远超于应用服务器。负载服务器只进行分配工作,应用服务器来执行任务。

    负载均衡器只需要分配就可以了,而应用服务器考虑的事情就多了~(沟槽的公式)

  • 如果请求量大到负载均衡器扛不住了,就引入更多的负载均衡器(引入多个机房)

    网络游戏中,一个区用户满了,再开一个新区。

四、读写分离 / 主从分离架构

在这里插入图片描述

  • 主从数据库,读写分离。降低单个数据库的访问压力
  • 主数据库(master)只复制写文件 ,并把写的数据同步给从数据库
  • 从数据库 (slave)只复制读文件,在实际中,读操作的频率比写操作高
  • 主服务器一般是一个,从服务器可以有多个(一主多从),从服务器可以通过负载均衡的方式让应用服务器来访问。

五、引入缓存/冷热分离架构

  • 将数据区分“冷热”。将热点数据放在缓存中。缓存的访问速度要比数据库快很多

在这里插入图片描述

  • 缓存服务器中,只存放一小部分热点数据(频繁被访问的数据 28定律)
  • 缓存速度快,而代价就是容量小
  • 先访问缓存,如果存在,就不需要再读取数据库了。从而提高速度
  • 再修改主数据库的数据时,要同步到缓存和从数据库。

六、垂直分库

​ 引入分布式系统,是为了应对更高的请求量(并发量)的同时,也能应对更大的数据量。当一台主机存不下的时候,就需要引入多台主机来存储数据

在这里插入图片描述

  • 针对数据库,进行进一步的拆分(分库分表)
  • 每个数据库服务器,只存储一个、一部分数据库。从而解决数据存储不足的问题。
  • 如果某个表特别大,大到一台主机装不下,也可以对数据表进行拆分(分表)。
  • 在实际中,根据具体的业务场景,来灵活进行拆分。(业余决定技术)

七、微服务架构——业务拆分

  • 当应用服务器中,功能太多太复杂时,为了代码的维护。就需要把应用服务器,拆分成更多的部分。
  • 每个部分只负载一小部分功能,变成功能单一、更小的服务器(微服务)

在这里插入图片描述

  • 将应用服务器的业务进行拆分。每组都是多台服务器,来处理更多的并发量。同时,每组服务器,有各自的存储集群和缓存模块

  • 分布式(解决硬件资源)->负载均衡(解决高并发量)->读写分离(降低数据库访问压力)->引入缓存(提高读取速度)->分库分表(解决存储空间不足的问题)->微服务(解决人的问题)

  • 当应用服务器变得复杂时,就需要更多的人来进行维护。按照功能拆分成多组微服务,也有利于组织人员的分配。

代价
  • 系统性能下降:引入微服务,解决了人的问题。但是跨主机网络通信,下降了整个系统的性能。拆分出的更多服务,多个功能之间依赖网络通信,网络通信的速度很可能比硬盘还慢。要想保证性能,就需要引入更多的硬件资源。(为了好的管理成本而对硬件进行充值,万兆网卡,嘎嘎贵!嘎嘎快!引入万兆网卡,就不会因为微服务的网络速度而下降太多的性能)
  • 系统复杂程度提高,服务器更多,出现问题的概率变大,需要一系列手段(更丰富的监控报警、和配套的运维团队),来保证系统的可用性。
优势
  • 1.解决了人的问题。
  • 2.更方便实现功能的服用。
  • 3.可以给不同的服务进行不同的部署。(负载量大的模块配置更好的机器)

八、名词解释

1.应用(Application)/系统(System)

​ 一个应用,就是一个、一组服务器程序

2.模块(Model)/组件(Component)

​ 一个应用里有很多功能,每个独立的功能,就可以成为一个模块/组件

3.分布式(Distributed)

​ 引入多个主机/服务器,协同配合来完成一系列的工作(物理上的多个主机)

4.集群(Cluster)

​ 引入多个主机/服务器,协同配合来完成一系列的工作(逻辑上的多个主机,一个主机上部署了多个服务器程序。这些服务器程序也是通过网络通信,在逻辑上和多个主机没有区别)

5.主(Master)/从(Slave)

​ 分布式系统中比较典型的结构。多个服务器节点,其中一个是主,其余是从。以主节点为为,从节点的数据要从主节点上进行同步

6.中间件(Middleware)

​ 一个、一组和业务无关的服务(功能更通用的服务 :数据库、缓存、消息队列)

评价指标
7.可用性(Availability)

​ 系统整体可用的时间 / 总的时间 (可用性,是一个系统的第一要务)

8.响应时间(RT)

​ 衡量服务器的性能,处理一次请求,要消耗多长时间。越小越好

9.吞吐率(Throughout)、并发量(Concurrent)

​ 衡量系统处理请求的能力,是衡量性能的一种方式

点击移步博客主页,欢迎光临~

偷cyk的图

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

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

相关文章

Mysql9安装

目录 一、下载mysql 二、安装 三、配置mysql环境变量 四、mysql初始化和启动 1.以管理员身份运行cmd 2.cd到mysql的安装目录 3.初始化mysql的数据库 4.为Windows系统安装MySQL服务 5.查看一下名为mysql的服务: 6.启动MySQL服务 五、附录 1.系统变量还在&…

CentOS 8中 更新或下载时报错:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare internal mirrorlist

一、错误重现 CentOS Stream 8 - AppStream 0.0 B/s | 0 B 00:00 Errors during downloading metadata for repository appstream: - Curl error (6): Couldnt resolve host name for http://mirrorlis…

昇思25天学习打卡营第18天|生成式-GAN图像生成

打卡 目录 打卡 GAN 博弈函数 博弈过程 GAN 案例 数据集 数据加载与可视化 隐码构造 模型构建 生成器 判别器 损失函数和优化器 模型训练 输出展示-1w张训练样本 输出展示-6w张训练样本 输出展示-6w张-100 epoch 效果展示 部分展示如图-12epoch-6w张 部分展…

Windows系统上Git详细图文安装及使用教程

Git 是一种高效、分布式的版本控制系统,用于代码的跟踪、分支管理和协同工作,支持快速提交、合并和回滚操作。它是开发者工具箱中必不可少的工具之一,广泛应用于软件开发和其他需要版本控制的领域。 1. Git的安装 1.1 Git下载 可以通过以下…

Qt SQLite数据库学习总结

到此为止,就使用Qt进行SQLite数据库的操作,做一次总结 1. Qt中数据库操作的相关概念和类 Qt 数据库编程相关基本概念https://blog.csdn.net/castlooo/article/details/140497177 2.表的只读查询--QSqlQueryModel QSqlQueryModel单表查询的使用总结htt…

微信小程序--点击按钮可新增可删除

案例: html: <view ><view ><view class="guzhang" wx:for="{{inputs}}" wx:key="id" wx:for-item="item" wx:for-index="index"><view class="huanhang"><view class="fontBo…

员工网络监控软件:把控员工网络活动的标尺

在竞争激烈的漩涡之中&#xff0c;企业如同一只不断旋转的陀螺&#xff0c;努力保持着自身的平衡和稳定&#xff0c;而员工的网络活动则是那无形却强大的力量&#xff0c;时刻影响着企业的运转。员工网络监控软件仿佛一根坚固无比的轴心&#xff0c;以其精准的标尺帮助企业实现…

Mindspore框架循环神经网络RNN模型实现情感分类|(六)模型加载和推理(情感分类模型资源下载)

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…

顶级 Vue 管理仪表板和模板

Vue.js 是当今繁忙的 Web 开发领域中最受欢迎的 JavaScript 框架之一&#xff0c;用于创建交互式动态用户界面。Vue.js 的组件反应性及其流畅的数据绑定使其在管理仪表板设计方面占据了主导地位。 本文讨论了一些领先的 ​​Vue 管理员仪表板&#xff0c;它们可以节省您制作 We…

计算机网络之http和https的区别(外加http详解)

http协议和各种协议之间的关系 1、DNS解析&#xff0c;获取到访问服务器的IP 2、HTTP生成请求报文请求&#xff0c;请求访问页面资源 3、TCP协议将报文切割成一份一份报文段后&#xff0c;以可靠的方式进行传输 4、IP协议边搜索边中转&#xff0c;将这些数据包传输给接受方…

k8s 公共服务

修改named.conf。修改第13行和第21行 下面是 named.rfc1912 修改位置&#xff0c;在最后 所以用cp -p 复制文件&#xff0c;保留权限 nslookup 回车&#xff0c;server是看哪个dns 在起作用 dns服务器要配置给所有公共服务节点和 k8s 节点 就在网络文件加个DNS2就行了&…

CSS3雷达扫描效果

CSS3雷达扫描效果https://www.bootstrapmb.com/item/14840 要创建一个CSS3的雷达扫描效果&#xff0c;我们可以使用CSS的动画&#xff08;keyframes&#xff09;和transform属性。以下是一个简单的示例&#xff0c;展示了如何创建一个类似雷达扫描的动画效果&#xff1a; HTM…

docker笔记4-镜像理解

docker笔记4-镜像理解 一、镜像原理之联合文件系统二、镜像原理之分层理解三、commit镜像 一、镜像原理之联合文件系统 UnionFS&#xff08;联合文件系统&#xff09;: Union文件系统&#xff08;UnionFS&#xff09;是一种分层、轻量级并且高性能的文件系统&#xff0c;它支持…

vue2使用univerjs

1、univerjs Univer 提供了一个全面的企业级文档与数据协同的解决方案&#xff0c;支持电子表格、文本文档和演示幻灯片三大核心文档类型。通过灵活的 API 和插件机制&#xff0c;开发者可以在 Univer 的基础上进行个性化功能的定制和扩展&#xff0c;以适应不同用户在不同场景…

【JavaEE】Spring Boot 自动装配原理(源码分析)

一. 前言 我们在写Spring Boot的程序代码的时候, 可以注入很多我们没有定义过的Bean.例如: Autowired private ApplicationContext applicationContext; Autowired public DataSourceTransactionManager transactionManager; Autowired public AutowireCapableBeanFactory …

UnrealEngine摸索(一)——Static Mesh Actor不会阻挡可见性查询解决方法

实际开发中遇到题目所述的问题&#xff0c;对解决方法进行记录 文章目录 问题描述解决方案 问题描述 博主在开发FPS游戏过程中&#xff0c;使用 LineTraceSingleByChannel 进行可视性检测&#xff0c;即其参数 Channel Visiblity&#xff0c;对于命中的第一个物体应用相应的处…

《0基础》学习Python——第十八讲__爬虫/<1>

一、什么是爬虫 爬虫是一种网络数据抓取的技术。通过编写程序&#xff08;通常使用Python&#xff09;&#xff0c;爬虫可以自动化地访问网页&#xff0c;解析网页内容并提取出所需的数据。爬虫可以用于各种用途&#xff0c;如搜索引擎的索引&#xff0c;数据分析和挖掘&#x…

Vue 3项目安装Element-Plus

Element Plus 是一个基于 Vue 3 的现代前端UI框架&#xff0c;它旨在提升开发体验&#xff0c;并为开发者提供高效、优雅的组件。如果你正在使用 Vue 3 进行项目开发&#xff0c;那么安装和集成 Element Plus 是一个不错的选择。在本文中&#xff0c;博主将详细介绍如何在 Vue …

[嵌入式Linux]-常见编译框架与软件包组成

嵌入式常见编译框架与软件包组成 1.嵌入式开发准备工作 主芯片资料包括&#xff1a; 主芯片资料 主芯片开发参考手册&#xff1b;主芯片数据手册&#xff1b;主芯片规格书&#xff1b; 硬件参考 主芯片硬件设计参考资料&#xff1b;主芯片配套公板硬件工程&#xff1b; 软件…

今天我们聊聊C#的并发和并行

并发和并行是现代编程中的两个重要概念&#xff0c;它们可以帮助开发人员创建高效、响应迅速、高性能的应用程序。在C#中&#xff0c;这些概念尤为重要&#xff0c;因为该语言提供了对多线程和异步编程的强大支持。本文将介绍C#中并发和并行编程的关键概念、优点&#xff0c;并…