分布式系统,你了解多少呢

news2024/12/29 10:07:37

本期只是简单了解,想要深入学习,还需要看看其他资源~

目录

一、单机架构

二、数据库和应用分离

三、负载均衡——应用服务器

四、读写分离——数据库主从结构

五、引入缓存——冷热数据分离

六、分库分表——数据库扩展空间

七、微服务——进一步拆分应用服务器


一、单机架构

        在了解分布式之前,我们当然是要先了解一下什么是单机架构?

        单机架构,从字面就可以理解,就是只有一台服务器,该服务器来负责所有工作~

示图:

  • 上述中的应用服务,也就是我们以前开发过的,例如我做的是Java-Spring,就是写了一个HTTP服务器
  • 上述的数据库服务,也是我们用过的——MySQL,MySQL其实本来就是一个客户端服务器结构的程序,他的本体是MySQL服务器(本体就是存储和组织数据的部分)。既然MySQL就是一个客户端服务器,那谁是他的客户端呢,应用服务就是他的客户端,就是上述所说的HTTP服务器~
  • 上述中,也可以不要数据库服务,直接在应用服务中解决数据问题,但这种实现起来更麻烦
  • 当遇到服务器不够用时,解决办法:1、开源:引入更多的硬件资源-但这上限要取决于该主机的主板的扩展能力2、节流:在软件上优化,对于程序员水平要求较高
  • 在单机架构,如果说硬件资源被我们充分利用后,还是不满足我们的使用,也就是一台主机应付不了了,此时就可以引入更多的主机,一旦引入多台主机,该系统就叫做是“分布式系统”

二、数据库和应用分离

字面意思,就是将上述的应用服务和数据库服务分离开,示图:

  • 应用服务器,内部可能会包含很多的业务逻辑,可能会比较吃CPU和内存
  • 数据库服务器,需要更大的硬盘空间,更快的数据访问速度,可以配置更大硬盘的服务器,甚至还可以上SSD(固态硬盘) 
  • 综合上述服务器的特点,为了达到更高的性价比,我们可以给不同的服务器配置不同的硬盘

三、负载均衡——应用服务器

        负载均衡,就是当我们引入多台主机作为应用服务器时,要使用负载均衡,使得各个应用服务器所承载的压力是相对来说比较平均的,示图:

  • 由于应用服务器可能会比较吃CPU和内存,所以当CPU和内存吃完了,应用服务器就顶不住了,因此引入更多的应用服务器,但又担心,请求随机分配而导致可能都分配都同一台主机上,因此就需要负载均衡了~
  • 对于负载均衡器来说,有很多的负载均衡的具体算法,例如:根据用户id,再通过模运算来分配
  • 还有就是不用担心负载均衡不够用了怎么,首先负载均衡就相当于公司领导,应用服务器就是普通员工,所以领导只管分配任务,也就是请求量的承担能力会远超过应用服务器;其次,就算是请求量太大了,负载均衡器扛不住了,我们大可以引入更多的负载均衡器~
  • 小提示:机器变多了,管理成本就会提高,出错率也会提高

四、读写分离——数据库主从结构

        因为在绝大多数实际应用场景中,读的频率是要比写高很多的,因此将读写分离,进一步提升性能,示图:

  • 主服务器一般是一个,从服务器有多个(一主多从)~
  • 同时 从 数据库通过负载均衡的方式,让应用服务器进行访问~

五、引入缓存——冷热数据分离

        数据库有个天然问题就是,响应速度慢!再结合,数据遵循的二八原则,因此我们把数据区分为“冷热”,热点数据放到缓存中,缓存的访问速度是比数据库快非常多的~示图:

  • 存储服务器中,存储的是完整数据
  • 缓存服务器中只存放一小部分的热数据-百分之二十的数据能够支持百分之八十的访问量~实际情况略有差异~ 

六、分库分表——数据库扩展空间

        引入分布式系统,不仅会面临更高的请求量,也会面临更大的数据量,也就是说,会存在一台服务器存不下数据,例如存储视频,可能就会导致这种问题,图示:

  • 情况一:表特别大,要拆分表
  • 情况二: 库特别大,拆分库,每个数据库服务器存储一部分数据库

七、微服务——进一步拆分应用服务器

        当业务越来越庞大时,一个服务器程序中可能有很多的业务,就会导致服务器的代码越来越复杂。而为了便于维护代码,就可以把一个复杂的服务器拆分成更多的,功能更单一的,但是更小的服务器——微服务

图示:

  • 服务器的种类和数量增加
  • 应用服务器复杂后,维护的人就要增多,微服务更利于给人划分领域,把这些人组织好,按照功能,拆分成多组微服务,就可以有利于人员的组织结构分配了,也就是说,微服务就是解决了人的问题
  • 系统的性能下降。为保证下降不能太多,就需要引入更多的机器,更多的硬件资源~【拆分出来的服务,多个功能之间要更依赖网络通信,而网络通信的速度很可能比硬盘还要慢】
  • 可用性受到影响。服务器多,出问题的概率增加~【需要更丰富的监控报警,以及配套的运维人员】
  • 可以给不同的额服务进行不同的部署

本期只是简单了解,想要深入学习,还需要看看其他资源~

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

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

相关文章

性能测试常见的测试指标

一、什么是性能测试 先看下百度百科对它的定义 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环境下系统性能…

Rtab-map

Rtab-map -- 开源 2014 about 如何实现闭环检测 可视化slam 应用于摄像头上 原理:数据结构,点中存储彩色图,深度图,和用来做odomtry得位置,可以认为图片,location和image都是点 将图片解析为一些feature…

摄像头的调用和视频识别

CV_tutorial3 摄像头调用实时播放保存视频 运动目标识别帧差法背景减除法 摄像头调用 创建视频捕捉对象:cv2.VideoCapture() 参数为视频设备的索引号,就一个摄像投的话写0默认; 或者是指定要读取视频的路径。 实时播放 import cv2 import …

【算法】经典的八大排序算法

点击链接 可视化排序 动态演示各个排序算法来加深理解,大致如下 一,冒泡排序(Bubble Sort) 原理 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过多次比较和交换相邻元素的方式,将…

实战 图书馆系统管理案例

config :敏感的配置一般都是在配置中心配置,比如consul或者阿波罗上面controller :写一些handler的,拿到参数要去调用service层的逻辑。(只负责接受参数,怎么绑定参数,要去调用哪个service的&am…

QT6修改程序图标和名字以及打包部署

首先确定已经编译成功无错误 修改窗口的名字 修改图标 当有pro工程文件时, 只需要将ico文件放在工程文件的同级文件夹中,然后在pro文件中加入RC_ICONSico文件的名字 当使用cmake建立工程时 参考:https://blog.csdn.net/chqaz123/article…

PowerBuilder调用外部VB6 ActiveX EXE公共对象

学习的同时习练PowerBuilder对VB6 ActiveX exe公共对象的调用,初步感觉PowerBuilder调用DLL还是要求比较严格的,APP和powerbuilder本身都比较脆弱、易崩溃,因此, 1. 直接调用外部DLL时,传递地址参数,尽量不…

音频接口电路的PCB设计注意事项

Audio接口是音频插孔,即音频接口,可分为Audio in接口和Audio out接口。音频接口是连接麦克风和其他声源与计算机的设备,其在模拟和数字信号之间起到了桥梁连接的作用。 其余走线要求如下: 1、所有CLK信号建议串接22ohm电阻&#…

【零基础算法】Vector动态数组

为什么开始先更新数据结构?博主其实一开始也不怎么喜欢调这些数据,觉得用C语言造轮子才是最好的。后面学习过程中学习的算法逐渐复杂,实际上会发现,了解和调用一些已经写好的库工具是很方便的一件事,我们需要做的是知道…

计算机竞赛 基于机器视觉的手势检测和识别算法

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…

伺服电机驱动器EMC处理方案

伺服驱动器内部也有低压单元, 很可能受到驱动器外围设备的噪音干扰,受到干扰的信号可能会引起设备做出意想不到的动作 为防止伺服驱动器和其外围设备之间的相互电磁干扰, 可根据采取以下的对策: ● 请务必使驱动器及电机良好的接…

USB与蓝牙通信原理图设计

蓝牙模块设计: USB2.0 ----ESD保护芯片---- USB转串口芯片(CP2104-F03-GMR)--------- PTR5618蓝牙模块 ---------- PTR5618的GPIO0\GPIO1作为IIC与EEPROM芯片通信 (AT24CS04-STUM-T) 磁珠的作用是一直EMI干扰。 一…

《Go 语言第一课》课程学习笔记(十二)

函数 Go 函数与函数声明 在 Go 语言中,函数是唯一一种基于特定输入,实现特定任务并可返回任务执行结果的代码块(Go 语言中的方法本质上也是函数)。在 Go 中,我们定义一个函数的最常用方式就是使用函数声明。 第一部…

虚拟直播从0到1全套解决方案,码住这个神器,小白也能轻松涨粉过万!

直播行业历经十余年生长,用户规模持续上升,成为平台经济领域的中流砥柱。同时,元宇宙的兴起也推动了虚拟现实等先进技术在直播行业的应用,越来越多的老板开始尝试使用虚拟直播完成各类形式的直播活动,与传统型的直播间…

Web核心基础总结

尚硅谷课程:293-尚硅谷-Filter-什么是Filter过滤器_哔哩哔哩_bilibili JavaWeb核心技术点: Servlet程序、Filter过滤器、Listener监听器、jsp页面、EL表达式、JSTL标签库、jQuery框架、Cookie技术、Session会话、JSON使用、Ajax请求, 第一…

独立服务编排逻辑引擎:jvs-logic服务原子组件介绍

逻辑引擎的本质是可视化的服务编排是指使用图形化工具、配置和管理原子服务间的工作步骤和调用关系。这种方法可以快速的实现业务功能,使非开发人员也能轻松地创建和管理服务的工作流程。 可视化服务编排工具提供了直观的界面和丰富的功能,以及便捷的执行…

【 ARMv9 Cluster BUS QoS 配置】

文章目录 ARM Cluster QoS ARM Cluster QoS QoS(Quality of Service,服务质量)在 ARM 架构中,主要指的是一种机制,它可以控制和管理系统资源(如内存、总线带宽等)的使用,以满足各种…

关于#include<bits/stdc++.h>的说明

关于#include<bits/stdc.h>的说明 在看C/C竞赛题时&#xff0c;经常看到#include<bits/stdc.h>。什么意思呢&#xff1f; 有人称<bits/stdc.h>为万能头文件。其 优点&#xff1a;   1、在竞赛中节约时间。   2、减少了编写所有必要头文件的工作量。  …

SSM - Springboot - MyBatis-Plus 全栈体系(二)

第一章 Maven 三、Maven 核心功能依赖和构建管理 1. 依赖管理和配置 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题&#xff0c;使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程…

安全帽人脸联动闸机开关算法

安全帽人脸联动闸机开关算法通过yolov7python网络模型深度学校框架 &#xff0c;安全帽人脸联动闸机开关算法能够判断人员是否穿戴规定的工装是不是现场人员&#xff0c;当穿戴合规且为现场人员&#xff0c;闸机门禁才打开。YOLO的结构非常简单&#xff0c;就是单纯的卷积、池化…