集群和分布式

news/2025/3/14 16:57:34/

本文以即时通讯软件(IM)为例,介绍单机、集群、分布式的区别,以及它们各自的优缺点。
假设现在开发一款IM,刚开始业务比较简单,用户量也较少,我们将服务部署在一台单机服务器上足矣。软件开发过程中为了让程序更加清晰,便于维护,采用模块化编程。一款IM服务大致包括:用户管理、好友管理、群组管理、消息管理、后台管理。
在这里插入图片描述
之后随着用户数量的增长,渐渐发现,单机性能有限,支持的用户并发量较小。并且,我们的代码只是采用模块化方式编写,一个模块出现问题,往往需要将整个项目重新编译,部署,耗时耗力。再之,系统中有些模块属于CPU密集型,有些模块属于I/O密集型,各模块对硬件资源的需求不一样,所以在进行服务器选型时只能综合各模块,可能会导致资源的浪费或过剩。
所以,针对单机性能瓶颈的问题,提出了集群的概念,每一台服务器独立运行一个工程的所有模块,事实上集群就是再多加几台服务器提供服务,比如:
在这里插入图片描述
服务器数量的增加自然解决了单机性能瓶颈的问题,但项目部署在多台机器上,代码修改后仍然需要花费大量的精力重新部署项目。并且对于不常用的后台管理模块没必要每台机器上都部署。因此,水平扩充机器的集群方式,仍然存在一些问题。
下面再来看看分布式模式,一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个节点,根据节点的并发要求,对一个节点可以再做节点模块集群部署。
在这里插入图片描述
将模块部署到不同的主机,这样修改单独的模块,不影响其他主机模块的运行,并且对于单机性能瓶颈的问题,也可以通过增加节点集群的方式提高性能。
但要实现分布式的模式,对我们的要求就更高,比如,系统要划分模块,怎么划分合理?CPU密集型和I/O密集型模块部署在不同性能的机器上?模块之间会不会存在大量重复的代码?模块之间的调用如何进行等等。模块运行在不同的主机上,模块之间的调用自然就会涉及到网络通信,因此,我们必须实现一个分布式网络通信框架来做支撑。

可见,随着业务增长,程序框架也必须随之改变,而一个好的框架设计往往能在开发、维护方面节约大量成本。


http://www.ppmy.cn/news/46844.html

相关文章

std::regex正则表达式

std::match_results (匹配的结果存入其中) result[0]是完整的文本,result[1]是第一个分组匹配的数据。如果正则表达式有n个分组,match_results的size也就是n1个 This is a specialized allocator-aware container. It can only …

【FPGA实验4】举重比赛机制

举重比赛有三名裁判,当运动员将杠铃举起后,须有两名或两名以上裁判认可,方可判定试举成功,若用A、B、C分别代表三名裁判的意见输入,同意为1,否定为0;F为裁判结果输出,试举成功时F1,试…

逍遥自在学C语言 | 位运算符~的高级用法

前言 在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~ 运算符的一些高级用法。 一、人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 ——…

Direct3D 12——计算着色器——计算着色器概念

计算着色器虽然是一种可编程的着色器,但Direct3D并没有将它直接归为渲染流水线中的一部分。虽然如此,但位于流水线之外的计算着色器却可以读写GPU资源。从本质上来说,计算着 色器能够使我们访问GPU来实现数据并行算法,而不必渲染出…

5.Spring Cloud (Hoxton.SR8) 实战笔记—项目中细节实现 约束 注意事项、模块难点总结

本文目录如下: 二、项目中细节实现 & 约束 & 注意事项判断字符串是否为空?入参 Num 字段转换为 num 的问题?通过 Java 获取时间 (Date类型) 并插入数据库?神坑: baseMapper.selectById(String str)之坑?AES 实现加密函数…

[Eigen中文文档] 切片和索引

专栏总目录 本文目录 概述基本的切片编译时的大小和步长倒序索引序列自定义索引列表 英文原文(Slicing and Indexing) 本文介绍了如何使用操作运算符operator()索引行和列的子集。该 API 在 Eigen 3.4 中引入。它支持 block API 提供的所有功能。特别是,它支持切片…

查询练习:条件加组筛选

查询 student 表中至少有 2 名男生的 class 。 -- 查看学生表信息 SELECT * FROM student; ---------------------------------------- | no | name | sex | birthday | class | ---------------------------------------- | 101 | 曾华 | 男 | 1977-09-01 | 95…

vue 动态组件

一见如故 // 一般配合<keep-alive>组件&#xff0c;避免反复重新渲染dom <keep-alive><component :is"com"></component> </keep-alive> <script> import Left from ./LeftComponent.vue import Right from ./RightComponent.v…