分布式存储系统是大量普通PC服务器通过Internet互联,对外作为一个整体提供存储服务。
最近在研读《大规模分布式存储系统》一书,顺便摘录整理,深入了解原理和架构,方便学习,欢迎交流。
一、概念
分布式存储系统具备如下几个特性:
1、可扩展
分布式系统可以扩展到几百台到几千台的集群规模,而且,随着集群规模的增长,系统整体性能表现为线性增长。
2、低成本
分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以使用较低的成本实现自动运维。
3、高性能
无论是整个集群还是单机服务,都要求分布式系统具备高性能。
4、易用
分布式存储系统需要提供医用的对外接口,另外也要求具备完善的监控、运维工具,并能够方便地与其它系统集成。如 Hadoop云计算系统导入数据。
分布式存储系统的挑战主要在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。
所涉及的技术主要为:1、分布式系统;2、数据库;
二、分类
由于分布式存储系统所面临的数据需求相对复杂,大致可以将其分为三类:
1、非结构化数据。如办公文档、图片、音视频等;
2、结构化数据。一般存储在关系型数据库中,可以用二维关系表结构表示;
3、半结构化数据。介于非结构化和结构化数据之间,如HTML,一般是自描述的;
按照处理不同类型的数据,可分为:
1、分布式文件系统
在互联网应用当中需要存储大量的图片、照片、视频等非结构化数据对象,这类数据以对象的形式组织,对象之间没有关联,通常称之为Blob(Binary Large Object)数据。典型的系统有Facebook Haystack、TFS等。在分布式文件系统内部按照数据块(chunk)来组织数据,每个数据块的大小大致相同,每个数据块可以包含多个Blob对象或者定长块,一个大文件也可以拆分为多个数据块,这是其底层的实现原理。
2、分布式键值系统
分布式键值系统用于存储关系简单的半结构化数据。只提供主键的CRUD功能,典型的系统有Amazon Dynarno。从数据结构的角度看,分布式键值系统和传统的Hash表类似,不同的是,分布式键值系统支持将数据分布到集群中的多个存储节点。一般用作缓存,如大家熟知的Memcache。
3、分布式表格系统
分布式表格系统用于存储关系较为复杂的半结构化数据,除了具有CRUD的功能外,还支持扫描某个主键范围。并且借鉴了很多关系数据库的技术,例如支持某种程度上的事务。典型的系统包括Google Bigtable、Mega store等。但不支持较为复杂的操作,如多表关联、多表联接、嵌套子查询等。
4、分布式数据库
分布式数据库一般由单机关系数据库扩展而来,用于存储结构化数据,提供SQL关系查询语言,支持多表关联,嵌套查询,并发控制和数据库事务等复杂操作。典型的系统包含Mysql Sharding 、Amazon RDS、OceanBase。
-------------------------------------------
有任何建议或问题,欢迎加微信一起学习交流,欢迎从事IT,热爱IT,喜欢深挖源代码的行业大牛加入,一起探讨。
个人微信号:bboyHan
热衷:Golang、Java、Python、区块链、架构设计、数据分析等。