理解分布式和集群的区别

article/2025/9/1 16:13:52

简单理解:

分布式:一个业务分拆多个子业务,部署在不同的服务器上

集群:同一个业务,部署在多个服务器上

一句话,就是:“分头做事”与“一堆人”的区别

图文理解:

详细理解:

单机结构

我想大家最最最熟悉的就是单机结构,一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构。

那么,单机结构有啥缺点呢?我想缺点是显而易见的,单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求。此时便出现了集群模式,往下接着看。

集群结构

集群模式在程序猿界有各种装逼解释,有的让你根本无法理解,其实就是一个很简单的玩意儿,且听我一一道来。

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

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

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

注:集群模式需要做好session共享,确保在不同服务器切换的过程中不会因为没有获取到session而中止退出服务。

一般配置Nginx*的负载容器实现:静态资源缓存、Session共享可以附带实现,Nginx支持5000个并发量。

分布式结构

先来对前面的知识点做个总结。

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

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

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

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

这样的好处有很多:

  1. 系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界非常明确,排错也变得相当容易,开发效率大大提升。
  2. 系统之间的耦合度降低,从而系统更易于扩展。我们可以针对性地扩展某些服务。假设这个商城要搞一次大促,下单量可能会大大提升,因此我们可以针对性地提升订单系统、产品系统的节点数量,而对于后台管理系统、数据分析系统而言,节点数量维持原有水平即可。
  3. 服务的复用性更高。比如,当我们将用户系统作为单独的服务后,该公司所有的产品都可以使用该系统作为用户系统,无需重复开发。

 

注:分布式需要做好事务管理。


http://chatgpt.dhexx.cn/article/RtF6rgXX.shtml

相关文章

什么是分布式和集群?

漫小画 擅长漫话 程小员 擅长编程 某天,下班较早,我正在玩吃鸡,已经到决赛圈了,这时候,女朋友满脸求知欲的朝我走过来。 上次他们都说你给我讲的面向对象太简单了。 那你想怎样?为什么我一玩游戏你就过来问…

分布式和集群区别与分布式的应用场景

分布式是指将一个业务拆分不同的子业务,分布在不同的机器上执行,集群是指多台服务器集中在一起,实现同一业务,可以视为一台计算机,一个云计算平台,就是通过一套软件系统把分布式部署的资源集中调度使用。要…

java集群和分布式 区别_集群和分布式的区别?

集群和分布式有什么区别? 分布式系统: 分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作…

分布式和集群的区别

分布式和集群的区别 分布式 分布式就是将多台服务器集中在一起,每台服务器都实现总体中的不同业务。每台服务器都缺一不可,如果某台服务器发生宕机了,则网站的 部分功能缺失,将导致整体无法运行。 分布式存在的作用主要是将应用…

php常用换行代码

文章目录 一、""二、"\n" 记录一下php换行的代码书写 一、"</br>" "<br/>"浏览器显示换行&#xff0c;源代码显示<br/>例&#xff1a; <?php echo "Test"."<br/>"; echo "one…

php不换行显示,php中\n不换行

本文俺将跟大家介绍两个解决办法。 原因 PHP中默认输出的文档格式是text/html&#xff0c;在html文件中识别\n为空格。 解决办法 办法一 设置content-type 显示的将content-type设置为text/plain&#xff0c;注&#xff1a;设置后将不能使用html标签。 例&#xff1a; /** * 犀…

php 保存文件并换行,php是怎样向文件中写入换行_后端开发

php向文件中写入换行的要领是&#xff1a;1、在变量【$filename】背面加上“\r\n”&#xff1b;2、在代码中写入【file_put_contents($filelist&#xff0c;$filename“\r\n”&#xff0c;FILE_APPEND)】函数。 PHP写文件换行的体式格局 直接在字符串背面加"\r\n"不行…

php换行替换,php怎么替换回车换行

php替换回车的方法&#xff1a;1、使用语句“str_replace(array("/r", "/n", "/r/n"), "", $string);”&#xff1b;2、利用正则表达式&#xff1b;3、通过语句“$str str_replace(PHP_EOL,)”。 PHP替换回车换行的三种方法 一个小小…

关于PHP中echo换行问题

前提&#xff1a;在 PHP 中仅双引号支持字符串转义“\” 但是我发现即使是双引号&#xff0c;\n也没有正常换行 echo "hello \n world";首先&#xff0c;PHP没有任何问题&#xff0c;成功将转移换行符\n解析出来&#xff0c;最初还以为PHP不兼容\n这个语法呢。 检查…

php换行操作总结

作为php的初学者,常常遇到一个容易混淆的小问题, 那就是在php代码中写入\n换行操作符&#xff0c;以为在浏览器那里呈现的输出是换行&#xff0c;没想到却没有。但是写入 br 却顺利通过.导致很多初学者傻傻分不清! 其实<br>和\n都可以,为什么说都可以呢&#xff1f; 这…

php echo换行

<?php $root [1, 2, 2, 3, 4, 4, 3];echo count($root) . "<br>";echo $root[0]; ?>

PHP如何换行

mac下<br>和\n都可以 为什么说都可以呢&#xff1f; 这和php文件的执行方式有关 php文件有两种执行方式&#xff0c;一种是通过网页访问&#xff0c;一种是通过命令提示符 <?phpecho "this is a \n"; echo "test \n";?> ① 通过网页执行 …

php 换行替换成p,php 换行如何替换

php换行替换的方法&#xff1a;1、使用str_replace来替换换行&#xff0c;语法如“str_replace(array("\\r\\n", "\\r", "\\n"), "", $str);”&#xff1b;2、使用正则表达式替换&#xff1b;3、使用php定义好的变量替换。 推荐&#…

如何在PHP中换行

文章目录 正文解决方法方法一&#xff1a;使用 HTML 中的换行符方法二&#xff1a;查看 PHP 解析的源代码 额外说明参考资料 本文是对 PHP 换行符的使用讲解 正文 今天在学习 PHP 的过程中发现 \n 并没有像书上说的正常换行。 举个例子&#xff0c;如下 PHP 代码&#xff1a…

PHP字符串换行

目录直达 PHP字符串中换行方法一&#xff1a;&#xff08;PHP_EOL&#xff09;方法二&#xff1a;&#xff08;\n&#xff08;或 \r\n&#xff09;换行&#xff09;方法三&#xff1a;&#xff08;enter键换行&#xff09;方法四&#xff1a;&#xff08;使用HTML换行符<br …

PHP如何使用换行符?(代码示例)

在PHP脚本中有时需要进行换行输出&#xff0c;那么如何进行换行&#xff1f;下面本篇文章就来给大家介绍一下在PHP中如何使用换行符进行换行&#xff0c;希望对大家有所帮助。 方法一&#xff1a;使用PHP换行符 换行符是用于逃避继续使用相同行的分隔符。这是为了将冗长的线分…

java本地缓存简介

java中的本地缓存&#xff0c;工作后陆续用到,一直想写&#xff0c;一直无从下手&#xff0c;最近又涉及到这方面的问题了&#xff0c;梳理了一下。自己构造单例、guava、ehcache基本上涵盖了目前的大多数行为了。 为什么要有本地缓存&#xff1f; 在系统中&#xff0c;有些数…

【java缓存、redis缓存、guava缓存】java中实现缓存的几种方式

一、通过HashMap实现缓存 这种方式可以简单实现本地缓存&#xff0c;但是实际开发中不推荐使用&#xff0c;下面我们来实现一下这种方式。 首先创建一个管理缓存的类 public class LocalCache {public static HashMap<String,String> cache new HashMap<>();sta…

Java实现一个简单的缓存

cache 阅读原文请访问我的博客BrightLoongs Blog  缓存是在web开发中经常用到的&#xff0c;将程序经常使用到或调用到的对象存在内存中&#xff0c;或者是耗时较长但又不具有实时性的查询数据放入内存中&#xff0c;在一定程度上可以提高性能和效率。下面我实现了一个简单的…

java中缓存简介

外存&#xff1a; 也就是我们经常说的&#xff08;CDEF盘的大小&#xff09;外储存器是指除计算机内存及CPU缓存以外的储存器&#xff0c;此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等&#xff0c;一般的软件都是安装在外存中 内存&#xff1…