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

一、初识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、吞吐(衡量系统处理请求的能力)

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

相关文章:

  • 云计算复习笔记--期末
  • C++上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法
  • 【大数据】Zookeeper 客户端的命令行操作
  • fineBI web组件传参
  • MongoDB笔记
  • 使用 Docker Compose 部署 Docker Registry
  • Vue:Vue 3.4 新特性
  • 工业相机——输出图像格式 RAW、RGB、YUV
  • 本地计算机 上的 My5OL808 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止
  • 在 CentOS 7.8 上安装 Node.js
  • php生成唯一ID的5种方法介绍
  • 第十五章:面向对象程序设计
  • Mabatis中String类型传参常见问题和解决办法
  • 商务智能|描述性统计分析与数据可视化
  • 嵌入式硬件电路原理图之跟随电路
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CSS实用技巧
  • Docker: 容器互访的三种方式
  • HashMap ConcurrentHashMap
  • HTML5新特性总结
  • js
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • nfs客户端进程变D,延伸linux的lock
  • Node 版本管理
  • Python学习之路13-记分
  • React Native移动开发实战-3-实现页面间的数据传递
  • vue自定义指令实现v-tap插件
  • 从0实现一个tiny react(三)生命周期
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 一个SAP顾问在美国的这些年
  • 再谈express与koa的对比
  • Mac 上flink的安装与启动
  • Spring Batch JSON 支持
  • $.ajax,axios,fetch三种ajax请求的区别
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (NSDate) 时间 (time )比较
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)windows配置JDK环境
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)平衡树
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Micro Framework初体验(二)
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net通用权限框架B/S (三)--MODEL层(2)