【系统架构】集群、分布式概念及系统架构演进过程

集群、分布式概念:

        对食物没有太高要求的人在肚子饿的时候一般都会选择去兰州拉面、沙县小吃等小饭馆,这类小饭馆有个很显著的特点:洗菜、切菜、炒菜都是同一个人完成,如果厨子不舒服可能饭馆还会歇业。而一些人流量较大的饭馆的分工则不像小饭馆那样“随便”,厨房中可能有多个洗菜的、多个切菜的、多个炒菜的,每个人都各司其职,就算其中一个炒菜的大厨生病了也不会导致饭馆歇业,顶多影响一下上菜速度。

        在上述例子中,我们可以将洗菜、切菜、炒菜视作一个独立的模块,小饭馆中的大厨同时需要干这三件事可以抽象成多个功能模块部署在一个项目中、小饭馆里只有一个厨子可以抽象成服务单体部署、厨子生病可以抽象成服务挂了,如下图所示。

        在大饭馆中,洗菜、切菜、炒菜等工作分配给了不同的人,不再是由一个人完成,并且每份工作有多个人在做,相当于把功能模块进行了抽离,模块不再内嵌到一个项目中,而是拆分成多个服务部署到不同机器上,形成一个完整的系统,如下图所示。

        在上图中,洗菜有两个人负责、切菜有两个负责、炒菜也有两个人负责,这就是集群的概念,假设其中一个炒菜的生病了,另外一个炒菜的也能接替它的工作,系统能照常运行。

        做菜的每个流程都有专门的人来负责就是分布式的概念。洗菜、切菜、炒菜的多个人共同协作一起完成做菜这件事。

        总结

        集群指多个人做一样的事情(多台机器提高相同的服务)。

        分布式指多个人做不一样的事情(每台机器提供不同的服务),这些事可以合并起来变成一件大事(不同服务组合,变成一个完善的系统)。

系统架构演进:

        (1)单体架构业务模块(如用户模块、订单模块等)不进行拆分,放在同一个项目中。

        优点开发、部署都很方便

        缺点

        1、可靠性差,一个模块出了问题会导致整个系统不可用。

        2、可伸缩性差,不能将系统中的一个模块单独抽离出来集群部署。

        3、扩展性差,新需求产生新模块时,还是只能将新模块放在一个应用中。

        (2)垂直架构拆分功能模块,放到不同项目中(系统拆分成多个单体架构)。

        优点相对于单体架构,模块间的耦合度降低,可靠性、可伸缩性、扩展性都有所提升。

        缺点假设有一个用户模块E,两个应用都需要用到这个模块,那么只能将模块E分别集成到两个应用中,造成功能重复。

        (3)分布式架构将系统中的公用模块抽离出来,放到一个新的项目中;作为独立的服务供其它服务消费,实现服务的共享和重用。

        由于部署在不同的机器上,业务模块与公用模块间的通信本质上是不同机器之间的网络通信,业务模块需要获知部署公用模块机器的IP、端口和暴露出来的接口,基于RPC(Remote Procedure Call,远程过程调用)或消息队列实现模块间的交互。

        优点解决了垂直架构中重复功能的问题。

        缺点一旦公用模块发生变更(IP、端口发生变更),业务模块那边也需要做相应改变(该配置文件或代码)。

        (4)SOA(面向服务)架构模块与模块之间不再直接进行交互,而是通过ESB(企业服务总线)服务中介来为模块间的交互搭建桥梁。

        特点

        1、服务的状态发生变更时,调用方服务不需要感知服务提供方的变化,并做出相应改变;我们只需要告诉ESB,“我”要访问哪一个服务,由ESB去寻找服务提供方。(进一步降低了模块间的耦合度)。

        2、ESB的功能负载均衡、流量控制、加密处理、服务监控、异常处理、监控告急等。

        (5)微服务架构中心思想将模块彻底的"组件化"和"服务化",业务系统会拆分成多个可以独立开发、设计、运行的小应用,应用之间通过服务完成交互和集成。

        特点

        1、每个微服务相互独立、互不干扰,模块间耦合度极低。

        2、每个微服务可以自由选择开发技术和工具(开发语言选择、技术选型自由度高),不需要与其它团队协调。

        3、每个微服务都有属于自己的业务数据,在部署、测试时无需依赖于其它服务(SOA架构中,可能还需要先启动服务提供模块),极大地便利了自动化部署和测试。

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

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

相关文章

Axure的动态面板

目录 动态面板 什么是Auxre动态模板 动态模板的步骤 应用场景 实战案例 轮播图 多功能登录界面 主界面左侧菜单栏 动态面板 什么是Auxre动态模板 动态面板是Axure中的一个重要功能,它允许用户创建可交互的页面,并模拟用户与页面的交互。通过添加元素…

智能守护,数据安全稳中求胜!上海迅软DSE助力家具家电行业引领潮流!

随着中国经济的蓬勃发展,家具家电企业正迎来“精品制造”的时代,业内竞争日益激烈。为了提升产品竞争力、扩大市场占有率,企业亟需加强对自主品牌的安全建设,确保品牌的自主知识产权、产品生产资料以及销售信息等核心数据不受泄漏…

文本处理工具doctran(集成LLM和NLP库)

今天给大家推荐一款文本处理工具,可以Extract、Redact、Summarize、Refine、Translate、Interrogate,这个工具就是文档转换框架doctran。 欢迎关注公众号 doctran基于OpenAI的GPT模型和开源的NLP库来剖析文本数据。该工具也可以在LangChain框架document…

【HDFS】DFSPacket中lastPacketInBlock字段的关键作用

这篇文章介绍了DFSPacket对象的lastPacketInBlock字段相关的知识。 【HDFS Client】DFSPacket对象什么情况下是lastPacketInBlock? 本文继续深挖lastPacketInBlock这个字段在HDFS Client写数据时的重要作用。 可以这么说,如果这个lastPacketInBlock出问题的话,是会影响增量…

android 13.0 Launcher3禁止拖拽app图标到第一屏

1.概述 在13.0系统rom进行定制化开发Launcher3中,会对Launcher3 做些要求,比如现在的需求就是Launcher3第一屏的图标固定,不让其他屏的图标拖动到 第一屏所以说这个需求和 禁止拖拽图标到Hotseat类似,也是从WorkSpace.java里面寻找解决方案,然后实现相关功能 2.Launcher…

力扣64. 最小路径和

动态规划 思路: 假设 dp[i][j] 为 第 i 行、第 j 列的最小路径和;因为只能向右或者向下移动,所以状态转移方程: dp[i][j] min(dp[i - 1][j], dp[i][j - 1]) v[i][j]当 i 0 时,即第一行,只能向右移动&am…

【MODBUS】Modbus是什么?

Modbus协议,从字面理解它包括Mod和Bus两部分,首先它是一种bus,即总线协议,和12C、SP|类似,总线就意味着有主机,有从机,这些设备在同一条总线上。 Modbus支持单主机,多个从机&#xf…

Python (八)网络编程

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

​sys --- 系统相关的形参和函数​

该模块提供了一些变量和函数。这些变量可能被解释器使用,也可能由解释器提供。这些函数会影响解释器。本模块总是可用的。 sys.abiflags 在POSIX系统上,以标准的 configure 脚本构建的 Python 中,这个变量会包含 PEP 3149 中定义的ABI标签。…

最新CRMEB商城源码开源版v5.2.2版本+前端uniapp

CRMEB开源商城系统是一款全开源可商用的系统,前后端分离开发,全部100%开源,在小程序、公众号、H5、APP、PC端都能用,使用方便,二开方便!安装使用也很简单!使用文档、接口文档、数据字典、二开文…

java中 map和 json 字符串 互转

依赖包&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId> </dependency>包&#xff1a; import com.fasterxml.jackson.core.JsonProcessingException; import com.fa…

鸿蒙(HarmonyOS)应用开发——保存应用数据(题目答案)

判断题 1.首选项是关系型数据库 错误(False) 2.应用中涉及到Student信息&#xff0c;如包含姓名&#xff0c;性别&#xff0c;年龄&#xff0c;身高等信息可以用首选项来存储。 错误(False) 3.同一应用或进程中每个文件仅存在一个Preferences实例。 正确(True) 单选题 …

边缘检测@获取labelme标注的json黑白图掩码mask

import cv2 as cv import numpy as np import json import os from PIL import Imagedef convertPolygonToMask(jsonfilePath):

探秘闭包:隐藏在函数背后的小秘密(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

LeetCode1143.最长公共子序列

这道题看完就大概知道要用动态规划&#xff0c;然后想想如何建立动态转移方程&#xff0c;就很简单了&#xff0c;我都感觉我不是想出来的&#xff0c;是根据直觉应该是这样的然后边想边写就出来&#xff0c;以下是我的代码&#xff1a; class Solution {public int longestCom…

【Java】线程池的创建

目录 ​编辑 一、什么是线程池 二、创建和使用 导入必要的包&#xff1a; 创建线程池&#xff1a; 提交任务给线程池执行&#xff1a; 自定义Runnable和Callable任务&#xff1a; 关闭线程池&#xff1a; 我的其他博客 一、什么是线程池 在Java中&#xff0c;线程池是…

使用qrcode实现微信二维码转网址链接

很多情况下&#xff0c;后端会返回一个微信二维码的地址&#xff1a; 但是我们并无法直接打开或者是展示该二维码&#xff0c;毕竟浏览器不认识weixin://xxx &#xff0c;只认识http://xxx 如果想要实现weixin://xxx 转化为http:// 的形式&#xff0c;可以使用第三方库&#x…

java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter 报错解决

问题原因: 这有可能是因为SpringBoot项目结合jwt进行用户登录时出现的问题&#xff0c;因为jdk版本太高导致的 解决办法: 方法一: 降低jdk版本 检查JDK版本,如果你是JDK17版本,就降到JDK8版本 方案二:在meven中添加依赖 注意: 如果2.3.1的版本不生效,则使用2.3.0的版本 <…

C/C++ extern关键字

文章目录 extern 是一个关键字&#xff0c;用于在C和C中进行外部声明&#xff0c;它告诉编译器某个变量或函数是在其他地方定义的&#xff0c;而不是在当前文件中定义。具体作用如下&#xff1a; 外部变量声明&#xff1a; 在一个文件中使用 extern 来声明一个在另一个文件中定…

安卓ViewPager最简单使用(另一种实现)

继续前文提醒&#xff1a;ViewPager已经被ViewPager2所取代。 正文&#xff1a; 写完前面一篇文章&#xff0c;又在网上到处翻找&#xff0c;发现其实并不需要真的去继承一个PagerAdapter类也行。 这样我们的问题就简单了&#xff0c;只需要两步&#xff1a; 一、设置布局&…