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

集群、分布式概念:

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

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

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

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

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

        总结

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

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

系统架构演进:

        (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…

【MODBUS】Modbus是什么?

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

Python (八)网络编程

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

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

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

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

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

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

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

LeetCode1143.最长公共子序列

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

【Java】线程池的创建

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

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

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

jmeter如何循环运行到csv文件最后一行后停止

1、首先在线程组中设置’循环次数‘–勾选永远 2、csv数据文件设置中设置: 遇到文件结束符再次循环?——改为:False 遇到文件结束符停止线程?——改为:True 3、再次运行就会根据文档的行数运行数据 (如果需要在循环控制器中&…

回答一个同学的问题:在目前深度学习爆火的年代,专家系统还有用吗,会被淘汰吗?

文章目录 我的看法如下:(不会被淘汰,会逐渐进化)总结 我的看法如下:(不会被淘汰,会逐渐进化) 专家系统和深度学习有其各自的优势。专家系统利用规则和知识库来给出结论,适用于问题范…

深度解析:探索「两数之和」问题的多种算法解决方案

今天要讨论的是「两数之和」问题,并将从哈希表解法到排序数组与双指针法、再到一遍哈希表解法的不同解决方案进行详细探讨 哈希表解法: 第一,使用了一种简单而有效的方法——哈希表。我们创建了一个 HashMap,用于存储已遍历过的元…

Android : SensorManager 传感器入门 简单应用

功能介绍&#xff1a;转动手机 图片跟着旋转 界面&#xff1a; activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/andr…

C4D云渲染怎么提升速度小技巧?C4D云渲染速度提升技巧

当许多C4D用户转向云渲染时&#xff0c;他们常常会发现渲染速度并没有预期中的提升&#xff0c;这让人产生疑问&#xff0c;为什么使用云渲染服务后&#xff0c;渲染时间依然没有显著缩短&#xff0c;C4D云渲染情况取决于多个因素&#xff0c;如&#xff1a;渲染任务特点以及所…

MYSQL练题笔记-子查询-换座位

一、题目相关内容 1&#xff09;相关的表和题目 2&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 没啥思路&#xff0c;我还没做过交换的这种题&#xff0c;所以我觉得这类交换的题以后值得做一个合集&#xff0c;是有点灵活度在里面的&a…

C++智能指针介绍

引言 为了充分利用RAII思想&#xff0c;C 11开始引入了智能指针&#xff0c;本文介绍RAII以及三种智能指针&#xff1a; std::unique_ptrstd::shared_ptrstd::weak_ptr 除此之外&#xff0c;本文还会介绍智能指针的常用创建方法&#xff1a; std::make_uniquestd::make_sha…

一键提取微信聊天记录,生成HTML、Word文档永久保存,还能生成微信年度聊天报告

不知道生活中你有没有遇到过这种情况&#xff0c;聊天记录不完整&#xff0c;有的在手机上&#xff0c;有的在电脑上&#xff0c;搜索起来很烦。那有没有一种办法可以把微信聊天记录统一呢&#xff1f;当然是有的。下面&#xff0c;就让我们一起来看一下怎么操作。 先看效果 操…

Solidity 代码执行漏洞原理

目录 1. 三种 call 方式 2. 两种 call 参数类型 3. 漏洞场景 3.1 delegatecall 3.2 call 1. 三种 call 方式 Solidity 中一个合约调用其他合约的函数有三种方式&#xff1a; <address>.call(...) returns (bool) <address>.callcode(...) returns (bool) &l…