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

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

  • Elasticsearch批量写入性能调优实战:2.2.3 案例:电商订单日志每秒10万条写入优化
    • 1. 原始架构与瓶颈分析
      • 1.1 初始集群配置
      • 1.2 性能瓶颈定位
    • 2. 全链路优化方案设计
      • 2.1 优化架构全景图
      • 2.2 优化措施矩阵
    • 3. 分阶段性能调优实施
      • 3.1 第一阶段:硬件与基础配置
      • 3.2 第二阶段:写入客户端优化
    • 4. 压力测试与效果验证
      • 4.1 测试环境
      • 4.2 调优效果对比(核心指标优化对比)
    • 5. 生产环境稳定性保障
      • 5.1 动态限流配置
      • 5.2 监控报警策略(生产环境监控报警矩阵)
    • 经验总结与避坑指南
      • 关键成功要素
      • 典型避坑指南
    • 最终效果

Elasticsearch批量写入性能调优实战:2.2.3 案例:电商订单日志每秒10万条写入优化


1. 原始架构与瓶颈分析

1.1 初始集群配置

组件配置详情问题表现
ES集群6节点(8C32G),HDD RAID5磁盘IO持续100%
索引设计15主分片/1副本,默认refresh_interval段合并风暴
写入客户端单线程批量提交,每次500条CPU利用率不足30%
JVM配置16GB堆,CMS GCGC停顿频繁(>2秒/分钟)

1.2 性能瓶颈定位

# 热点线程分析# 此请求用于获取 Elasticsearch 集群中各节点的热点线程信息# 热点线程是指在一段时间内占用大量 CPU 时间的线程# 通过分析热点线程,可以找出可能存在性能瓶颈的线程,例如哪些线程在频繁执行复杂的操作,从而定位性能问题的根源
GET /_nodes/hot_threads# 资源监控数据节点 CPU 利用率:75% (us 40%, sy 35%# 节点 CPU 利用率表示当前节点的 CPU 被使用的比例,这里为 75%,说明 CPU 处于较高的负载状态# "us" 代表【用户空间】 CPU 使用率,为 40%,表示用户进程占用 CPU 的时间比例# "sy" 代表【系统空间】 CPU 使用率,为 35%,表示操作系统内核进程占用 CPU 的时间比例# 较高的 CPU 利用率可能会导致系统响应变慢,需要检查是否有大量的复杂查询、数据处理或其他高 CPU 消耗的操作在运行磁盘 IO 等待:92%# 磁盘 IO 等待表示磁盘 I/O 操作导致线程等待的时间比例,这里达到了 92%# 这意味着大部分时间线程都在等待磁盘完成读写操作,说明磁盘 I/O 可能成为系统的瓶颈# 可能的原因包括磁盘性能不足、磁盘负载过高、数据存储不合理等,需要对磁盘进行优化,如更换高性能磁盘、优化数据存储策略等VM Old GC 频率:8 /分钟# JVM(Java 虚拟机)的 Old GC 即老年代垃圾回收# 频率为 8 /分钟,说明 JVM 老年代垃圾回收比较频繁# 频繁的老年代垃圾回收会导致系统暂停,影响系统的性能和响应时间# 可能是由于堆内存分配不合理、存在内存泄漏、大对象频繁创建等原因导致,需要调整 JVM 堆内存配置、检查代码是否存在内存泄漏问题线程池 bulk 队列拒绝数:1200/分钟# 线程池 bulk 队列用于存储等待被批量操作线程池处理的请求# 拒绝数为 1200/分钟,意味着每分钟有 1200 个批量操作请求由于队列已满而被拒绝# 这可能是因为批量操作请求过多,而线程池的处理能力有限或者队列大小设置不合理# 需要增加线程池的线程数量、扩大队列大小或者优化批量操作的请求频率
  • 关键瓶颈诊断:
      1. 磁盘IO瓶颈:HDD顺序写入速度仅120MB/s
      1. 批量处理效率低:单线程客户端无法利用多核
      1. 索引配置不合理:频繁refresh导致大量小段
      1. 内存压力大:默认JVM配置导致频繁GC
参数名默认策略(Elasticsearch原生默认行为)动态调整范围(是否支持运行时修改及限制条件)监控指标(对应Metricbeat/API监控指标名称)风险场景
core固定为CPU核心数需重启生效thread_pool.bulk.active数值过小导致CPU利用率不足
max等于core(禁用弹性扩容)需重启生效thread_pool.bulk.threads设置过高引发线程竞争
keep_alive固定30秒支持动态调整thread_pool.bulk.largest过短导致频繁线程创建/销毁
queue_size固定200可动态调整(需关闭auto_queue)thread_pool.bulk.queue过大导致OOM,过小触发拒绝
auto_queue自动调整队列(初始200→max 100000)运行时自动调节thread_pool.bulk.rejected突发流量时可能误判

2. 全链路优化方案设计

2.1 优化架构全景图

在这里插入图片描述

2.2 优化措施矩阵

优化维度具体措施预期收益
硬件升级HDD -> NVMe SSD磁盘IO提升10倍
索引设计动态模板+时间序列优化写入吞吐+50%
写入客户端多线程批量+自动重试机制CPU利用率提升3倍
集群配置独立协调节点+专用Ingest节点拒绝率降为0
JVM调优G1GC+堆内存调整GC停顿减少80%
流量控制基于Kafka的削峰填谷峰值处理能力2倍
  • G1GCGarbage First Garbage Collector)是 Java 虚拟机(JVM)中的一种垃圾回收器,Java 9 中成为默认的垃圾回收器。
    • G1GC 是一款面向服务器端应用的垃圾回收器,旨在满足大内存、多处理器系统的需求。主要目标是在尽可能减少停顿时间的同时,保持较高的吞吐量与传统的垃圾回收器(如 CMS、Parallel GC 等)不同,G1GC 采用了基于 Region 的内存管理方式和标记 - 整理算法。

3. 分阶段性能调优实施

3.1 第一阶段:硬件与基础配置

# elasticsearch.yml 核心修改# 优化 Elasticsearch 集群的性能,以适应特定的业务需求和硬件环境# "thread_pool.bulk" 用于配置批量操作线程池的相关参数# 批量操作(如使用 Bulk API 一次性处理多个文档的索引、更新或删除操作)是 Elasticsearch 中常用的操作方式,合理配置该线程池能提高批量操作的效率
thread_pool.bulk:# "size" 定义了批量操作线程池中的线程数量# 这里设置为 32,是基于每个节点有 16  CPU,乘以 2 意味着线程池的线程数量是 CPU 核心数的 2 # 这样设置的目的是充分利用 CPU 资源,让更多的线程同时处理批量操作请求,但又不会过度创建线程导致系统资源耗尽size: 32          # 16核CPU × 2# "queue_size" 表示批量操作线程池队列的最大容量# 当有大量的批量操作请求进入系统,且线程池中的线程都在忙碌时,新的请求会被放入队列中等待处理# 这里将队列大小设置为 2000,意味着队列最多可以容纳 2000 个批量操作请求# 如果队列满了,新的请求可能会被拒绝,需要根据实际的业务流量和处理能力来调整这个值queue_size: 2000# "indices.memory.index_buffer_size" 用于设置索引缓冲区的大小# 索引缓冲区是 Elasticsearch 用于临时存储待索引文档的内存区域# 设置为 30% 表示将堆内存的 30% 分配给索引缓冲区# 较大的索引缓冲区可以减少磁盘 I/O 操作,提高索引性能,但也会占用更多的堆内存,可能会影响其他操作的性能# 需要根据系统的内存资源和业务的索引频率来合理调整这个比例
indices.memory.index_buffer_size: 30%# 索引模板配置# 索引模板用于定义新创建索引的默认设置和映射# 这里创建了一个名为 "orders" 的索引模板,当创建与该模板匹配的索引时,会自动应用模板中的设置
PUT _template/orders
{"settings": {# "number_of_shards" 定义了每个索引的主分片数量# 这里设置为 30,意味着每个新创建的与 "orders" 模板匹配的索引将有 30 个主分片# 增加主分片数量可以提高数据的并行处理能力和集群的扩展性,但也会增加集群的管理开销和资源消耗# 需要根据数据量、查询需求和集群规模来合理设置主分片数量"number_of_shards": 30,# "refresh_interval" 表示索引的刷新间隔# 这里设置为 "30s",意味着每隔 30 秒,索引会将内存中的数据刷新到磁盘上,使其可以被搜索到# 较长的刷新间隔可以减少磁盘 I/O 操作,提高索引性能,但会增加数据的可见延迟# 需要根据业务对数据实时性的要求来调整刷新间隔"refresh_interval": "30s",# "translog.durability" 用于设置事务日志的持久化策略# 这里设置为 "async",表示事务日志将异步刷新到磁盘# 异步刷新可以提高索引性能,但在发生故障时可能会丢失部分未刷新到磁盘的事务日志数据# 如果对数据的持久性要求较高,可以将其设置为 "request",表示每次请求都将事务日志同步刷新到磁盘"translog.durability": "async"}
}
  • 硬件升级方案:
    • 数据节点:12台(32CPU128G,2TB NVMe × 4 RAID0)
    • 协调节点:3台(16CPU64G,仅处理HTTP请求)

3.2 第二阶段:写入客户端优化

// 多线程BulkProcessor配置BulkProcessor bulkProcessor = BulkProcessor.builder(client::bulkAsync, new BulkProcessor.Listener() { /* 监听器 */ }).setBulkActions(2000)      // 2000文档提交.setBulkSize(new ByteSizeValue(10, ByteSizeUnit.MB)).setConcurrentRequests(8)  // 并发写入线程数.build();
  • 客户端优化关键参数:
    • 并发线程数 = 协调节点数 × 2 (3×2=6,取8预留余量)
    • 单个批量大小:10MB(根据ES官方建议5-15MB)
    • 重试策略:指数退避(最大重试3次)

4. 压力测试与效果验证

4.1 测试环境

组件配置详情
压测工具自研Go语言压测工具(模拟真实订单流)
测试数据集1亿条订单数据(含28个字段)
持续时间30分钟稳态压力测试

4.2 调优效果对比(核心指标优化对比)

指标优化前优化后提升幅度
平均吞吐量35,000/s121,000/s245%
P99写入延迟1200ms230ms80%
磁盘IO利用率98%65%-
拒绝请求数1,200/min0100%
GC停顿时间2.1s/min0.3s/min85%
  • 吞吐量趋势图:
140k ┤             ***************
120k ┤          ***               ***
100k ┤        **                     **80k ┤      **                         **60k ┤    **                             **40k ┤  **                                 **20k ┤**                                     **┼----------------------------------------5min   10min   15min   20min   25min

5. 生产环境稳定性保障

5.1 动态限流配置

# 索引级别限流(根据业务高峰动态调整)# 该操作的目的是对指定索引进行限流设置,并且可以依据业务高峰时段的不同情况动态调整限流参数,以保障 Elasticsearch 集群的稳定运行,避免因某个索引的操作过于频繁而影响整体性能。# PUT 请求用于更新资源,这里是更新名为 orders 的索引的设置。PUT /orders/_settings{# "index.rate_limit" 是用于设置索引操作速率限制的配置项。"index.rate_limit": {# "max_docs_per_second" 指定了每秒允许索引的最大文档数量。# 这里设置为 150000,表示在一秒内,对 orders 索引进行操作时,最多只能索引 150000 个文档。# 此设置可防止短时间内大量文档的涌入导致集群资源耗尽或性能下降。"max_docs_per_second": 150000,# "max_bytes_per_second" 指定了每秒允许索引的最大数据量。# 设置为 "500mb",意味着每秒对 orders 索引进行操作时,涉及的数据量不能超过 500 兆字节。# 结合文档数量限制和数据量限制,能更全面地控制索引操作的速率。"max_bytes_per_second": "500mb"}
}# 集群级别断路器# 集群级别断路器【用于防止 Elasticsearch 集群因内存使用过度而崩溃】。# 它会对某些可能消耗大量内存的操作进行限制,当达到或接近设定的限制时,会阻止这些操作继续执行。# "indices.breaker.total.limit" 是一个全局设置,用于定义整个集群中所有断路器的总内存使用上限。# 设置为 70%,表示集群中所有可能触发断路器的操作所使用的内存总和不能超过堆内存的 70%# 这样可以为集群保留一定的内存空间,用于其他必要的操作,确保集群的稳定性。
indices.breaker.total.limit: 70%

5.2 监控报警策略(生产环境监控报警矩阵)

监控指标报警阈值响应动作
bulk队列拒绝率> 0次/5分钟自动扩展协调节点
磁盘IO等待时间> 70%持续10分钟触发数据归档流程
JVM Old GC频率> 2次/分钟触发堆内存分析并扩容
节点CPU使用率> 85%持续5分钟动态降低索引refresh频率

经验总结与避坑指南

关键成功要素

    1. SSD硬件升级:NVMe SSD使磁盘IOPS从1,500提升至80,000
    1. 客户端多线程改造:写入并发从1线程提升到8线程
    1. 索引预分区策略:分片数从15增加到30(数据节点数×2.5)
    1. JVM垃圾回收调优:G1GC替代CMS,最大GC停顿从2.1s降至0.4s
    • CMSConcurrent Mark Sweep)是 Java 虚拟机(JVM)中的一种垃圾回收器,主要用于对老年代进行垃圾回收,其设计目标是尽量减少垃圾回收时的停顿时间,以提高应用程序的响应性,适合对响应时间要求较高的应用场景。
    • 是一种以获取最短回收停顿时间为目标的垃圾回收器,它基于 “标记 - 清除” 算法实现。

典型避坑指南

    1. 避免超大分片单个分片大小控制在30-50GB
    1. 禁用swap:防止内存交换导致性能断崖式下降
    1. 批量请求超时设置:建议为30s+指数退避重试
    1. 冷热数据分离:将历史数据迁移至冷节点

最终效果

  • 经过系统优化后,该电商平台在双11期间:
    • 峰值吞吐量:稳定处理12.4万条/秒订单日志
    • 资源利用率:CPU 75%、磁盘IO 65%、内存使用率70%
    • 系统稳定性:连续72小时无写入失败记录
    • 成本效益:硬件投入增加40%,处理能力提升300%

相关文章:

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch批量写入性能调优实战:2.2.3 案例:电商订单日志每秒10万条写入优化1. 原始架构与瓶颈分析1.1 初始集群配置1.2 性能瓶颈定位 2. 全链路…...

http的post请求不走http的整个缓存策略吗?

http的post请求不走http的整个缓存策略吗? DeepSeek R1 思考 33 秒 思考过程 嗯,用户问的是HTTP的POST请求是否不遵循整个缓存策略。我需要先回忆一下HTTP缓存的基本机制,然后考虑不同请求方法的缓存处理。 首先,HTTP缓存通常涉…...

c++ 预处理器和iostream 文件

在C中&#xff0c;预处理器和<iostream>头文件各自扮演关键角色&#xff0c;二者协同工作以实现程序的输入输出功能。以下是它们的详细关系和作用&#xff1a; 1. 预处理器的作用 处理预处理指令&#xff1a;预处理器在编译前执行&#xff0c;处理所有以#开头的指令&…...

【前端】前端设计中的响应式设计详解

文章目录 前言一、响应式设计的定义与作用二、响应式设计的原则三、响应式设计的实现四、响应式设计的最佳实践总结 前言 在当今数字化时代&#xff0c;网站和应用程序需要适应各种设备&#xff0c;从桌面电脑到平板电脑和手机。响应式设计应运而生&#xff0c;成为一种可以适…...

探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(二)

文章目录 2.3.3 极化编码巴氏参数与信道可靠性比特混合生成矩阵编码举例 2.3.4 极化译码最小单元译码串行抵消译码&#xff08;SC译码&#xff09;算法SCL译码算法 2.3.5 总结**Polar 码的优势****Polar 码的主要问题****Polar 码的应用前景** 2.3.6 **参考文档** 本博客为系列…...

打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、安装 Windows Docker Desktop - WSL问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Engine Stopped : Docker引擎停止三、解决方法 1、检查服务是否…...

6.人工智能与机器学习

一、人工智能基本原理 1. 人工智能&#xff08;AI&#xff09;定义与范畴 核心目标&#xff1a;模拟人类智能行为&#xff08;如推理、学习、决策&#xff09;分类&#xff1a; 弱人工智能&#xff08;Narrow AI&#xff09;&#xff1a;专精单一任务&#xff08;如AlphaGo、…...

RabbitMQ怎么实现延时支付?

一、使用“死信队列”消息过期时间 1、原理&#xff1a; 设置消息”存活时间“&#xff0c;如果没有被及时消费&#xff0c;就会被丢弃到一个”死信队列“&#xff0c;然后消费者监听这个死信队列处理消息 2、步骤&#xff1a; 2.1、创建两个队列&#xff1a; 2.1.1、普通队…...

vite-vue3使用web-worker应用指南和报错解决

主线程&#xff1a;初始化worker和监听子线程的消息 let worker: any; const salesConfigData ref<any[]>([]); // 显示非上架 const showNotList ref(false);// /src/views/ceshi/salesConfig/worker.js worker new Worker(new URL("/src/views/ceshi/salesConf…...

校园快递助手小程序毕业系统设计

系统功能介绍 管理员端 1&#xff09;登录&#xff1a;输入账号密码进行登录 2&#xff09;用户管理&#xff1a;查看编辑添加删除 学生信息 3&#xff09;寄件包裹管理&#xff1a;查看所有的包裹信息&#xff0c;及物流信息 4&#xff09;待取件信息&#xff1a;查看已到达的…...

python量化交易——金融数据管理最佳实践——使用qteasy管理本地数据源

文章目录 统一定义的金融历史数据表最重要的数据表数据表的定义交易日历表的定义&#xff1a;交易日历表: trade_calendar qteasy是一个功能全面且易用的量化交易策略框架&#xff0c; Github地址在这里。使用它&#xff0c;能轻松地获取历史数据&#xff0c;创建交易策略并完…...

BIO、NIO、AIO、Netty从简单理解到使用

Java编程中BIO、NIO、AIO是三种不同的I/O&#xff08;输入/输出&#xff09;模型&#xff0c;它们代表了不同的I/O处理方式。 Netty就是基于Java的NIO&#xff08;New Input/Output&#xff09;类库编写的一个高性能、异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可…...

计算机毕业设计SpringBoot+Vue.js工厂车间管理系统源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

一、图形图像的基本概念

文章目录 一、分辨率概念二、图形图像的区别三、位图和矢量图的区别 一、分辨率概念 图形显示计数中的分辨率概念有三种&#xff0c;即屏幕分辨率、显示分辨率和显卡分辨率。它们既有区别又有着密切的联系&#xff0c;对图形显示的处理有极大的影响。 1.屏幕分辨率 显示器分辨…...

前端跨域问题初探:理解跨域及其解决方案概览

在当今的Web开发中&#xff0c;跨域问题是一个常见且棘手的挑战 随着前端技术的不断进步&#xff0c;越来越多的应用需要从不同的域名、协议或端口获取资源 然而&#xff0c;浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;限制了这种跨域请求&#xff0c;以确保…...

SQL分组问题

下列为电商公司用户访问时间数据 统计某个用户连续的访问记录&#xff0c;如果时间间隔小于60s&#xff0c;就分为一组 id ts 1001 17523641234 1001 17523641256 1002 17523641278 1001 17523641334 1002 17523641434 1001 17523641534 1001 17523641544 1002 17523…...

Oracle 数据库基础入门(二):深入理解表的约束

在 Oracle 数据库的学习进程中&#xff0c;表的约束是构建健壮、准确且高效数据库的关键要素。约束如同数据库的 “规则守护者”&#xff0c;它通过对数据的限制&#xff0c;确保了数据的完整性和一致性&#xff0c;就如同交通规则保障道路上车辆行驶的有序性一样。对于 Java 全…...

DeepSeek掘金——DeepSeek-R1驱动的房地产AI代理

DeepSeek掘金——DeepSeek-R1驱动的房地产AI代理 本文探讨如何使用 Smolagents 和 DeepSeek-R1 构建房地产代理,并利用工具进行网页抓取和数据导出。 AI 代理对于自动化复杂的推理任务至关重要。Smolagents 是由 Hugging Face 开发的轻量级 AI 代理框架,允许将大型语言模型 …...

WebP2P技术在嵌入式设备中的应用:EasyRTC音视频通话SDK如何实现高效通信?

在数字化时代&#xff0c;实时通信技术&#xff08;RTC&#xff09;与人工智能&#xff08;AI&#xff09;的融合正在重塑各个行业的交互方式。从在线教育到远程医疗&#xff0c;从社交娱乐到企业协作&#xff0c;RTC的应用场景不断拓展。然而&#xff0c;传统的RTC解决方案往往…...

【零基础到精通Java合集】第三集:流程控制与数组

针对**“流程控制与数组”**的15分钟课程内容设计,聚焦代码逻辑设计与数据结构基础: 课程标题:流程控制与数组(15分钟) 目标:掌握分支/循环语法与数组操作,能编写条件判断与数据遍历程序 一、课程内容与时间分配 0-2分钟 课程目标与逻辑导图 明确学习目标:分支结构、…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...