背景架构设计 - 数据存储层
浏览:298 时间:2022-2-16

数据存储重要性:

数据是公司最重要的资产;

数据可靠性是企业的生命线,必须得到保证。

 单机存储原理:

存储引擎:存储系统的引擎,用于确定存储系统的功能和性能;

引擎类型:哈希存储引擎,B树存储引擎,LSM存储引擎

哈希存储引擎:基于哈希表结构:数组+链表;支持CreateUpdateDelete随机阅读

B树存储引擎:基于B Tree实现,它支持单个记录的CURD并支持顺序查找。更多地使用RDBMS。

LSM树存储引擎:数据修改保存在内存中,然后在某些条件下更新到磁盘;优势在于批量写作;缺点是磁盘和内存需要合并;

避免内存数据丢失:修改操作将写入CommitLog日志。

 数据模型:

文件:由目录树组织,如linux,mac,windows;

关系类型:每个关系都是一个表,由多行组成,每行有多列;

键值:Memcached,Tokey,Redis;

列存储类型:Casadra,Hbase;

图形数据库:Neo4J,InfoGrid,无限图

文档类型:MongoDB,CouchDB

事务与并发控制:

事务的4个基本属性:ACID原子性,一致性,隔离性,持久性

并发控制:

锁粒度:Process-> DB-> Table-> Row

提供读并发,Read未锁定:copy-on-write,MVCC

数据恢复:通过操作日志

 多机存储原理:

独立存储原理仍可用于多机存储;多级存储基于独立存储;

数据分发:

分布在多个节点上,在节点之间进行负载均衡;

分配方式:

静态:modulo,uid%32;

动态:一致的散列,数据漂移问题(更新前节点失败,更新迁移到节点B后A节点恢复);

复制:

分布式存储多个副本;保证高可靠性和高可用性;提交日志。

故障检测:

心跳机制,数据迁移,故障恢复;

FLP定理和设计:

FLP Impossiblity(FLP Impossible):

在异步消息传递方案中,即使只有一个进程失败,也无法确保非失败进程是一致的。

 CAP定理与设计:

CAP:网络分区的一致性,可用性,容差。

一致性和可用性需要权衡

分布式存储系统需要能够自动容错,这意味着需要保证分区容差。

 2PC(Two Phase Commit)协议与设计:

对于分布式事务;

组成两种类型的节点:

协调员(1);

交易参与者(多个);

分两个阶段:

请求阶段:协调员通知参与者准备提交或取消交易,所有参与者需要投票同意或不同意。

提交阶段:

在收到参与者的所有决定后,协调员做出决定(提交或取消);

通知参与者执行操作,所有参与者同意提交,否则取消;

参与者在收到协调员的通知后执行操作。

 2PC协议是阻塞式:

交易参与者可能会失败

- 设置超时时间;

协议可能有问题

- 记录,备用协调员

申请:交易订单等;

 Paxos协议与设计:

作用:

解决节点之间的一致性问题;

如果主节点被删除,则选择新节点;

主节点通常以操作日志的形式同步备用节点。

分为两个角色:propsor(Prpposer),acceptor(Acceptor);

执行步骤:

批准:提议者向Accepter发送接受消息,要求接受提供者;

确认:如果超过一半的接受者接受,建议的价值将生效,并且投标人将发送确认消息以通知所有接受者提议生效。

与2PC ::

比较

2PC协议保证了对多个数据切片的操作的原子性;

Paxos协议保证数据切片的多个副本之间的数据一致性;

Paxos协议用法:

实现全局锁定服务或命名和配置服务;

--- Apache Zookeeper

将用户数据复制到多个数据中心;

--- Google Megastore

  数据存储层冗余:

多个副本以实现高可用性访问。

如何实现:

数据复制:

基于日志;

Master-Slave:mysqlMongoDB

复制集: MongoDB

双写:

存储层多主对等结构;更灵活,但数据模块层成本更高;

数据备份:

冷备份:

定期将数据复制到存储介质是传统的数据保护手段;

优点:简单,便宜,技术难度大;

缺点:有定期数据不一致;恢复数据需要很长时间;

热备份:

在线备份;提供更好的高可用性;

异步热备份:

来自主存储器的写入将返回到应用程序,并且存储系统异步写入其他副本;

同步热备份:

多个数据副本是同步写入的,没有主从;

为了提高性能,应用程序同时写入;

响应延迟是最慢的服务器;

 数据存储层失效转移机制:

失败确认:是否失败,心跳;

访问传输:访问非停机机器的路由;存储数据完全相同;

数据恢复:主从,日志;