当前位置: 首页 > news >正文

单机、集群、分布式服务器比较:

1. 单机服务器的瓶颈:

单机服务器:一台服务器独立运行一个工程所需的全部的业务模块

  • 受限于服务器硬件资源,所承受用户并发量受限,32位linux操作系统最大并发量为两万
  • 任一模块的变动和修改,都会导致整个项目代码重新编译、部署,浪费大量时间成本
  • 系统模块对硬件资源的需求不一样,CPU密集型(3D展示,大量计算)、I/O密集型(服务器信息收发),部署在一台服务器则对服务器的整体硬件资源提出更高的要求,增加了成本

2. 集群服务器:

分布式集群服务器:每一个服务器都运行一个工程的所有模块。

优点:

  1. 解决了单机服务器的并发量限制,但是服务器机数和并发量并不成正比关系
  2. 配置简单,只需要在服务器部署所有模块并增加Nginx反向代理的服务器配置即可

缺点:

  1. 项目代码的修改需要所有服务器重新编译,单机只进行一次部署而现在要进行多次部署!
  2. 部分使用量少,不需要大量并发的模块仍然部署在所有服务器一定程度上浪费了资源
  3. 并未解决功能模块对服务器的多硬件资源需求问题(CPU密集型、I/O密集型)

3. 分布式服务器:

分布式服务器:一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个节点,根据节点的并发要求,对一个节点可以再做节点模块集群部署

优点:

  • 可以将工程模块分别部署在不同的服务器,根据模块对硬件资源的需求:
    • 分别将CPU密集型的模块部署在CPU资源较好的服务器;
    • 将I/O密集型的模块部署在CPU资源较差的服务器,解决了单机、集群均无法解决的问题;
    • 将并发要求高的模块结点进行集群部署,扩充并发。
  • 当单独模块的代码需要修改时,仅编译当前的模块代码并在当前服务器编译部署,并不影响其他的模块正常运行
  • 可以根据服务器的资源条件,进行最匹配的功能模块,最大化的利用资源,避免资源浪费,并部署高可用,容灾的主备服务器功能保障服务器可靠性

引发的问题:

1.大系统的软件模块该怎么划分?

  1. 模块和模块之间的界线不清晰(有的模块里面的函数调动另一个模块的函数代码)
  2. 各模块可能实现大量重复的代码!如果在不同模块重复的公共代码修改成过程中逐渐分离,变成不可控制了。

2、各模块之间该怎么访问?

因为现在各模块可能运行不在一个机器上,或者不在一个进程上。

单机或者集群中,这些模块是运行在一个服务器进程当中,相当于自己调用自己。但是在分布式中,用户管理和好友管理部署在不同的进程中,用户管理进程如何调用另一个模块上的业务呢?

机器1上的模块怎么调用机器2上的模块的一个业务方法呢?(软件设计师通过经验来解决)

机器1上的一个模块进程1怎么调用机器1上的模块进程2里面的一个业务方法呢?

调用过程涉及网络传输,携带区分函数的标识(函数的参数,函数命名等)发送给另一台机器调用方法,将传递过来的参数代入执行,执行之后将返回值通过网络返回

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 无人机侦察:二维机扫雷达探测设备技术详解
  • 【学习笔记】虚幻SkeletalMesh学习(一)基础介绍
  • CTF-Web习题:[BJDCTF2020]Mark Loves cat
  • AWS全服务历史年表:发布日期、GA和服务概述一览(一)
  • 鸿蒙开发StableDiffusion绘画应用
  • Python | Leetcode Python题解之第260题只出现一次的数字III
  • list容器
  • 比较RMI、HTTP+JSON/XML、gRPC
  • 极狐GitLab如何配置使用独立数据库?
  • 算法第十一天:leetcode707.设计链表
  • Step-DPO 论文——数学大语言模型理解
  • d3d12.dll 文件缺失如何解决?五种修复丢失问题的方法
  • [CP_AUTOSAR]_分层软件架构_接口之通信模块交互介绍
  • MyBatis框架学习笔记(四):动态SQL语句、映射关系和缓存
  • 【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Docker下部署自己的LNMP工作环境
  • iOS 颜色设置看我就够了
  • leetcode46 Permutation 排列组合
  • nginx 负载服务器优化
  • Quartz初级教程
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React组件设计模式(一)
  • RxJS: 简单入门
  • Swift 中的尾递归和蹦床
  • Vue.js源码(2):初探List Rendering
  • vue总结
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 微服务核心架构梳理
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​queue --- 一个同步的队列类​
  • ### RabbitMQ五种工作模式:
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $.proxy和$.extend
  • (13):Silverlight 2 数据与通信之WebRequest
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)逆序输出字符串
  • (vue)页面文件上传获取:action地址
  • (windows2012共享文件夹和防火墙设置
  • (八)Spring源码解析:Spring MVC
  • (笔记)M1使用hombrew安装qemu
  • (二十六)Java 数据结构
  • (论文阅读30/100)Convolutional Pose Machines
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (算法)硬币问题
  • (转)可以带来幸福的一本书
  • *2 echo、printf、mkdir命令的应用
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net Signalr 使用笔记
  • .NET 通过系统影子账户实现权限维持
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 的字符串暂存池
  • .NetCore项目nginx发布
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)