Redis:从消息中间件到分布式核心

Redis:从消息中间件到分布式核心
The open source, in-memory data store used by millions of developers as a database, cache streaming engine, and message broker.



Redis 的初心.最初就是用来作为一个"消息中间件"的(消息队列). 分布式系统下的生产者消费者模型 当前很少会直接使用 Redis 作为消息中间件(业界有更多更专业的消息中间件使用)

一、Redis 概述与定位

Redis 是一种开源、内存型数据存储系统,广泛被开发者用作数据库、缓存、流处理引擎和消息代理。

最初定位为“消息中间件”(消息队列),但目前在生产环境中较少直接使用 Redis 作为消息队列,因为有更专业的替代方案。

Redis 本质是在内存中存储变量,适用于分布式系统,在单机环境下直接使用变量存储通常更优。

二、Redis vs MySQL

Redis 优势

访问速度快,适用于对性能要求高的场景。

可作为数据库使用,读写性能远高于 MySQL。

Redis 劣势

存储空间有限,不如 MySQL 可扩展。

更多互联网产品对性能要求并不极端,MySQL 仍能满足需求。

结合使用场景

可采用 Redis + MySQL 组合方案,利用“二八原则”(20% 热点数据满足 80% 访问需求)。

需注意数据同步问题,系统复杂度会提升。

三、分布式系统概念

单机架构

只有一台服务器,负责所有业务与数据存储。

许多公司的产品仍采用单机架构,现代单机性能已足够支撑高并发与大数据存储。

分布式系统出现原因

当业务增长导致单机资源(CPU、内存、硬盘、网络等)不足时,需引入多台主机。

资源瓶颈可能导致请求处理变慢或出错。

扩展方式

开源:增加硬件资源(简单粗暴,但有上限)。

节流:软件优化(需定位性能瓶颈,对开发能力要求高)。

主板扩展能力有限,最终需引入多台主机,此时系统成为“分布式系统”。

分布式系统带来的影响

系统复杂度大幅提升。

出现 Bug 的概率增加,可能导致加班和年终奖风险。

需进行服务分离(如应用服务与数据库服务分离)。

需引入负载均衡机制,将请求分发到多个应用服务器节点。

分布式系统是“无奈之举”,应在单机无法满足需求时再考虑。

引入多台主机需软件架构相应调整,如负载均衡、服务拆分、数据同步等。

系统设计需权衡性能、复杂度与维护成本,避免过度设计。

数据库主从架构

    • 主服务器:通常只有一个,负责写操作。
    • 从服务器:可以有多个,负责读操作。
    • 负载均衡:从数据库通过负载均衡的方式让应用服务器访问,分担读压力,提高系统并发能力。

数据库采用一主多从架构:

分布式存储与数据扩展

  • 分布式系统不仅为应对高并发,也需应对大数据存储问题
  • 单台服务器的存储容量有限(即使可达几十TB),在某些场景(如短视频存储)仍可能无法满足需求。
  • 解决方案:引入多台主机进行分布式存储,将数据分布在不同服务器上。

主服务器一般是一个.从服务器可以有多个(一主多从)

同时从数据库通过负载均衡的方式,让应用服务器进行访问

引入分布式系统,不光要能够去应对更高的请求量(并发量),同时也要能应对更大的数据量~~

是否可能会出现,一台服务器已经存不下数据了呢??

当然会存在!!!虽然一个服务器,存储的数据量可以达到几十个TB,即使如此也可能会存不下~~ 短视频一台主机存不下,就需要多台主机来存储


四、微服务架构

  • 背景:传统单体应用服务器业务复杂、代码臃肿,难以维护。
  • 微服务定义:将一个复杂的服务器按功能拆分为多个功能单一、独立部署的小型服务

之前应用服务器,一个服务器程序里面做了很多的业务.这就可能会导致这一个服务器的代码变的越来越复杂

为了更方便于代码的维护,就可以把这样的一个复杂的服务器,拆分成更多的,功能更单一,但是更小的服务器

(微服务) ||

   服务器的种类和数量就增加了


微服务的优势

  1. 解决人的问题:便于团队按功能模块分工,提升开发与维护效率。
  2. 功能复用:微服务可被多个系统或模块复用。
  3. 独立部署:不同服务可独立部署、升级与扩展,提高灵活性。


微服务带来的挑战与代价

  1. 系统性能下降
    1. 服务拆分后,服务间依赖网络通信,而网络通信速度可能成为瓶颈。
    2. 图片中标注(位置:[160, 160, 298, 192])提示:“网络通信的速度很可能是比硬盘还慢的!”
    3. 缓解方式:使用更高速网络设备(如万兆网卡),或增加硬件资源(“充钱”)。
  2. 系统复杂度提高,可用性受影响
    1. 服务数量增多,故障概率增加。
    2. 需要加强监控、报警与运维体系,保障系统可用性。


业务场景与组织结构适配

  • 微服务架构有利于按功能划分团队,每个团队负责一个或一组微服务,提升组织协作效率。
  • 架构调整需与团队结构、业务发展相匹配。

    总结建议

    • 微服务架构是为解决复杂系统维护与团队协作问题而引入的,并非适用于所有场景。
    • 引入微服务需权衡性能、复杂度、运维成本与团队能力
    • 在高速网络硬件发展的背景下,网络通信瓶颈逐渐缓解,但仍需在架构设计中充分考虑通信开销与可用性保障。

      五、概念补充

      软件架构基础

      • 应用 (Application) / 系统 (System):指代一个或一组服务器程序,是提供服务的整体。
      • 模块 (Module) / 组件 (Component):应用内部的细分单位,指代其中每一个独立的功能部分。
      • 中间件 (Middleware):与具体业务无关的通用服务。例如:数据库、缓存、消息队列等。

      多机协作模式

      • 分布式 (Distributed):侧重于物理层面,引入多个物理主机协同完成一系列工作。
      • 集群 (Cluster):侧重于逻辑层面,也是引入多个主机协作,但对外通常表现为一个整体。
      • 主 (Master) / 从 (Slave):分布式系统中常见的结构。其中一个节点为主,其余为从,从节点的数据通常从主节点同步而来。

      系统评价指标

           1.可用性 (Availability)

      系统的“第一要务”,衡量系统能够正常提供服务的时间比例。

      • 计算公式:$可用性 = \frac{系统整体可用时间}{总时间}$
      • 常见标准
        • 4个9:$99.99\%$ 可用。
        • 5个9:$99.999\%$ 可用(极高标准)。

          2. 性能指标

      • 响应时长 (Response Time, RT):衡量服务器处理单个请求的速度,数值越小越好
      • 吞吐 (Throughput) vs 并发 (Concurrent)
        • 衡量系统处理请求的能力。
        • 是衡量服务器性能高低的关键方式。

      六、 分布式系统演化小结

      这份资料总结了系统为了应对更高并发和更大规模数据,在硬件资源和架构设计上的演进过程:


         1.基础架构阶段

      • 单机架构:应用程序与数据库服务器部署在同一台机器上。
      • 数据库和应用分离:将应用程序和数据库分别部署在不同的主机上,初步缓解性能压力。

         2. 应用层扩展

      • 引入负载均衡与集群
        • 通过负载均衡器将请求均匀分发给应用服务器集群。
        • 核心价值:提高可用性。当集群中某个主机宕机时,其他主机仍可承担服务。

         3. 数据库层扩展

      • 读写分离(主从结构)
        • 主节点 (Master):负责写数据。
        • 从节点 (Slave):负责读数据,数据从主节点同步而来。
      • 分库分表:为了进一步扩展存储空间和处理能力,对数据库进行水平或垂直拆分。

         4. 性能与业务优化

      • 引入缓存(冷热数据分离)
        • 利用二八原则(20% 的热点数据承担 80% 的访问量),提升系统处理能力。
        • 典型工具:Redis 常在分布式系统中扮演此类角色。
        • 挑战:需要解决数据库与缓存之间的数据一致性问题。
      • 微服务架构:从业务功能角度出发,将应用服务器拆分为功能更单一、更简单的微小服务。

      核心结论

      • 技术服务于业务:真实的演化过程与业务发展密切相关,业务才是第一位的。
      • 分布式本质:所谓的分布式系统,其核心思路就是通过技术手段引入更多的硬件资源来支撑业务。

      Read more

      【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

      【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

      摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

      By Ne0inhk
      ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

      ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

      🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

      By Ne0inhk
      Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

      Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

      欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

      By Ne0inhk
      Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

      Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

      文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

      By Ne0inhk