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

假设一个大系统分为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,一经查实,立即删除!

相关文章

C++_03_C++的增强

本人亦可见 一、C相较于C&#xff0c;实用性增强 1、C相较于C&#xff0c;全局变量检查增强 #include<stdio.h> int m20; //先定义 int m; //再声明 int main() {printf("m %d\n",m); //m20return 0; } //严格意义上来说&#xff0c;先定义后声明…

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

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

设计模式之命令模式

写在前面 本文看下命令设计模式。 1&#xff1a;介绍 1.1&#xff1a;什么时候使用命令设计模式 如果某个对象依赖于外部传入的具体参数来执行具体的操作时&#xff0c;就可以考虑使用命令设计模式&#xff0c;如空调的制冷&#xff0c;制热&#xff0c;小爱同学的唱歌&…

opencv 图像距离变换 distanceTransform

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

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

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

Jenkins中sh函数的用法

在Jenkins的Pipeline中&#xff0c;sh函数的用法 用法一 单个命令字符串包括使用&#xff0c;示例如下&#xff1a; sh echo "Hello, Jenkins!"用法二 多个命令字符串包括命令列表使用&#xff0c;示例如下&#xff1a; sh echo "Step 1" echo "…

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 事件相关电位&#xff08;ERPs&#xff09; 4.4.1 如何获…

使用flask-sqlacodegen自动生成model实体类

使用flask-sqlacodegen自动生成model实体类 依赖库版本如下(供参考)&#xff1a; flask-sqlacodegen 1.1.7sqlalchemy 1.4.36flask-sqlalchemy 3.0.3安装依赖库 pip install -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com sqlalchem…

flutter fl_chart 柱状图 柱条数量较多 实现左右滑动 固定y轴

一、引入插件 pub.dev&#xff1a;fl_chart package - All Versions 根据项目版本&#xff0c;安装可适配的 fl_chart 版本 二、官网柱状图示例 github参数配置&#xff1a;&#xff08;x轴、y轴、边框、柱条数据、tooltip等&#xff09; https://github.com/imaNNeo/fl_c…

【LeetCode】70.爬楼梯

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2…

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

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

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

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

【ribbon】Ribbon的使用与原理

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

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

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

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

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

FPGA中RAM的结构理解

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

WebGL系列教程:WebGL入门

一、WebGL简介 1.1 概述 WebGL(全写 Web Graphics Library)是一种 3D 绘图标准,这种绘图技术标准允许把 JavaScript 和 OpenGL ES 2.0 结合在一起,通过增加 OpenGL ES 2.0 的一个 JavaScript 绑 定,WebGL 可以为 HTML5 Canvas 提供硬件 3D 加速渲染,这样 Web 开发人员就可…

WPF 如何设置全局的订阅发布事件

文章目录 前言代码逻辑修改 总结 前言 我们需要一个全局事件订阅发布功能&#xff0c;实现页面通讯。使两个毫无关系的页面通过一个中间量进行通讯。 代码 IEventAggregator&#xff1a;消息订阅集合 这个是Prism提供的消息订阅功能。使用如下 设置订阅类型&#xff0c;即…

Linux の shell 基本语法

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