小白初探架构模式—常用的设计模式

news2024/11/15 18:57:16

目录

1.前言

2. 主从架构

        2.1 主从架构的优点

       2.2 主从架构的应用场景

        2.3 主从架构的实现

        2.4 主从架构的示例

3. 主从架构设计的延伸

        3.1 主备模式

        3.2  主从复制

        3.3 集群分片

        3.4 异地多活

4. 总结


1.前言

        作为一个架构设计小白,我们通常用了很多种工具,比如 Mysql 、Redis、Kafka、 Hdfs、Hbase、MongoDB、RocketMQ等等,但是这些优秀工具,是如何设计的这么优秀?我们有的一知半解,有的甚至干脆不讲,只要能用就行。下面我主要做个简短的介绍,算是普及了以下知识,让小伙伴们知道是什么,最起码有这方面的印象就好,好了,下面我们开始介绍:

2. 主从架构

        主从架构设计模式是一种常见的软件设计模式,它将系统划分为两个或多个组件:一个主组件和一个或多个从组件。主组件负责管理和控制整个系统,而从组件负责执行主组件分配的任务。

        2.1 主从架构的优点

        (1)可扩展性:主从架构设计模式可以很容易地扩展,以适应不断增长的系统需求。只需添加更多的从组件即可提高系统的性能。

        (2)可靠性:主从架构设计模式具有很高的可靠性,因为如果主组件发生故障,从组件可以继续运行。

        (3)可用性:主从架构设计模式具有很高的可用性,因为如果主组件发生故障,从组件可以立即接管主组件的任务。 主从架构设计模式也有一些缺点:

        (4)单点故障:主组件是整个系统的单点故障,如果主组件发生故障,整个系统将无法运行。

        (5)性能瓶颈:主组件可能会成为系统的性能瓶颈,因为所有请求都必须经过主组件。

       2.2 主从架构的应用场景

        主从架构设计模式可以应用于各种各样的场景,包括:

        (1)数据库系统:主从架构设计模式可以用于数据库系统,其中主组件负责管理数据库,而从组件负责执行数据库查询。

        (2)Web 服务器:主从架构设计模式可以用于 Web 服务器,其中主组件负责处理用户请求,而从组件负责生成网页。

        (3)分布式系统:主从架构设计模式可以用于分布式系统,其中主组件负责管理整个系统,而从组件负责执行主组件分配的任务。

        2.3 主从架构的实现

         主从架构设计模式可以通过多种方式实现,包括:

         (1)进程:主组件和从组件可以作为独立的进程运行。

         (2)线程:主组件和从组件可以作为同一个进程中的不同线程运行。

         (3)网络:主组件和从组件可以通过网络通信。

        2.4 主从架构的示例

         以下是一个主从架构设计模式的示例:

class Master { 
    public void start() { 
        // 创建从组件 
        Slave slave1 = new Slave(); 
        Slave slave2 = new Slave(); 

        // 启动从组件 
        slave1.start(); 
        slave2.start(); 

        // 等待从组件完成任务 
        slave1.join(); 
        slave2.join(); 
    } 
} 

class Slave { 
    public void run() { 
        // 执行主组件分配的任务 
        // ... 
    } 
}

在这个示例中,主组件负责创建和启动从组件,然后等待从组件完成任务。从组件负责执行主组件分配的任务。

3. 主从架构设计的延伸

        从上文我们了解了,主从架构的优点,应用场景以及应用中的实现方式,下面我们再说下,平常我们所听到的一些架构模式是怎么样的,例如:主备模式、主从复制、集群分片、异地多活,这些名词又是什么?又该怎么理解呢?我们下面一一介绍:

        3.1 主备模式

        主备模式实际就是一主多备,master 负责提供读写服务,slave 作为数据备份,一旦主机宕机,将其中一个备节点作为主节点。通常是在单体应用中,我们采用nginx 做负载时候,会用到的多,一旦一个主库宕机,我们发现后,可以修改配置切换主库。这种模式,主要还是依靠主库,备份的只是为了防备而已,不知道什么时候才会用上。

        3.2  主从复制

        主从复制实际是一主多从,master 对外提供读写服务,slave 作为数据备份提供只读服务。主机定期复制数据给从机。多副本的关键问题是保证数据一致性,通常需要考虑数据同步延时的问题。通常用在数据库中的居多,另外主从再结合注册中心,自动选举,就可以实现自主切换主库,数据备份这块一般会在晚上进行,白天会影响主数据库的读写性能。

        另外这个主从复制的思维模式,也大多数是用在我们平常使用的中间件上面,RocketMQ、Mysql、MongoDB、Redis中,我们在用到这些,或者部署的时候可以好好理解下,这种设计模式思维。

        3.3 集群分片

        集群分片是为了解决每台机器上存储全量数据的问题,面对大数据单机的存储量总是有上限的,当面对 PB 级数据时,单机是无法支撑的,因此就需要对数据进行分片。这个设计模式,我们在大数据的设计中,会经常的遇到,例如,HDFS 的强大存储能力,还有容错能力,都是依靠这个集群的分片设计,简单的理解,就是说,我把一个大文件,分散成多个小文件,这样我无论是存储,还是计算的时候,都会很快,如果下载这个大文件,我再合并下就可以了,计算的时候,也是多个小文件并行计算,最后把结果合并,这样提高了性能和效率;还有个就是Flink  这个是用到这个思想最多的系统,他把任务计算这块用到了极致,大家有兴趣的可以研究下。

        3.4 异地多活

        异地就是指在地理位置上不同的地方,可分为同城异地、跨城异地、跨国异地,多活就是指不同地理位置上的系统都能够提供服务。这种架构的复杂度较高,且部署成本也会提高。

        这个设计设计模式,主要用在特别大的系统上,为了加深理解,我举个例子方便大家的理解。就是我们现在出门所使用的地图,大家都不陌生吧,作为基础性质的工具,保障他的安全稳定是非常必要的,拿淘宝来说,阿里收购开发高德地图,是很有必要的,因为他的订单,支付,配送物流这些,都是需要依赖地图信息的,首先他必须要把这块掌握在自己手中,其次保证他的稳定性。也就是他不可能把数据只存放到一个地方,会在多个地方都会存一份这样的数据,这样在某个地方的服务器被地震或者其他不可预期的破坏了,不会影响服务的正常运行。这是异地多活的目的。

        异地多活的技术这块更加复杂,简单的说下一个两地多活的吧,就是可以把一个服务的数据,同时保存到两个地方的服务器就可以了,我们可以先这样的理解。

4. 总结

        本文介绍了,主从架构的优缺点,应用场景,以及实现手段,让大家了解了主从架构是个什么东西。又分别介绍了平常我们在工作中和使用的中间件中所涉及到的几种设计模式,加深了对主从的设计思维的理解,希望我们能够在平常的工作中多多的体会这些设计模式思维,让我们变得更加的优秀。

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

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

相关文章

Java和Redis实现一个简单的热搜功能

1. 前言 我们有一个简单的需求: 搜索栏展示当前登陆的个人用户的搜索历史记录,删除个人历史记录。用户在搜索栏输入某字符,则将该字符记录下来 以zset格式存储的redis中,记录该字符被搜索的个数以及当前的时间戳 (用…

4_机械臂运动学基础向量空间

在了解机械臂正解推导的过程中,几个问题一直困扰着我: 1、为什么3*3矩阵可以描述姿态?矩阵更进一步的意义是什么?姿态是否有其他的描述方式,如果有是什么? 2、机械臂法兰中心相对于基座的坐标,6…

开始学习vue2基础篇(初体验)

一、什么是VUE(官网 :https://cn.vuejs.org/) 官方给出的概念 :Vue (读音 /vju ː/ ,类似于 view) 是一套用 于构建用户界面的前端框架 渐进式的 JavaScript 框架 二、VUE的特点 易用 :基础只需HTML、CSS、…

[小程序]页面事件

一、下拉刷新 1.开启和配置 小程序中开启下拉刷新的方式有两种: ①全局开启下来刷新 在app.json的window节点中,设置enablePullDownRefresh设为ture。 ②局部开启下来刷新 在页面对应的json文件的的window节点中,设置enablePullDownRefresh设…

yolov5 opencv dnn部署 github代码

yolov5 opencv dnn部署 github代码 源码地址实现推理源码中作者的yolov5s.onnx推理条件python部署(因为python比较简单就直接介绍了)c部署 参考链接 源码地址 yolov5官网还提供的dnn、tensorrt推理链接本人使用的opencv c github代码,代码作者非本人,也是上面作者推…

定向减免!函数计算让轻量 ETL 数据加工更简单,更省钱

作者:澈尔、墨飏 业内较为常见的高频短时 ETL 数据加工场景,即频率高时延短,一般均可归类为调用密集型场景。此场景有着高并发、海量调用的特性,往往会产生高额的计算费用,而业内推荐方案一般为攒批处理,业…

【EI会议征稿通知】2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)

2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024) 2024 4th International Conference on Artificial Intelligence, Automation and High Performance Computing 2024第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)将于20…

不建Vivado工程,也能看Device视图

不建Vivado工程,也能看Device视图 在FPGA设计与开发中,Device视图和Package视图发挥着重要的作用。 在Device视图下: 可以查看FPGA芯片可用资源 例如:LUT、FF、BRAM、DSP、URAM等的个数; 可以查看关键资源的分布情…

搭建redis服务器

memcached MongoDB Redis 先把数据存储在内存里,如何定期把内存里数据存储在硬盘,一个Key一个Values redis集群存储数据在内存里面 mysql集群存储数据在硬盘里 netstat -utnlp | grep redis-server 查看端口tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1970/redis-server 1 …

性能优化(CPU优化技术)-NEON指令介绍

「发表于知乎专栏《移动端算法优化》」 本文主要介绍了 NEON 指令相关的知识,首先通过讲解 arm 指令集的分类,NEON寄存器的类型,树立基本概念。然后进一步梳理了 NEON 汇编以及 intrinsics 指令的格式。最后结合指令的分类,使用例…

thinkadmin上传excel导入数据库

<div class="layui-form-item layui-inline"><button class="layui-btn layui-btn-primary">

正则化逻辑回归实战

一、题目 在正则化逻辑回归的练习中&#xff0c;我们将利用正则化的逻辑回归来预测来自制造工厂的微芯片是否通过了质量保证&#xff08;QA&#xff09;。在质量保证期间&#xff0c;每个微芯片都要经过各种测试&#xff0c;以确保其能够正常工作。假设您是该工厂的产品经理&am…

yolov8 opencv dnn部署 github代码

源码地址 本人使用的opencv c github代码,代码作者非本人 实现推理源码中作者的yolov8s.onnx 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理&#xff0c;所以只使用opencv4.7.0) c部署 环境…

【MySQL】最左匹配原则

最左匹配原则 0x1 简单说下什么是最左匹配原则 顾名思义&#xff1a;最左优先&#xff0c;以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like&#xff09;就会停止匹配。 例如&#xff1a;b 2 如果建立(a&#xff0c;b&#xff09;顺序…

MySQL 索引优化:深入探索自适应哈希索引的奥秘

在数据库管理系统中&#xff0c;索引优化是提高查询性能的关键所在。MySQL 作为最流行的开源关系型数据库管理系统之一&#xff0c;提供了多种索引类型以满足不同查询场景的需求。其中&#xff0c;自适应哈希索引&#xff08;Adaptive Hash Index&#xff0c;AHI&#xff09;是…

Flink实战之DataStream API

接上文&#xff1a;Flink实战之运行架构 Flink的计算功能非常强大&#xff0c;提供的应用API也非常丰富。整体上来说&#xff0c;可以分为DataStreamAPI&#xff0c;DataSet API 和 Table与SQL API三大部分。 其中DataStream API是Flink中主要进行流计算的模块。 DateSet API是…

鸿蒙开发-UI-布局-栅格布局

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 鸿蒙开发-UI-布局-弹性布局 鸿蒙开发-UI-布局-相对布局 文章目录 前言 一、基本概念 二、格栅容器组件 1.栅格系统断点 2.布局的总列数 3.排列方向 4.子组件间距 三、格栅容器子组件 1.span 2.offset 3.…

【Unity小技巧】3D人物移动脚步和跳跃下落音效控制

文章目录 单脚步声多脚步声&#xff0c;跳跃落地音效播放不同材质的多脚步声完结 单脚步声 public AudioClip walkingSound; public AudioClip runningSound;//移动音效 public void MoveSound() {// 如果在地面上并且移动长度大于0.9if (isGround && moveDirection.s…

命令模式介绍

目录 一、命令模式介绍 1.1 命令模式定义 1.2 命令模式原理 1.2.1 命令模式类图 1.2.2 模式角色说明 二、命令模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 抽象命令接口 2.2.2 订单类 2.2.3 厨师类 2.2.4 服务员类 2.2.5 具体命令类 2.2.6 测试类 三、命令模式总…

Ubuntu20.04输入法异常导致的黑屏:fcitx和ibus输入法的卸载与安装

Ubuntu20.04输入法异常导致的黑屏&#xff1a;fcitx和ibus输入法的卸载与安装_ubuntu卸载fcitx-CSDN博客 问题背景 系统&#xff1a;Ubuntu20.04 由于fcitx的不完整配置&#xff0c;导致fcitx输入法无法正常工作。决心卸载所有输入法&#xff0c;重新安装。但是由于在没有完整…