作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL
PostgreSQL
Redis
Etcd
上个小节我们介绍了MongoDB的副本集,他虽然解决了集群高可用的问题,但是由于他的写只能在主节点执行,并且受限单机的资源限制,所以他能够存储的数据是有限的。今天来介绍一个存储大量数据,并且可以做到横向扩容。
分片是 MongoDB 横向扩展 以支持海量数据和高吞吐量操作的方法。
分片是一种“分而治之”的数据库集群技术,它将一个巨大的数据集拆分成更小的部分(称为分片),并将这些部分分布到多个 MongoDB 实例(即分片服务器)上。
一个分片集群包含以下三个核心组件:
mongos 进程。它是应用程序的入口,本身是无状态的。应用程序连接 mongos 而不是直接连接分片。mongos 根据配置服务器的元数据,将客户端请求路由到正确的分片上。mongos 可以直接将请求精准路由到对应的分片。mongos 会将查询 广播 到所有分片,然后汇总结果返回给客户端(这种操作称为 散射/聚集,性能较差)。mongos 发起请求时,mongos 会分析查询条件。特性 | 复制集 | 分片集群 |
|---|---|---|
核心目标 | 高可用、数据冗余 | 水平扩展、处理海量数据 |
数据状态 | 所有节点存储全量数据 | 每个分片存储部分数据 |
写操作 | 只在主节点进行 | 通过 mongos 并行写入多个分片 |
架构复杂度 | 相对简单 | 非常复杂(需要管理 mongos、配置服务器、多个分片) |
适用场景 | 保证服务不中断、数据不丢失 | 数据量巨大或并发写入量极高 |