存储系统知识体系
2022-11-10 10:04:18 0 举报
AI智能生成
用于快速建立整个存储系统的知识体系
作者其他创作
大纲/内容
存储系统设计
三步骤
估算性能需求
评估维度
数据量
请求量
读QPS
写TPS
预留量
选择存储系统
主要分类
SQL
OLTP
MySQL
PostgreSQL
Oracle
OLAP
ClickHouse
Hive
NoSQL
文档型
MongoDB
Couchbase
列式存储
HBase
Cassandra
KV型
Redis
Memcache
全文搜索
ElasticSearch
对象存储
OSS
类文件系统
HDFS
时序存储
InfluxDB
文件存储
NAS
图数据库
Neo4j
空间数据库
PostGIS
NewSQL
TiDB
选择依据
根据存储系统的技术本质
应用场景
优缺点
性能量级
分支主题
设计存储方案
数据模型设计
算法设计
处理读、写请求的时间复杂度
如何学习存储系统?
理解技术本质
应用场景
优缺点
性能量级
明确部署架构
Redis的几种部署架构
主从
Sentinel
Cluster
研究数据模型
Redis
String
List
Sorted List
HBase
Table
Column
模拟业务场景
如何用Redis存储关注关系?
如何用HBase存储关注关系?
分区架构
概念
区:城市或区域
作用
容灾
城市级别的灾难:地震、水灾
就近访问
实现原理
DNS
基于用户IP实现就近访问
GLSB
分支主题
备份策略
设计要点
成本
数据中心建设成本
可扩展性
增加新的分区
策略
集中式
分支主题
独立备份
分支主题
互相备份
分支主题
分片架构
分片算法
核心原则
数据均匀分布
注意:数据均匀分布后请求不一定均匀
分片规则
范围
Hash
一致性Hash
分片键
ID
用户ID
订单ID
日期/时间
路由规则
静态路由
配置文件
动态路由
配置中心
设计要点
有独立的配置中心记录分片/路由信息
配置中心需要保障高可用
读写流程
1. 客户端先向配置中心发起分片/路由查询
2. 然后再向具体的节点发起读写请求
实例
MongoDB Cluster
分支主题
HDFS NameNode
路由转发
设计要点
每个节点保存所有的分片/路由信息
一般通过gossip协议实现分片/路由信息的更新
最终一致性
分类
客户端转发
Redis Cluster
分支主题
服务端转发
Elasticsearch
分支主题
高可用
独立备份
互相备份
读写分离
作用
提升数据库的读性能
不能提升数据库的写性能
场景
读多写少
核心要点
一主多从
主、从库都存储了全量的数据
主从复制
通过binlog实现复制
复制方式
同步复制
半同步复制
异步复制
读写流程
读主库或从库
写主库
带来的复杂度
复制延迟
解决办法
读写绑定:写操作后的读操作指定去读主库
需要代码层面的改造
读从库失败后,重试读主库
只适用于先insert后select场景
可能会增加主库的读压力
业务分级
核心业务都读写主库
非核心业务读写分离
主节点写入可能成为瓶颈
存储可能成为瓶颈
无法应对数据量的不断增加
扩展
延迟从库
主要用于备份
有效防止删库、删表等指令
实现方式
SDK
Sharding-JDBC
中间件Proxy
MyCAT
分库分表
分库
按业务领域拆分库
用户库
订单库
商品库
带来的复杂度
跨库join
跨库order by
跨库事务
分库太多导致数据库的活跃连接数太多
分表
垂直拆分
拆分时机
不同的列访问频率不一样
同一个表拆分列到不同的表中
用户登录信息表
用户基本信息表
水平拆分
拆分时机
经验值:2000w行
路由算法
分段(范围)
0 — 1000
1000 — 2000
2000 — 3000
按日期
日志数据
流水数据
hash
一致性hash
带来的复杂度
跨表count(id)
跨表order by
实现方式
SDK
Sharding-JDBC
中间件Proxy
MyCAT
集群
主备
主库
备库
主要用于备份数据(数据恢复)
不承担读、写请求
延迟备库
主从
主库
承担读、写请求
从库
承担读请求
选举
一致性算法
Bully
Raft
Zab
Paxos
基于zookeeper实现
异地灾备
分支主题
异地多活
分布式事务
2PC
Prepare
Commit
3PC
0 条评论
下一页