【Redis】高并发分布式结构服务器

文章目录

  • 服务端高并发分布式结构
    • 名词基本概念
    • 评价指标
    • 1.单机架构
      • 缺点
    • 2.应用数据分离架构
    • 应用服务集群架构
    • 读写分离/主从分离架构
    • 引入缓存-冷热分离架构
    • 分库分表(垂直分库)
    • 业务拆分⸺微服务
  • 总结

服务端高并发分布式结构

名词基本概念

  • 应⽤(Application)/系统(System)

为了完成一整套服务的一个程序或相互配合的程序群。例子:为了完成⼀项任务,⽽搭建的由⼀个⼈或者⼀群相互配的⼈组成的团队

  • 模块(Module)/组件(Component)

当应⽤较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于理解。例子:军队中为了进⾏某据点的攻克,将⼈员分为突击⼩组、爆破⼩组、掩护⼩组、通信⼩组等

  • 分布式(Distributed)

分布式(Distributed)是指将计算、任务或数据分散到多个独立的计算机或节点上进行处理的方式。(即:将系统中的多个模块被部署于不同服务器之上)与传统的集中式系统相比,分布式系统具有更高的灵活性、可扩展性冗余性。

在分布式系统中,各个节点(模块)可以通过网络进行通信和协作,共同完成任务。每个节点独立地执行一部分工作,并根据需要与其他节点进行交互。节点之间可以相互传递消息、共享资源和数据,以实现更加复杂和大规模的计算和服务。(跨主机之间的模块之间的通信基本要借助⽹络⽀撑完成)

例子1:Web服务器与数据库分别⼯作在不同的服务器上,或者多台Web服务器被分别部署在不同服务器上

例子2:为了更好的满⾜现实需要,⼀个在同⼀个办公场地的⼯作⼩组被分散到多个城市的不同⼯作场地中进⾏远程配合⼯作完成⽬标。

  • 集群(Cluster)

部署于多台服务器上的、为了实现特定⽬标的⼀个/组特定的组件,整个整体被称为集群。比如,多个MySQL⼯作在不同服务器上,共同提供数据库服务⽬标,可以被称为⼀组数据库集群

分布式和集群的区别

分布式强调的是物理形态,即⼯作在不同服务器上并且通过⽹络通信配合完成任务。 =>物理上的多台主机

集群更在意逻辑形态,即是否为了完成特定服务⽬标 =>逻辑上的多台主机,比如:一台主机上部署多个服务器程序


  • 主(Master)/从(Slave)

集群中,通常有⼀个程序需要承担更多的职责,被称为主;其他承担附属职责的被称为从

⽐如MySQL集群中,只有其中⼀台服务器上数据库允许进⾏数据的写⼊(增/删/改),其他数据库的数据修改全部要从这台数据库同步⽽来,则把那台数据库称为主库,其他数据库称为从库。主库:可以读和写入 从库:只可以进行读取

  • 中间件(Middleware)

⼀类提供不同应⽤程序⽤于相互通信的软件,即处于不同技术、⼯具和数据库之间的桥梁

例子:⼀家饭店开始时,会每天去市场挑选买菜,但随着饭店业务量变⼤,成⽴⼀个采购部,由采购部专职于采买业务,称为厨房和菜市场之间的桥梁


评价指标

  • 可⽤性(Availability)

考察单位时间段内,系统可以正常提供服务的概率/期望。例如:年化系统可⽤性=系统正常提供服务时⻓/⼀年总时⻓。平常说的4个9即系统可以提供99.99%的可⽤性,5个9是99.999%的可⽤性

  • 响应时⻓(ResponseTimeRT)

⽤⼾完成输⼊到系统给出⽤⼾反应的时⻓,例如:点外卖业务的响应时⻓=拿到外卖的时刻-完成点单的时刻

需要衡量的是最⻓响应时⻓、平均响应时⻓和中位数响应时⻓。这个指标原则上是越⼩越好,但很多情况下由于实现的限制,需要根据实际情况具体判断

  • 吞吐(Throughput)vs并发(Concurrent)

吞吐考察单位时间段内,系统可以成功处理的请求的数量并发指系统同⼀时刻⽀持的请求最⾼量。实践中,并发量往往⽆法直接获取,很多时候都是⽤极短的时间段(⽐如1秒)的吞吐量做代替

例如⼀条辆⻋道⾼速公路,只有两条通道,但是⼀分钟可以通过20辆⻋,则并发是2,⼀分钟的吞吐量是20


1.单机架构

单机架构:只有一台服务器,这台服务器用来负责所有的工作。整个系统在物理上只由一个节点组成,所有的计算和存储都发生在这个节点上,比如一个电商网站:

image-20231020150808661

  • Web服务器软件:Tomcat、Netty、Nginx、Apache
  • 数据库软件:MySQL、Oracle、PostgreSQL、SQL Server

注意:在单机程序当中,本质上可以把数据库服务器也去掉,用一个应用服务器即负责业务,又负责数据存储

大部分的中小公司的产品,都是这种单机架构,整个系统只有一个单机服务器。由于计算机硬件发展速度非常之快,主机的性能都很高,能支持非常高的并发和非常大的数据存储,已经能满足大部分中小公司的需求。

单机架构相对于分布式架构来说,系统比较容易进行管理和维护,数据传输和处理的延迟较低,易于部署

当业务需求进一步增长时,用户量和数据量等都会增加,一台服务器难以应对时,就需要引入更多的主机和其他硬件资源


缺点

  1. **有限的性能和扩展性:**由于计算和存储资源都集中在一个节点上,无法有效地利用分布式环境下多个节点的计算和存储能力当系统的工作负载和数据量增加时,单机架构可能无法满足性能和扩展性(比如主机上能够增加的硬件资源等,都是有限的)的要求。
  2. 单点故障:由于只有一个节点,如果这个节点出现故障或停机,整个系统将无法正常运行
  3. 硬件资源限制:单个节点的硬件资源(CPU、内存、磁盘,网络等)是有限的无法满足大规模数据处理和存储的需求。
    • 服务器每次收到一个请求,都是需要消耗上述的硬件资源去处理请求,如果同一时刻处理的请求太多,就可能导致某个硬件资源不够用,就会导致服务器处理请求的时间变长/处理出错

如果真的遇到了上述的场景,如何处理

1.开源 => 增加更多的硬件资源,但是一台主机上可以增加的硬件资源也是有限的,取决于主板的拓展能力,如果一台主机拓展到极限了还是不够,那么就只能引入多台主机了,引入多台主机后需要在软件上做出对应的调整和适配。此时系统就可以称为是分布式系统,系统复杂性大大提高,出现bug概率提高

2.节流 =>在软件上做优化,通过性能测试,找到是哪个环节出现的瓶颈


2.应用数据分离架构

系统的访问量逐步上升,逐渐逼近了硬件资源的极限,⾯对当前的性能压⼒,我们需要未⾬绸缪去进⾏系统重构、架构挑战,以提升系统的承载能⼒,可以选择将应⽤和数据分离的做法,可以最⼩代价的提升系统的承载能⼒

引入多台主机后,就不是单机架构了,系统就可称为“分布式系统”

image-20231020151152226

应用服务器和数据库服务器就是不同的服务器。应⽤服务通过⽹络访问数据库服务当中的数据,并且可以根据不同服务的特点配置不同的服务器,从而达到更高的性价比

  • 应用服务器会包含更多的业务逻辑,需要大量的计算分析,对cpu,内存性能要求高。所以可以配置CPU比较好的主机
  • 数据库服务器需要更大的硬盘空间,更快的数据访问速度,对空间要求高。可以配置更大硬盘的服务器,甚至可以上固态硬盘(SSD)

硬盘分类:

  • 机械硬盘:便宜,访问速度慢
  • 固态硬盘:贵,访问速度快

应用服务集群架构

随着数据量进一步增加,单台应⽤服务器已经⽆法满⾜需求了。单机应⽤服务器⾸先遇到了瓶颈,此时可以有两种解决方法:

  • 垂直扩展/纵向扩展:通过购买性能更优、价格更⾼的应⽤服务器来应对更多的流量。这种⽅案的优势在于完全不需要对系统软件做任何的调整;但劣势也很明显:硬件性能和价格的增⻓关系是⾮线性的,意味着选择性能2倍的硬件可能需要花费超过4倍的价格,其次硬件性能提升是有明显上限的
  • ⽔平扩展/横向扩展:通过调整软件架构,增加应⽤层硬件,将用户流量分担到不同的应⽤层服务器上,来提升系统的承载能⼒

优势在于成本相对较低,并且提升的上限空间也很⼤。但劣势是带给系统更多的复杂性,需要技术团队有更丰富的经验,并且为了解决⽤⼾流量向哪台应⽤服务器分发的问题,需要⼀个专⻔的系统组件(负载均衡器)做流量分发

  • 用户的请求先到达负载均衡器/网关服务器,

image-20231020151237439

负载均衡器(Load Balancer):也是一个单独的服务器,或者称为网关。是一种用于分发网络流量的设备或软件。它位于应用程序和网络基础设施之间,将传入的流量(请求)分配到多个服务器或计算资源上,以实现负载的均衡和性能的优化。(和之前学习的多线程思想相似,都是通过流量分发到多处进行处理,以提高效率)

负载均衡器的主要功能包括:

  1. 流量分发:接收传入的请求流量,将其分发到后端的多个服务器或计算资源上,以确保每个服务器都能得到相对均等的工作负载。
  2. 负载调度:采用不同的调度算法,如轮询、权重、最少连接等,来决定请求应该被分发到哪个后端服务器上。根据服务器的性能和负载情况,动态地调整流量分发策略。
    • 策略1:轮询算法—将请求依次分给不同的应⽤服务器
    • 策略2:随机选择算法—每次随机将请求分发给一台应用服务器
    • 策略3:基于权重的轮询算法—为不同的服务器(⽐如性能不同)赋予不同的权重,能者多劳
    • 策略4:⼀致哈希散列算法—通过计算⽤⼾的特征值(⽐如?IP?地址)得到哈希值,根据哈希结果做分发,优点是确保来⾃相同⽤⼾的请求总是被分给指定的服务器
  3. 高可用性:可以监控后端服务器的可用性,并在某个服务器发生故障或不可用时,自动将流量转移到其他正常工作的服务器上,确保服务的连续性和高可用性。
  4. 健康检查:可以定期检查后端服务器的健康状态,如响应时间、负载情况等,并根据检查结果来决定是否将流量分发给该服务器
  5. 扩展性:通过添加更多的后端服务器,可以实现系统的水平扩展,以满足不断增长的流量需求

负载均衡器的流量承担能力是远远超过应用服务器的,因为它只用单纯的分配任务服务器是需要进行执行任务的,所花时间是更长的。如果超过负载均衡器的承受能力,就引入更多的负载均衡器,也就是多个机房,用来分担流量

  • 负载均衡软件:Nginx、HAProxy、LVS、F5等

读写分离/主从分离架构

通过负载均衡解决了请求量过大的问题,大量请求可以得到并行处理了,⽆论扩展多少台服务器,这些请求最终都会从数据库读写数据,那么到一定程度上,就会到达瓶颈点。并且不能将数据库服务器和应用服务器一样进行扩展,因为将数据分散到不同的数据库后,会破坏数据的一致性,例如转账,如果一个数据库的数据修改了,另一个数据库没修改,就造成数据不一致

解决办法:保留⼀个主要的数据库作为写⼊数据库,其他的数据库作为从属数据库

  • 从库的所有数据全部来⾃主库的数据,经过同步后,从库可以维护着与主库⼀致的数据
  • 为了分担数据库的压⼒,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中

image-20231020151333060

应⽤中需要对读写请求做分离处理,所以可以利⽤⼀些数据库中间件,将请求分离的职责托管出去。例如:MyCat、TDDL、Amoeba、Cobar等类似数据库中间件


引入缓存-冷热分离架构

实际上读的频率是远高于写的频率,因此主数据库服务器一般是一个,从数据库服务器有多个(一主多从),同时从数据库通过负载均衡的方式,让应用服务器进行访问。针对数据库响应速度比较慢的问题,将数据进行“冷热”划分,将热点数据放到缓存中,冷的数据放到硬盘。

  • 热点数据:⼀些数据的读取频率远⼤于其他数据的读取频率

image-20231020151425040

针对热数据,为了提升其读取的响应时间,可以增加本地缓存,并在外部增加分布式缓存。缓存热⻔商品信息或热⻔商品的html⻚⾯等。通过缓存能把绝⼤多数请求在读写数据库前拦截掉,⼤⼤降低数据库压⼒

注意:缓存服务器中存放一小部分热点数据,根据二八原则:20%的数据,能够支持80%的访问量。数据库中存储的还是完整的数据,只是将热点数据放到缓存中了,缓存的速度非常快,但是容量小,成本高,也是Redis出现的位置。Redis的核心功能就是作为缓存服务器

代价:数据的一致性问题,如果存储服务器的数据被修改,访问时使用的是缓存的数据,那就出现错误了


分库分表(垂直分库)

引入分布式系统不光要去应对高的请求量,也需要应对更大的数据量。虽然一个服务器存储的数据量可以达到几十个TB,即使如此面对不同的应用场景,也会存不下。需要使用多台主机存储数据,所以可以针对数据库进行分库分表

原本是一个数据库服务器,这个服务器上存储了多个数据库,现在由于数据量太大,一个数据库服务器存不下那么多数据,就引入多个数据库服务器,每个服务器上存储一个或一部分数据库

image-20231020151636814

如果某个表特别大,一台服务器存不下,也可以针对表进行拆分,使用多个存储服务器进行存储


业务拆分⸺微服务

之前的应用服务器,一个服务器中要实现所有的业务,会导致这一个服务器的代码越来越复杂按照功能拆成多组微服务,就可以便于代码的维护,互相之间对数据的直接访问进⾏隔离,可以利⽤Gateway、消息总线等技术,实现相互之间的调⽤关联。甚⾄可以把⼀些类似⽤⼾管理、安全管理、数据采集等业务提成公共服务

image-20231020151745857

应用服务器复杂了之后,就需要更多的人力资源进行维护,增加了管理成本。为了减少管理成本,就可以把一个复杂的服务器,拆分成更多的,功能单一的,更小的服务器(微服务),有利于划分组织结构,分多组进行管理

引入微服务主要是为了解决人的管理问题,付出的代价有:

1.系统性能下降,多个被拆出来的服务,功能之间需要更依赖网络通信。解决办法:引入更多的机器提升性能,万兆网卡等等配套设施

2.系统复杂程度提高,可用性降低,出现问题的概率增加。 解决办法:引入更丰富的报警机制,监控系统,以及运维人员


总结

1.单机架构(应用程序+数据库服务器)

2.数据库和应用程序分离

  • 应用程序和数据库服务器分别放到不同的主机上进行部署

3.引入负载均衡,将应用服务器集群化

  • 通过负载均衡器把请求比较均匀的分发给集群当中的每个应用服务器
  • 好处是:当集群当中的某个主机挂了,其它的主机仍然可以承担服务,提高了整个系统的可用性

4.引入读写分离,数据库主从结构

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

5.引入缓存,冷热数据分离

  • 进一步的提升了服务器针对请求的处理能力 【28原则】
  • 引入的问题:数据库和缓存的一致性问题

6.引入分库分表,数据库能够进一步拓展存储空间

7.引入微服务,从业务上进一步拆分应用服务器

  • 从业务功能的角度,把应用服务器拆分成更多的功能更单一,更简单,更小的服务器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker的安装、基础命令与项目部署

文章目录 前言一、docker安装与MySQL部署1.Linux环境下docker的安装(1)基于CentOS7(2)基于Ubuntu 二、docker基础1.常见命令(1)快速创建一个mysql容器(MySQL得一键安装)。&#xff0…

centos7 部署 Flink

1. 准备 安装的前提是虚拟机里已安装了jdk 去官网下载 Flink 所有版本下载地址:https://archive.apache.org/dist/flink/ 找到下图的安装包,下载即可 下载完后,将其上传至虚拟机的某个地方,本人将其放在 /home/flink/ 下 解压…

Learning to Segment Rigid Motions from Two Frames 代码复现

环境配置 https://github.com/gengshan-y/rigidmask 1.拉取代码 git clone https://github.com/gengshan-y/rigidmask.git cd rigidmask2.创建conda环境,修改rigidmask.yml name: rigidmask channels:- pytorch- pytorch3d- conda-forge- defaults dependencies…

java--构造器

1.构造器是什么样子 构造器分为无参构造(就相当于你有车子,但是里面是空的)和带参构造(就相当于你有车子,里面还有几个妹纸,你真该死啊) 2.构造器有什么特点 创建对象时,对象会去调用构造器。 3.构造器的常见应用场景 创建对象…

Maven进阶系列-继承和聚合

Maven进阶系列-继承和聚合 文章目录 Maven进阶系列-继承和聚合1. 继承2. 继承的作用2.1 在父工程中配置依赖的统一管理2.2 在父工程中声明自定义属性2.3 父工程中必须要继承的配置 3. 聚合4. 聚合的作用 1. 继承 Maven工程之间存在继承关系,例如工程B继承工程A&…

基于Qt QTreeView|QTreeWidget控件使用简单版

头文件解析: 这是一个C++代码文件,定义了一个名为MainWindow的类。以下是对每一句的详细解释: ```cpp #ifndef MAINWINDOW_H #define MAINWINDOW_H ``` 这是一个条件编译指令,用于避免头文件的重复包含。`MAINWINDOW_H`是一个宏定义,用于唯一标识这个头文件。 ```cpp #…

idea的设置

1.设置搜索encoding,所有编码都给换为utf-8 安装插件 eval-reset插件 https://www.yuque.com/huanlema-pjnah/okuh3c/lvaoxt#m1pdA 设置活动模板,idea有两种方式集成tomcat,一种是右上角config配置本地tomcat,一种是插件,如果使用插件集成,则在maven,pom.xml里面加上tomcat…

【TES720D】青翼科技基于复旦微的FMQL20S400全国产化ARM核心模

板卡概述 TES720D是一款基于上海复旦微电子FMQL20S400的全国产化核心模块。该核心模块将复旦微的FMQL20S400(兼容FMQL10S400)的最小系统集成在了一个50*70mm的核心板上,可以作为一个核心模块,进行功能性扩展,特别是用…

AI:49-基于深度学习的杂草识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

架构设计之大数据架构(Lambda架构、Kappa架构)

大数据架构 一. 大数据技术生态二. 大数据分层架构三. Lambda架构3.1 Lambda架构分解为三层3.2 优缺点3.3 实际案例 四. Kappa架构4.1 结构图4.2 优缺点4.3 实际案例 五. Lambda架构与Kappa架构对比 其它相关推荐: 系统架构之微服务架构 系统架构设计之微内核架构 鸿…

diffusers-Load adapters

https://huggingface.co/docs/diffusers/main/en/using-diffusers/loading_adaptershttps://huggingface.co/docs/diffusers/main/en/using-diffusers/loading_adapters 有几种训练技术可以个性化扩散模型,生成特定主题的图像或某些风格的图像。每种训练方法都会产…

zookeeper集群选举机制

Zookeeper选举机制——第一次启动 zookeeper集群三个重要的参数(决定选举结果) SID : 服务器 ID 。 用来唯一标识一台 ZooKeeper集群中的机器,每台机器不能重 , 和 myid 一致 。 ZXID :事务 ID 。 ZXID 是…

开发项目管理必备神器!10款好用的在线看板工具推荐!

在当今高速发展、竞争激烈的商业环境中,项目管理已经成为了许多组织的生存之道。项目管理可以有效地协调资源,监控进度,把握风险,并实现组织的策略目标。然而,传统的项目管理方法已经无法满足日益复杂和变化的工作需求…

常用 sqlite3 命令

本次将向您讲解 SQLite 编程人员所使用的简单却有用的命令。这些命令被称为 SQLite 的点命令,这些命令的不同之处在于它们不以分号 ; 结束。 让我们在命令提示符下键入一个简单的 sqlite3 命令,在 SQLite 命令提示符下,您可以使 用各种 …

取消Excel打开密码的两种方法

Excel设置了打开密码,想要取消打开密码是由两种方法的,今天分享这两种方法给大家。 想要取消密码是需要直到正确密码的,因为只有打开文件才能进行取消密码的操作 方法一: 是大家常见的取消方法,打开excel文件之后&a…

十分钟设置免费海外远程桌面 | 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面

目录 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 1. 启动Amazon Lightsail实例 2. 配置远程桌面 3. 启动远程桌面 4. 使用远程桌面 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 前言 ①本教程将向您介绍如何使用Amazon Lightsail服务的免费套餐轻松搭…

基本微信小程序的外卖点餐订餐平台

项目介绍 餐饮行业是一个传统的行业。根据当前发展现状,网络信息时代的全面普及,餐饮行业也在发生着变化,单就点餐这一方面,利用手机点单正在逐步进入人们的生活。传统的点餐方式,不仅会耗费大量的人力、时间&#xf…

中国长城-安全防护-硬件,软件,细粒度权限划分-等级保护,人员意识

目录 等级保护 安全防护 中国长城-安全防护 硬件,软件,细粒度权限划分-等级保护,人员意识 等级保护 安全防护 建立安全管理制度:制定信息安全政策,明确安全管理职责,建立安全培训和考核机制&#xff0c…

微服务框架SpringcloudAlibaba+Nacos集成RabbitMQ

目前公司使用jeepluscloud版本,这个版本没有集成消息队列,这里记录一下,集成的过程;这个框架跟ruoyi的那个微服务版本结构一模一样,所以也可以快速上手。 1.项目结构图: 配置类的东西做成一个公共的模块 …

【SpringMVC篇】5种类型参数传递json数据传参

🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺普通参数🌺POJO参数🌺嵌套…
最新文章