需要单机还是集群部署_单机、分布式、集群的区别与联系

一、单机结构

  一个系统业务量很小的时候所有的代码都放在一个项目中,然后这个项目部署在一台服务器上就好了,整个项目所有的服务都由这台服务器提供。这就是单机结构。单机结构的缺点是显而易见的,单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求。此时便出现了集群模式。

二、集群结构

  单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”。集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍(有几个节点就相当于提升了这么多倍)。

  但问题是用户的请求究竟由哪个节点来处理呢?最好能够让此时此刻负载较小的节点来处理,这样使得每个节点的压力都比较平均。要实现这个功能,就需要在所有节点之前增加一个“调度者”的角色,用户的所有请求都先交给它,然后它根据当前所有节点的负载情况,决定将这个请求交给哪个节点处理。这个“调度者”有个牛逼了名字——负载均衡服务器

  集群结构的好处就是系统扩展非常容易。如果随着你们系统业务的发展,当前的系统又支撑不住了,那么给这个集群再增加节点就行了。但是,当你的业务发展到一定程度的时候,你会发现一个问题——无论怎么增加节点,貌似整个集群性能的提升效果并不明显了。这时候,你就需要使用微服务结构了。

三、分布式结构

  从单机结构到集群结构,你的代码基本无需要作任何修改,你要做的仅仅是多部署几台服务器,每台服务器上运行相同的代码就行了。但是,当你要从集群结构演进到微服务结构的时候,之前的那套代码就需要发生较大的改动了。所以对于新系统我们建议,系统设计之初就采用微服务架构,这样后期运维的成本更低。但如果一套老系统需要升级成微服务结构的话,那就得对代码大动干戈了。所以,对于老系统而言,究竟是继续保持集群模式,还是升级成微服务架构,这需要你们的架构师深思熟虑、权衡投入产出比。

  下面开始介绍所谓的分布式结构。

  分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。

  举个例子,假设需要开发一个在线商城。按照微服务的思想,我们需要按照功能模块拆分成多个独立的服务,如:用户服务、产品服务、订单服务、后台管理服务、数据分析服务等等。这一个个服务都是一个个独立的项目,可以独立运行。如果服务之间有依赖关系,那么通过RPC方式调用。

  这样的好处有很多:

  1、系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界非常明确,排错也变得相当容易,开发效率大大提升。

  2、系统之间的耦合度降低,从而系统更易于扩展。我们可以针对性地扩展某些服务。假设这个商城要搞一次大促,下单量可能会大大提升,因此我们可以针对性地提升订单系统、产品系统的节点数量,而对于后台管理系统、数据分析系统而言,节点数量维持原有水平即可。

  3、服务的复用性更高。比如,当我们将用户系统作为单独的服务后,该公司所有的产品都可以使用该系统作为用户系统,无需重复开发。

四、三者之间的区别和联系

  以下漫画图很形象地说明三者之间的区别和联系:

842e98fe6d12eec11ad223f37381b353.png

五、总结

  集群是个物理形态,分布式是个工作方式。只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;一个程序或系统,只要运行在不同的机器上,就可以叫分布式,嗯,C/S架构也可以叫分布式。
集群一般是物理集中、统一管理的,而分布式系统则不强调这一点。所以,集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。

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

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

相关文章

ygo游戏王卡组_游戏王:二线卡组脱颖而出的战将,混沌青眼卡组,仪式卡组的骄傲...

这次我们要说的卡组是在我的群里举办的比赛,脱颖而出的前三名卡组之一,这次我们进行的一场非常小规模的随机匹配比赛,而这次比赛的规则比较多,参赛的卡主也并不是很多只有16名,在整个游戏王系列里名不见经传的16个系列…

拖动卡顿_四招教你解决PS软件卡顿问题!

你是不是经常会遇到这样的问题?刚装的Ps速度很快,使用一段时间以后发现越来越卡,时不时还会死机崩溃?大多数人遇到这种问题都是选择重装软件,或者重做系统,耗时耗力不说,过不了多久又会出现同样…

python单元测试mock_python3的单元测试模块mock与性能测试模块cProfile

我们知道写完了代码需要自己跑一跑进行测试,一个写好的程序如果连测试都没有就上到生产环境是不敢想象的,这么做的人不是太自信就是太无知。传统测试无非就是自己运行一下程序查看结果,或者前后端服务进行联调,这里要说的是走正规…

极光实时监听怎么调用_源码分析 Sentinel 实时数据采集实现原理(图文并茂)

本篇将重点关注 Sentienl 实时数据收集,即 Sentienl 具体是如何收集调用信息,以此来判断是否需要触发限流或熔断。Sentienl 实时数据收集的入口类为 StatisticSlot。我们先简单来看一下 StatisticSlot 该类的注释,来看一下该类的整体定位。St…

awd赛题的flag是什么意思_网上说的“立flag”是什么意思?

展开全部如果你是一个经常混进b站的人的话,那你就会发现32313133353236313431303231363533e58685e5aeb931333363366233经常有人说出立了个flag或者是flag已立,那么这立flag是什么意思?立flag是什么梗:立flag指的是明确一件事情的结…

python股票网格交易法详解_股票最全“低买高卖”网格交易大法,值得收藏!

网格交易法,可以简单理解为在既定网格中实行“跌买涨卖”。首先需要制定一个【网格系统】,主要包括网格格数、网格密度、最大压力价格和最小支撑价格四大要素。当标的价格跌破一个网格密度时,就买入相应的仓数,每涨破一个网格密度…

python命令行tab补全_python命令行下按tab建补全的方法

此方法只在centos6上测试通过,其它系统木有测试1、在用户家目录下创建一个名字叫 .pythonstartup 的隐藏文件,写入如下内容:# python startup fileimport readlineimport rlcompleterimport atexitimport os# tab completionreadline.parse_a…

文字描边_6招迅速做出炫酷PPT字效!|10分钟干货第二期(文字描边)

不点蓝字,我们哪来故事?艺术让一切枯燥变有趣 作者 | 易焦躁星人微信号 | wyx19911003每周一篇,干货满满建议收藏,慢慢实践PPT酷炫【字效】第二弹来啦!平时做PPT无从下手没灵感?根本原因还对功能实践的不够…

华为手机鸿蒙系统怎么样_华为自研操作系统“鸿蒙”已用于华为手机

重要信息有网友近日在社交网络上曝光了华为的自研操作系统,命名为“鸿蒙”,其已用于华为手机中(安全部分)。来自上海交通大学的一份PPT演示照片,图中显示,某教授领导华为操作系统团队开发了自主产权操作系统——鸿蒙。根据PPT描述…

chrome浏览器上传文件延迟_解决谷歌Chrome浏览器上传图片反应慢的办法

谷歌chrome浏览器本来非常好用,但是可能有的人在更新版本或重装电脑后,用着用着突然发现上传图片或文件的时候居然直接卡死!只能强制关闭后用ie上传,为此笔者也一度很苦恼。笔者在网上搜索答案后,并没有得到有效的帮助&#xff0c…

mysql配置两个猪数据库_Linux下安装启动多个Mysql

步骤如下:一、编译安装两个mysql,步骤如下安装第一个数据库(主数据库)(红色部分为默认数据库文件路径,可改成其他如:data、var等)tar zxvf mysql-6.0.11-alpha.tar.gzcd mysql-6.0.11-alpha./configure --prefix/usr/local/mysql3…

linux 两个mysql_Linux下安装两个MySQL的方法

问题的产生:在已有的Red Hat Enterprise Linux AS 3.0系统上已经运行了一套web程序,使用MySQL4, tomcat41, 现在又要求安装一套新程序,依旧使用该tomcat41, 但数据库变为mysql5。注意事项:新的程序需要注意字符集的问题&#xff0…

mysql启动卡死_mysql无法启动服务,mysql卡死解决办法

今天在用mysql的innodb引擎时突然出现InnoDB registration as a STORAGE ENGINE failed.Unknown/unsupported table type: innodb.系统变得无法正常启动了,经过分析做个记录以借再次碰到此类问题的同学参考。前几天,启动时,突然报1067系统错误…

ef mysql db first_Net Core使用EF之DB First

一.新建一个.net core的MVC项目新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖二.使用Nuget添加EF的依赖输入命令: Install-Package Microsoft.EntityFrameworkCore.SqlServer安装成功后就可以在依赖项中看到注意执行命令…

kali装电脑_教你Kali Linux怎么安装Nessus软件

Nessus是系统漏洞扫描与分析软件,但Nessus在Kali Linux上的安装可不简单,没有提供一个图形化的安装借口,下面小编就给大家介绍下如何在Kali Linux上安装Nessus。用w3m命令在终端下打开http://www.tenable.com/products/nessus/select-your-op…

mysql创建表属性引_【学习之Mysql数据库】mysql数据库创建表的属性详解

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼MySQL中create table语句的基本语法是:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]TEMPORARY:该关键字表示用MySQL create table新建…

vue中src文件夹下各文件_Win10下与虚拟机中的linux共享文件夹

Win10主机和Vmware linux共享文件夹1.首先确保虚拟机中的linux能ping通主机,证明虚拟机是可以访问到的主机的(这个不会可百度)2.右击你想要共享的文件夹选择属性,点击共享,同时加入一个everyone用户,权限为读取/写入3.然后点击高级…

asp.net mysql 中文乱码_mysql4导入mysql5中文乱码问题

数据库里存储的数据的编码似乎和表的编码类型无关。如果你的网页编码类型为utf-8,而且是用mysqldump导出的话,在create table 后面会有一句DEFAULT CHARSETlatin1;把这句话改成DEFAULT CHARSETutf8;一般在数据库中就不会乱码了。在mysql数据库中导出数据…

链表的基本操作 java_Java_实现单链表-基本操作

1 packageofficeCoding;23 importjava.util.ArrayList;4 importjava.util.Stack;56 /**7 * 从尾到头遍历链表 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList8 *9 *authorAdministrator10 */11 class ListNode {//单链表节点构建12 intval;13 ListNode next…

java 不同包_Java项目中不同包的命名及作用

①在vo或者domain包中定义bean类,主要是类的属性,这个类跟数据库中的某个表的字段一致。②dao包中主要是存放用于操作数据库完成业务逻辑方法的接口。③dao.impl这个包存放着这样的一个类,这个类主要是实现dao中定义的方法,完成具…