单机和集群以及分布式的浅析

假设一个大系统分为A、B、C、D、E五个模块,也可以认为是五个基本的服务,该系统靠这五个模块协同工作,共同为用户提供服务。

单机

单机:显然,单机表名该系统完完全全的部署在该台机器上,拥有完整的服务,这样做的第一个弊端也是很明显的,假如该系统需要承载很高的并发量,那么单台机器很难胜任,因为单台机器的硬件资源是有限的
在这里插入图片描述

集群

那么很容易想到的一个解决方案是将该系统的整套服务部署在多台机器上,这也就是集群的由来,这样提高了并发量(当然具体提高了多少并不能通过服务器的数量而线性的相加),也提高了容错性,因为通过集群处理请求,显然是需要用到负载均衡器来分发请求,这样也保证了某台机器不会负载量过高而宕机
在这里插入图片描述

再看下一个由单机引发的问题,由于A、B、C、D、E模块同属于一个系统,那么任何一个模块的修改,都需要重新编译代码,然后重新部署,很大的修改也就罢了,如果是很微小的修改但又不得不改的情况,重新编译打包这种耗时耗力的操作是不能忍受的,在项目很大的情况更是无法忍受(大型项目重新编译可能需要几小时或者半天,部署也是一样)。
那么集群架构是否会解决上述问题?显然没能解决,反而大大加重了重新部署的工作量,因为是多台机器,每台机器都是整套的服务,那么某个模块的修改,会导致所有部署该服务的机器都要重新部署,在机器部署的数量数量足够多的时候,这对程序员来说也是不能够接受的。
先不谈怎么解决,再看单机的下一个比较具有代表性的问题,如果A、B模块是IO密集型的服务(例如网络IO),C、D模块是计算密集型的服务(也叫CPU密集型任务,例如矩阵乘法、3D建模等等),E模块相对普通。那么单机很容易暴露出一个问题,即就一台机器,这个资源显然分配是不合理的,E模块不应该和AB模块或是CD模块等同地位的抢占CPU资源或是网络带宽的资源。对于AB和CD这两个模块更是竞争激烈
集群也不能解决这个问题,因为集群本质上就是把单机水平扩展成了多台机器,每台机器资源还是同单机一样资源分配是不合理的。
怎么解决?这就需要用到分布式。

分布式

分布式概念:将一个大的系统拆分成多个不同的模块,每个或每几个模块部署在一台服务器上,所有服务器协同工作共同提供服务,每台服务器称作分布式的一个结点,每个结点又可以根据并发量的不同,把某个结点进行集群化部署在多台服务器。
在这里插入图片描述

根据分布式的概念,可以将AB、CD、E模块单独放在一个服务器上,即第一台服务器有着AB模块、第二台服务器上有着CD模块、E模块单独在第三台服务器上。这样很好的解决了单机和集群共有的第三个问题,因为IO密集型和CPU密集型模块分别部署在不同的服务器上,针对第一台服务器可以提高服务器的网络带宽、内存配置(IO密集),针对第二台服务器可以配备更好的CPU硬件资源,第三台服务器普通配置即可,那么这样很好的解决了不同模块资源分配不合理的问题且还可以针对并发量要求很高的模块集群化部署,例如AB模块,第一台服务器可以扩展为多台服务器共同提高并发的承载量
第二个问题能解决吗?也即某个模块的修改导致整个系统的重新编译在部署?在分布式的环境下显然不存在这个问题,某个模块需要修改,修改完之后只需要单单编译这一小模块然后部署其所在的某台服务器即可,不会影响其他模块,这大大提升了工作效率。

分布式面临的问题:
1、如何更好的把一个大的系统划分为一个个模块?
2、因为整个系统需要所有模块协同工作,那么必然涉及到远程调用问题(rpc)
即:节点1服务器上的服务1如何调用节点2服务器上的服务2的业务方法?
节点1服务器上的服务1如何调用节点1服务器上的服务2的业务方法?

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

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

相关文章

集成学习——Boosting算法:Adaboost、GBDT、XGBOOST和lightGBM的简要原理和区别

1、Boosting算法 Boosting算法是通过串联的方式,将一组弱学习器提升为强学习器算法。它的工作机制如下: (1)用初始训练集训练出一个基学习器; (2)依据基学习器的表现对训练样本分布进行调整&…

opencv 图像距离变换 distanceTransform

图像距离变换:计算图像中每一个非零点距离离自己最近的零点的距离,然后通过二值化0与非0绘制图像。 #include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dst…

洛必达法则和分部积分的应用之计算数学期望EX--概率论浙大版填坑记

如下图所示,概率论与数理统计浙大第四版有如下例题: 简单说就是:已知两个相互独立工作电子装置寿命的概率密度函数,将二者串联成整机,求整机寿命的数学期望。 这个题目解答中的微积分部分可谓是相当的坑爹,…

vue/cli 自定义配置

vue/cli 自定义配置 1、更改默认的端口号8080 只需要更改vue.config.js文件 1、更改默认的端口号8080 只需要更改vue.config.js文件

脑电信号处理与特征提取——4.脑电信号的预处理及数据分析要点(彭微微)

目录 四、脑电信号的预处理及数据分析要点 4.1 脑电基础知识回顾 4.2 伪迹 4.3 EEG预处理 4.3.1 滤波 4.3.2 重参考 4.3.3 分段和基线校正 4.3.4 坏段剔除 4.3.5 坏导剔除/插值 4.3.6 独立成分分析ICA 4.4 事件相关电位(ERPs) 4.4.1 如何获…

什么是UE像素流送,像素流推流是什么原理?

游戏开发者通常在运行游戏逻辑时会将游戏渲染到屏幕的同一台设备上来运行虚幻引擎应用,多人联网游戏可能会在应用程序的多个实例之间分发部分游戏逻辑,但每个单独的实例仍然会为自己的玩家在本地渲染游戏。即使是使用 HTML5 部署选项创建可以在 Web 浏览…

解决@Scope(“prototype“)不生效的问题

目录 Scope(“prototype“)不生效Scope(“prototype“)正确用法——解决Bean多例问题 1.问题,Spring管理的某个Bean需要使用多例2.问题升级3. Spring给出的解决问题的办法(解决Bean链中某个Bean需要多例的问题) Scope(“prototype“)不生效 …

【ribbon】Ribbon的使用与原理

负载均衡介绍 负载均衡(Load Balance),其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同…

【《Go编程进阶实战:开发命令行应用、HTTP应用和gRPC应用》——指导你使用Go语言构建健壮的、生产级别的应用程序】

谷歌在2009年发布了Go编程语言,并于2012年发布了1.0版。Go语言具有强大的兼容性,一直用于编写可扩展的重量级程序(命令行应用程序、关键基础设施工具乃至大规模分布式系统)。凭借简单性、丰富的标准库和蓬勃发展的第三方软件包生态系统,Go语言…

工程安全监测无线振弦采集仪在建筑物中的应用

工程安全监测无线振弦采集仪在建筑物中的应用 工程安全监测无线振弦采集仪是一种用于建筑物结构安全监测的设备,它采用了无线传输技术,具有实时性强、数据精度高等优点,被广泛应用于建筑物结构的实时监测和预警。下面将从设备的特点、应用场…

FPGA中RAM的结构理解

FPGA中RAM的结构理解 看代码的过程中对RAM的结构不是很理解,搞脑子一片浆糊,反复推算,好不容易理清了思路,记录下来,防止忘记。开辟的RAM总容量为128bytes,数据的位宽为32位(即一个单元有32bit…

Linux の shell 基本语法

变量 shell中变量比较特殊,变量名和等号之间不能有空格。其它的跟常见的变成语言类似 命名规则: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线 _。 不能使用标点符号。…

Flask 创建文件目录,删除文件目录

项目结构 app.py from flask import Flask, render_template, request, redirect, url_for import osapp Flask(__name__) BASE_DIR os.path.abspath(os.path.dirname(__file__)) FILE_DIR os.path.join(BASE_DIR, testfile)app.route(/, methods[GET, POST]) def index():…

jenkins

Gitlab添加钩子 测试钩子 添加完成后,下面会出现钩子选择。点击test中的,push event。 出现successful,既添加成功。 如果添加失败,报错,更改Network

JMerter安装配置以及使用(笔记记录)

JMerter安装配置以及使用(笔记记录) 安装JDK安装JMeterJMeter使用元件执行的顺序参数详解参数配置之CSV数据文件设置断言响应断言JSON断言 数据提取XPath提取器JSON提取器 JMeter属性JMeter录制脚本JMeter直连数据库逻辑控制器如果(IF&#x…

数据库概述和DDL语句(学会并使用数据库day1)

数据库概述和DDL语句(day1) 一、数据库概述概念数据库的集中式控制有什么优点数据库分类mysql数据库mysql简介基本术语数据表的组成 数据库管理系统数据库管理系统、数据库和表的关系 二、SQL的概念三、SQL语句分类1、SQL语句被分为四大类2、MySQL的语法…

Databend 开源周报第 103 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 创建网络策略 …

Blender自动化脚本,无人值守批量渲图/渲视频

渲染视频是个非常耗时的大工程,如果要渲染多个视频或者每个视频还需要切换不同的贴图、颜色等,工作量就更离谱了,所以不得不用脚本实现自动化。 Blender的脚本是用Python编写,比PS的js要方便很多。再下载一套Blender对应版本的AP…

24.实现线性拟合和相关系数(matlab程序)

1.简述 1. 基本语法 1.1 corr函数基本语法 语法 说明 rho corr(X) 返回输入矩阵X中每对列之间的两两线性相关系数矩阵。 rho corr(X, Y) 返回输入矩阵X和Y中每对列之间的两两相关系数矩阵。 [rho, pval] corr(X, Y) 返回pval,一个p值矩阵&#xff0c…

redis安装

安装redis 安装依赖环境 yum install -y gcc cd /opt tar -xf redis-5.0.7.tar cd redis-5.0.7/ make && make install PREFIX/usr/local/redis installvim /opt/redis-5.0.7/utils/install_server.shcd /opt/redis-5.0.7/utils ./install_server.sh Please select the…