中间件

浏览该分类下的所有文章

消息队列 & 搜索引擎

消息队列用于解耦、异步、削峰;生产者‑消费者通过共享队列实现,可用wait/notify、Lock或BlockingQueue。顺序消费通过同键落在同一分区或队列保证。防止丢失依赖持久化、ACK/confirm、复制和手动提交offset;防重复通过唯一ID或幂等。失败时采用死信队列重试。推模式适实时广播,拉模式适按需获取。RabbitMQ强调可靠性实时性,Kafka强调高吞吐。

es 在数据量很大的情况下(数十亿级别)如何提高查询效率?

es 在大规模数据(十亿级)下的查询性能主要依赖 OS 缓存;因此应让索引文件尽量能放入内存。可通过减少写入字段、将非检索数据迁至 MySQL/HBase、对热点数据预热、冷热分离(热、冷数据分别建索引并分配节点)来降低磁盘访问。文档模型要在写入时完成关联,避免在 ES 中使用 join、nested、parent‑child 等高开销操作。分页应避免深度分页,改用 scroll 或 search_after 逐页获取快照。上述措施综合使用,可显著提升 ES 在海量数据下的查询效率。

Redis 知识总结

Redis 支持丰富数据结构(string、hash、list、set、zset),原生集群、单线程+IO 多路复用实现高效。采用定期+惰性过期、maxmemory‑policy 多种淘汰策略。主从复制实现读写分离,Sentinel 负责监控、故障转移。持久化提供 RDB 快照和 AOF 日志,各有优缺点,常组合使用。Cluster 模式通过 16384 slot、一致性哈希和 gossip 协议实现水平扩展和高可用,支持多 master 多 slave。

消息队列基本原理和选型对比

消息队列解决解耦、异步、削峰填谷,常用点对点和发布/订阅模式。选型关注顺序、伸缩、留存、容错、可靠性、时序、吞吐、路由等。Kafka 吞吐高、持久可靠但全局有序和延时受限;RabbitMQ 路由灵活、支持定时消息,性能一般且学习成本高;Pulsar 计算存储分离,支持无缝扩容、跨地域复制和延时消息,架构较复杂;RocketMQ 提供顺序队列、P2P 与 Pub/Sub,可靠性高、协议丰富,社区活跃度一般。依据业务流量、可靠性和扩展需求选择合适实现。

Redis 缓存击穿、缓存穿透、缓存雪崩的解决方案

Redis 通过在内存中缓存 DB 数据,提高读写性能,但不当设计会出现三大问题: 1)缓存击穿:热点数据在高并发下刚好失效,所有请求冲击 DB。解决方案包括不设过期或加随机过期、预热热点、使用分布式锁防止并发 DB 读取。 2)缓存穿透:查询不存在的键,每次都落库。可在 DB 未命中时缓存空值,或使用布隆过滤器在查询前拦截不存在的键。 3)缓存雪崩:大量键同时间失效或 Redis 故障导致请求全部落库。防止措施有给过期时间加随机值、接口限流、服务熔断,以及构建 Redis 哨兵/Cluster 高可用集群。 通过上述策略,可保障缓存的高可用性,避免对后端数据库造成冲击。

Redis分布式锁的七种方案

Redis 常用于实现分布式锁,可靠的锁应具备互斥、超时释放、可重入、高性能、高可用和安全性。文中系统梳理了七种实现方式:① SETNX + EXPIRE,操作不原子易导致死锁;② SETNX + 时间戳值,需客户端时间同步且仍缺唯一标识;③ Lua 脚本一次性完成 SETNX 与 EXPIRE,保证原子性;④ SET EX PX NX 直接原子加锁;⑤ 在 value 中存唯一随机标识并用 Lua 脚本校验后删除,防止误删;⑥ Redisson 框架通过 watchdog 自动续期解决锁提前失效问题;⑦ Redlock 多节点算法,在多数 Redis master 上同时加锁并校时,提升跨节点的安全性。每种方案的优缺点和适用场景均有阐述。

Elasticsearch7.x实战指南

Elasticsearch 7.x 通过废弃 TransportClient、统一使用 High‑level REST client、默认类型改为 _doc、分片数降至 1 等改动,提升了连接方式和资源占用。内部升级至 Lucene 8,加入 Weak‑AND、Intervals 查询以及更智能的集群协调与熔断机制,显著优化查询相关性和内存安全。本文系统演示了 ES7 的基本操作(索引、映射、文档的增删改查),以及高级特性包括地理坐标、动态映射、动态模板和 Query DSL 的全文、过滤与聚合用法,为 Java 开发者提供了从集群连接到复杂查询的完整实战指南。

Redis持久化、主从与哨兵架构

Redis提供RDB快照(save同步、bgsave异步)和AOF日志(appendfsync策略、重写),并可开启混合持久化以加速重启。可用crontab实现定时备份。主从复制使用PSYNC,支持全量/增量同步和断点续传,并可配置只读从节点。Jedis示例展示连接池、Pipeline批量请求及Lua脚本实现原子操作。