一、初识Redis与分布式系统

目录

一、Redis应用

二、实现方式

三、Redis应用

四、分布式系统

五、分布式系统实现

1、应用服务和数据库服务分离

2、引入负载均衡,应用服务器集群(解决高并发)

3、引入读写分离,数据库主从结构(解决高并发)

4、引入缓存,冷热数据分离(解决高并发)

5、分库分表(解决高数据量)

6、引入微服务架构(从业务上进一步拆分应用服务器)

六、总结


一、Redis应用

Redis是在内存中存储数据,主要应用于分布式系统,如果只是单机程序,直接通过变量存储数据的方式是比Redis更优的选择

二、实现方式

由于进程间隔离性,进程间的通信基于网络。Redis就是基于网络,可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用。

三、Redis应用

1、数据库(database)

MySQL最大的问题在于访问速度比较慢,因为数据存储在硬盘上。Redis数据存储在内存上,速度快了很多。但是Redis和MySQL的业务场景不一样,没办法定量的衡量到底快多少。Redis最大的劣势是存储空间是有限的。

2、缓存(cache)

将Redis和MySQL结合起来,又打又快。Redis充当缓存的角色,劣势是系统的复杂度大大提升了,而且如果数据发生修改。还涉及到Redis与MySQL之间的数据同步问题。

3、streaming engine

Redis的初心,最初就是用来作为一个“消息中间件”(消息队列)的分布式系统下的生产者消费者模型,应用的很少。业界有更多更专业的消息中间件。

四、分布式系统

1、单机架构

只有一台服务器,这个服务器负责所有的工作。

2、分布式

如果业务进一步增长,用户量和数据都水涨船高,一台主机难以应付的时候,就需要引入更多的主机,引入更多的硬件资源。

一台主机的硬件资源是有上限的,这里的硬件资源包括但不限于以下几种:CPU,内存,硬盘,网络等等。服务器每收到一个请求,都是需要消耗上述的一些资源的,如果同一时刻,处理的请求多了,此时可能会导致某个硬件资源不够用了,无论是哪个方面不够用了,都可能会导致服务器请求处理的时间变长,甚至与处理出错。

解决以上问题,有下面两种方法:

(1)节流

软件上优化,通过性能测试。找到是哪个环节出现了瓶颈,再去对症下药。

(2)开源(简单粗暴)

增加更多的硬件资源,但是一个主机上面能增加的硬件资源也是有限的,取决于主板的扩展能力,也是有上限的。当一台主机扩展到上限了,就只能引入多台主机了,并且要在软件上做出相应的调整和适配。一旦引入多个主机了,咱们的系统就可以被称为“分布式系统”

五、分布式系统实现

1、应用服务和数据库服务分离

2、引入负载均衡,应用服务器集群(解决高并发)

引入更多的服务器节点(请求量和数据量进一步增加)

对于负载均衡器来说,有很多的负载均衡具体的算法,需要结合具体的业务场景。

3、引入读写分离,数据库主从结构(解决高并发)

一个数据库节点作为主节点,其他N个数据库节点作为从节点。主节点负责写数据,从节点负责读数据。主节点需要把修改过的数据同步给从节点。

实际的应用场景中,读的频率是要比写的概率要高的。因此主服务器一般是一个,从服务器可以有多个。同时从数据库通过负载均衡的方式,让应用服务器进行访问。

4、引入缓存,冷热数据分离(解决高并发)

数据库天然有个问题:相应速度很慢。把数据区分“冷热”,热点数据放到缓存中。

5、分库分表(解决高数据量)

引入分布式系统,不光要能够去应对更高的请求量(并发量),同时也要能应对更大的数据量。当数据量很大时,就需要多台主机来存储。

6、引入微服务架构(从业务上进一步拆分应用服务器)

引入微服务,解决了管理人的问题,但是系统性能会下降。因为是网络间通信,比进程间通信速度大大降低。要想保证性能不下降的太多,只能引入更多的机器,更多的硬件资源。并且系统复杂度更高,可用性收到影响,出现问题的概率就更大了。

微服务的优势:

解决了人的问题;

使用微服务,可以更方便的完成功能的复用;

可以给不同的服务进行不同的部署

六、总结

一些概念:

1、应用(Application)/ 系统(System)

一个应用,就是一个/组 服务器程序

2、模块(Module)/ 组件(Component)

一个应用,里面有很多功能,每个独立的功能,就可以称为是一个模块/组件

3、分布式(Distributed)

引入多个主机/服务器,协同完成一系列的工作(物理上的多个主机)

4、集群(Cluster)

引入多个主机/服务器,协同完成一系列的工作(逻辑上的多个主机)

5、主(Master)/ 从(Slave)

多个服务器节点,其中一个是主,另外的是从。从节点的数据要从主节点这里同步过来。

6、中间件(Middleware)

和业务无关的服务(功能更通用的服务)

例如:

数据库

缓存

消息队列

.......

7、可用性(Availability)

系统整体可用时间  /  总的时间   是一个系统的第一要务

8、 响应时长(衡量服务器的性能)

9、吞吐(衡量系统处理请求的能力)

总结:所谓的分布式系统,就是想办法引入更多的硬件资源!!

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

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

相关文章

Spark---RDD算子(单值类型Value)

文章目录 1.RDD算子介绍2.转换算子2.1 Value类型2.1.1 map2.1.2 mapPartitions2.1.3 mapPartitionsWithIndex2.1.4 flatMap2.1.5 glom2.1.6 groupBy2.1.7 filter2.1.8 sample2.1.9 distinct2.1.10 coalesce2.1.11 repartition2.1.12 sortBy 1.RDD算子介绍 RDD算子是用于对RDD进…

【UEFI基础】EDK网络框架(基础说明)

基础说明 UEFI中的网络框架大致如下: 红框部分是实现UEFI的EDK2开源项目中网络框架自带的实现,红框之外的部分需要网卡设备商提供驱动。UEFI下通常推荐使用最右边的形式,即网卡设备商提供实现了UNDI的网卡驱动。因此UEFI网络框架的另一个形式…

线性代数_对称矩阵

对称矩阵是线性代数中一种非常重要的矩阵结构,它具有许多独特的性质和应用。下面是对称矩阵的详细描述: ### 定义 对称矩阵,即对称方阵,是指一个n阶方阵A,其转置矩阵等于其本身,即A^T A。这意味着方阵A中的…

python 知识点

ping ping 不能带协议,如:ping baidu.com 引入包顺序 分三级,第一级是 Python 的内置库,第二级是第三方库,第三级是自己的代码。每一级用一个空行间隔 运算符 keyError:key不存在 列表推导式 创建字典 字…

git 如何撤销历史某次merge

git,如何 撤销某一次历史提交或merge,并保留该版本的后续提交? 场景1: 你有两个功能迭代版本的分支,一个是 15 号上线,一个是25号上线。5号的时候产品突然说,这两个版本一起上,然后…

【REST2SQL】03 GO读取JSON文件

REST2SQL需要一些配置信息,用JSON文件保存,比如config.json 1 创建config.json配置文件 {"hostPort":"localhost:5217","connString":"oracle://blma:5217127.0.0.1:1521/CQYH","_oracle":"ora…

ubuntu 执行apt-get update报错

系统是Ubuntu22.04 执行apt-get update 遇到如下情况 E: 无法下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/jammy/main/binary-arm64/Packages 404 Not Found [IP: 101.6.15.130 443] E: 无法下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/jammy-upda…

RocketMQ5.0新组件Proxy

前言 RocketMQ 4.x 版本之前,一套完整的 MQ 服务包含的组件有:Namesrv、Broker、Consumer、Producer。 RocketMQ 5.0 版本之后,官方引入了一个新的组件:Proxy,它的作用是什么呢? 架构对比 RocketMQ 4.x …

Day22 二叉树part08 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

二叉树part08 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 方法一:递归法(利用二叉搜索树性质) class Solution { public:TreeNode* lowestCommonAncestor(TreeN…

OpenCV-14图片的四则运算和图片的融合

一、图片的四则运算 1. 加法运算 通过使用API add来执行图像的加法运算 cv2.add(src1, src2)需要再其中传入两张图片。 图片就是矩阵,图片的加法运算就是矩阵的加法运算。 因此加法运算中要求两张图的shape必须是相同的。 首…

基于SpringBoot的旅游网站

目录 前言 开发环境以及工具 项目功能介绍 用户端: 管理端: 详细设计 用户端首页 登录页面 管理端页面 源码获取 前言 本项目是一个基于IDEA和Java语言开发基于SpringBoot的旅游网站。应用包含管理端和用户端等多个功能模块。 改革开放以来&am…

用HTML的原生语法实现两个div子元素在同一行中排列

代码如下&#xff1a; <div id"level1" style"display: flex;"><div id"level2-1" style"display: inline-block; padding: 10px; border: 1px solid #ccc; margin: 5px;">这是第一个元素。</div><div id"…

漏洞复现-任我行CRM系统SmsDataList接口SQL注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

APPnium 自动化实践 :第一步adb 连接手机

1. 下载安装 adb ,添加到环境变量。 ADB Download - Get the latest version of ADB and fastboot 2. 手机开启开发者模式 https://developer.huawei.com/consumer/cn/doc/quickApp-Guides/quickapp-open-developer-option-0000001137005543 3. adb 连接设备 【And…

国家开放大学形成性考核 统一考试 学习资料参考

试卷代号&#xff1a;11107 传感器与测试技术 参考试题 一、单项选择题&#xff08;12小题&#xff0c;每小题3分&#xff0c;共36分&#xff09; 1.以下不属于压电式传感器的特点的是&#xff08; &#xff09;。 A.体积小 B.结构简单…

Stable Diffusion模型概述

Stable Diffusion 1. Stable Diffusion能做什么&#xff1f;2. 扩散模型2.1 正向扩散2.2 反向扩散 3. 训练如何进行3.1 反向扩散3.2 Stable Diffusion模型3.3 潜在扩散模型3.4 变分自动编码器3.5 图像分辨率3.6 图像放大 4. 为什么潜在空间是可能的&#xff1f;4.1 在潜在空间中…

Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)

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

【论文精读】A Survey on Large Language Model based Autonomous Agents

A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式&#xff0c;例如在时域中表现出平稳性的动态纹理模式&#xff0c;以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

c++语言基础17-判断集合成员

题目描述 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测试数据。 每组数据第一行首先是一个正整数 m&#xff0c;表示集合中元素的数量&#xff08;1 < m &…