














根本原理:一种组件解决的是一种场景下如何快速读/写后立刻返回,但是同时保证读/写数据的安全(特别是写),安全是指不丢数据,数据与其他节点和组件正确及时同步,通常满足最终一致性。
说明:本节不单独阐述 MySQL,因为各类分布式/高并发组件正是为了弥补单一 MySQL 在高可用、弹性扩展与性能方面的不足。每个组件均应结合 MySQL 的协同配合与互补作用进行描述。
在高并发场景下,例如需要高速响应的登录、查询用户会话、排行榜、热点数据缓存,若直接访问 MySQL,延迟高且主库压力大,并发下易出现瓶颈和数据不一致风险。
引入 Redis(常做 MySQL 的缓存/会话层)后:
举例:
Mermaid 图:
graph LR User[用户请求] Redis[Redis 高速缓存] MySQL[MySQL 数据库] User -->|查询/请求| Redis Redis -- 查询命中 --> User Redis -- 缓存未命中/失效 --> MySQL MySQL -- 结果返回缓存 --> Redis Redis -- 定期/异步写入 --> MySQL
对于高并发场景下的日志、埋点、订单等数据写入,直连下游 Kafka 虽然吞吐高,但如果网络抖动或 Kafka 集群不稳定,极容易导致消息丢失或调用阻塞。
此时,采用语言层本地磁盘队列(如 Go diskqueue、NSQ diskqueue、DiskQueue-CPP、Chronicle Queue 等)作为“前置缓冲”,显著提升系统可靠性和业务弹性:
举例:
Mermaid 图:
graph LR App[上游业务/应用] DiskQ[本地磁盘队列] Consumer[消费者线程/进程] Kafka[Kafka 集群] App -->|高并发写入| DiskQ DiskQ -- 异步拉取 --> Consumer Consumer -->|批量推送| Kafka Kafka -- 状态波动时 --> DiskQ subgraph 本地可靠缓冲 DiskQ end
RabbitMQ 和 Kafka 都属于消息队列系统,核心都是用来实现异步解耦、削峰填谷,把生产者与消费者分离。但它们的定位和应用重点有所不同:
两者关系:都属于“消息队列”范畴,都是分布式系统的基础解耦中间件,但 RabbitMQ 偏向通用可靠队列、微服务事件链路;Kafka 偏向大数据流管道与日志持久化传输。部分企业会混用两者满足不同侧重业务。
Mermaid 图:
graph TD Producer[消息生产者] RabbitMQ[RabbitMQ] Kafka[Kafka] ConsumerA[消费方A(服务/任务)] ConsumerB[消费方B(日志/分析)] Producer --> RabbitMQ Producer --> Kafka RabbitMQ --> ConsumerA Kafka --> ConsumerB
Mermaid 图:RabbitMQ+MySQL 场景
sequenceDiagram participant Client as 生产者 participant MySQL as MySQL participant RabbitMQ as RabbitMQ participant Service as 其他服务/消费者 Client->>MySQL: 写业务数据 Client->>RabbitMQ: 投递消息 RabbitMQ->>Service: 分发可靠事件 Service-->>MySQL: 消费结果写回(可选)
Mermaid 图:Kafka+MySQL 场景
sequenceDiagram participant Producer as 事件/日志生产者 participant Kafka as Kafka participant Backend as 后台消费程序 participant MySQL as MySQL Producer->>Kafka: 写入高并发日志/事件 Backend->>Kafka: 批量拉取消息 Backend->>MySQL: 合并批量写入 Kafka-->>Backend: 支持offset重试
举例说明:
总结:
复杂分析和 OLAP 场景下,ClickHouse 作为 MySQL 的数仓分析扩展:
举例:
Mermaid 图:
graph TD MySQL[MySQL 业务数据库] -- 定期同步/ETL --> ClickHouse[ClickHouse] ClickHouse -- 聚合分析查询 --> BI[报表/BI应用] MySQL -- 实时写入 --> MySQL
针对全文检索、复杂多条件查询,用 ElasticSearch 做 MySQL 的高效搜索/分析“加速器”:
举例:
Mermaid 图:
graph LR User[用户查询请求] ES[ElasticSearch] MySQL[MySQL 业务库] User --> ES ES -- 命中 --> User ES -- 查详情 --> MySQL MySQL -- 业务数据回查 --> User MySQL -- 实时/定时同步 --> ES
在分布式系统中,像 etcd、Consul 这样的强一致性 KV 存储广泛用于全局配置管理、服务注册与发现、分布式锁等场景,能满足极高的一致性和低延迟需求。这类系统一般不与 MySQL 做数据归档,业务实时状态全部由 KV 存储保障,只有在极少数追溯需求下相关操作日志可能单独存入 MySQL,但并非业界常规实践。
举例:
Mermaid 图:
graph TD Service1[业务服务1] -- 配置/注册/锁定 --> etcd Service2[业务服务2] -- 配置/注册/锁定 --> etcd etcd -- 实时状态同步 --> Service1 etcd -- 故障容错/恢复 --> Service2
面对大体量文件,传统 MySQL 仅存文件元数据或指针:
举例:
Mermaid 图:
graph LR User[用户上传/下载] OSS_Storage["对象存储(Minio/S3/Ceph)"] MySQLDB[MySQL文件元数据库] User -- 上传/下载 --> OSS_Storage OSS_Storage -- 文件索引/状态通知 --> MySQLDB User -- 文件业务操作 --> MySQLDB MySQLDB -- 元数据(路径/关系) --> User
如果允许读/写慢,随便来。需要读/写又快,又安全,就是这些组件被创造出来的原因。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。