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

news2024/11/15 7:13:49

文章目录

    • @[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.coloradmin.cn/o/1956857.html

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

相关文章

解决“QtCreator无法呼出搜狗输入法“问题

由于在Ubuntu系统上,QtCreator软件默认使用IBus类型的输入法,而搜狗输入法是fcitx类型的,所以需要在Linux的系统设置 -->区域与语言 里 -->勾选 fcitx类型,如图(1)所示。     这里以QtCreator 4.5.2Ubuntu 18为例&#xf…

学习测试14-实战3-复习-使用CANoe打开半成品

数据 链接: https://pan.baidu.com/s/1k0SFq0luDvEbqimFgtfyKg?pwd9a5t 提取码: 9a5t 复制这段内容后打开百度网盘手机App,操作更方便哦 1,导入信号、报文、节点 2,导入数据库 3,导入can代码 4,导入环境变量 5&#x…

RTP协议基础

概述 1. 基本概念 RTP协议,全称为Real-time Transport Protocol(实时传输协议)是一种用于在IP网络上传输音频、视频等实时数据的网络协议。 在流媒体(流媒体就是指可在线/实时观看音视频的互联网产品)数据传输过程中&…

抄作业-跟着《React通关秘籍》捣鼓React-playground-上集

文章目录 前言1. 搭建react 开发环境2、react hooks 知识3. 目标:跟着小册实现 react-playground3.1 整体布局初始化项目使用Alloment 来实现左右分屏的拖拉功能 3.2 代码编辑器Monaco Editor 3.3 实现了多文件的切换用 useContext 来共享数据。优化 tab的样式&…

Vue响应式的原理

一. Vue响应式原理的核心概念 1. Vue响应式原理基于以下核心概念: ① 响应式对象:Vue使用Object.defineProperty()来 reactive(反应)对象中的属性,使其变化可以被检测。 注意: ★ Object.definePropert…

Python字符串处理技巧:一个小技巧竟然能省下你一半时间!

获取Pyhon及副业知识,关注公众号【软件测试圈】 效率翻倍的秘密:Python字符串操作的5个惊人技巧 在Python编程中,字符串处理在数据分析、Web开发、自动化脚本等多个领域都有广泛应用。Python提供了一系列强大的字符串处理函数,能够…

蚓链数字化生态平台:构建城市智能商业,引领协同发展新潮流

​在当今数字化飞速发展的时代,城市商业的运行模式正在经历着数字化变革。蚓链数字化生态平台应运而生,以其强大的功能和创新的理念,成为构建城市智能商业枢纽中心的关键力量,推动着平台互通、业务贯通、管理协同的全新发展格局。…

MySQL数据库-索引和视图

一、视图 1.什么是视图 MySQL中的视图(view)是一种虚拟表,其内容由查询定义,视图本身并不包含数据。视图看起来和真实的表完全相同,但其中的数据来自定义视图时用到的基本表,并且在打开视图时动态生成&am…

【JavaWeb项目】——外卖订餐系统之登入、登入后显示餐品信息、用户注册、注销部分

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

什么是内网ip地址?如何查询电脑内网ip地址

在数字化时代,互联网已经成为我们日常生活和工作中不可或缺的一部分。无论是家庭网络还是企业办公环境,每台接入网络的设备都需要一个独特的标识来区分彼此,这个标识就是IP地址。IP地址全称为“互联网协议地址”,是设备在网络中的…

springboot整合junit-用于测试用例

package impl;public interface BookDao {public void save(); }第一步:打开软件,点击file,点击new 然后选择module,在右侧选择springboot 第二步:选择配置和JDK以及java版本 ①选择maven类型 ②选择JDK1.8版本 ③选…

react中路由懒加载

// 1.引入方法,用于创建路由实例 // createBrowserRouter是用于创建history模式 // createHashRouter是用于创建hash模式 // 路由模式的切换只需要更改创建路由实例的方法就行了,其他地方不需要更改 import { createBrowserRouter,createHashRouter } fr…

deployment

一.deployment rc和rs控制器都是控制pod的副本数量的,但是,他们两个有个缺点,就是在部署新版本pod或者回滚代码的时候,需要先apply资源清单,然后再删除现有pod,通过资源控制,重新拉取新的pod来实…

【Vue3复习】Vite创建项目报错解决

报错: Cannot find package ‘vite’ 出错原因分析 使用命令npm create vuelatest创建项目时,没有按顺序执行以下提示命令 解决 依序执行这三条指令 注意 如果没有执行 npm install 这条指令,直接用VS Code打开项目时,env.d.…

职场英语培训柯桥成人学外语|邮件里别乱用“Dear”,老外才不会这么写!

写邮件是职场上的必修课,而一封好的英语邮件应当从适合的称呼开始。 说到称呼,你的脑子里是不是冒出了一个单词“Dear” 从小我们就被教育写英语作文时,开头先来个Dear,结尾写个Sincerely,简直不要太顺手~ 然&#xff…

HDU1071——The area,HDU1072——Nightmare,HDU1073——Online Judge

目录 HDU1071——The area 题目描述 运行代码 代码思路 HDU1072——Nightmare 题目描述 运行代码 代码思路 HDU1073——Online Judge 题目描述 运行代码 代码思路 HDU1071——The area 题目描述 Problem - 1071 运行代码 #include <iostream> #include &…

CloudWeGo新手教程视频:手把手教你从0到1打造电商商城微服务demo

概要 Gomall 电商项目视频教程&#xff0c;由 CloudWeGo 技术社区出品&#xff0c;旨在帮助开发者掌握 Go 语言项目开发和微服务架构。教程通过演示 CloudWeGo 项目中的 Kitex 和 Hertz 框架&#xff0c;引导 Go 初学者学习常见的技术和开源中间件。 观看教程请访问&#xff…

高效灵活 | 前端利器 Vue.js 是一个构建用户界面的渐进式框架。

Vue.js 是一个构建用户界面的渐进式框架。 官网&#xff1a;https://cn.vuejs.org/ 基本特性 数据驱动&#xff1a;通过响应式机制&#xff0c;实现数据的变化自动触发视图的更新。 组件化架构&#xff1a;高度可复用的组件结构&#xff0c;提升代码组织性和可维护性。 虚拟…

爬虫-实战爬取虎扑ACG帖子

要求如下: 爬取虎扑步行街 ACG 版面的数据,要求使用多线程来并发爬取。范围是第一页的所有帖子,每个帖子包含标题、主题内容和第一页的所有回复内容。最后打印出爬到的所有帖子的标题。 网址是:ACG圈 - 虎扑社区。 针对上面的要求,我们进行分析: 首先是要使用多线程范…

YOLO5项目目录最强解析

YOLO5项目目录解析 YOLOv5 项目目录下的文件和目录的结构&#xff0c;以下是对每个目录和文件的解释&#xff1a; 目录 &#x1f4c1; .github: 存放 GitHub 相关配置和文件&#xff0c;如 GitHub Actions 工作流文件、Issue 模板等&#xff0c;用于自动化构建和持续集成等功…