存储系统知识
Write Ahead Log
- 问题引入
存储系统在运行过程中,每时每刻都在发生数据更新。如对文件数据的CRUD.
对于中心控制节点来说,这些都会涉及到metadata的更新操作。
为了保持元数据和文件数据的状态一致性,系统所有对数据的操作对应的元数据变更都应该要持久化到元数据db中。
那假如这个metadata db是在外存的,那么是否意味着高频的io操作?是否可以引入延时写入的方法?
Write Ahead Log
核心意思:在把metadata的变更操作写到持久稳定的db之前,会预写入一个log中,然后再由另外的操作把log apply到外部持久的db中。
当系统要处理大量的事务操作的时候,WAL与实时同步db相比效率会更高。
WAL的日志还可以在利于数据库的事务回滚。
WAL执行细节
WAL不记录metadata本身,而是记录进行的操作的log
数据库的操作记录,首先会写到内存的buffer中,当buffer满或者人工触发flush的时候,会把事务数据写出到WAL的log中。
系统在每次完成一个操作的时候,同时会把改动应用到memory和WAL的buffer内,再由buffer 写到外存的metadata db中。
当老的WAL被apply到元数据db的时候,可以用commitId来标识当前最新的事务。所以整个过程可以理解为做一次checkpoint,即当前db的状态+WAL = 新的db状态
分布式存储系统知识
分布式存储要解决的问题:
1.数据分布
如何把数据分布到多台服务器才能够保证数据分布均匀?数据分布到多台服务器后,如何实现跨服务器的读写操作?
2.一致性
如何把数据的多个副本复制到多台服务器并且保证一致性?
3.容错
如何检测服务器故障?如何自动把出现故障的服务器的数据和服务迁移到集群中的其他服务器?
4.负载均衡
新增的服务器和集群正常运行过程中如何实现自动负载均衡?数据迁移过程如何保证不影响已有事务?
5.事务与并发控制
如何实现分布式事务?实现多版本并发控制?
6.压缩与解压缩
如何根据数据特点设计合理的压缩算法?
分布式存储分类
-
非结构化数据
-
结构化数据
-
半结构化数据
介于非结构化数据和结构化数据之间,HTML文档属于半结构化数据。其与结构化数据最大的区别在于,半结构化数据模式结构和内容混在一起
分布式文件系统
存储大量的图片,照片,视频等非结构化数据对象,叫做Blob(Big binary object data)
分布式文件系统用于存储Blob对象,块存储或者大文件存储。
我们首先定义分布式文件