分布式对象存储

参考《分布式对象存储----原理、架构以及Go语言实现》(作者:胡世杰)

对象存储简介

数据的管理方式

以对象的方式管理数据,一个对象包括:对象的数据、对象的元数据、对象的全局唯一标识符

访问数据的方式

分布式对象存储_第1张图片

可扩展的分布式系统

接口和数据存储分离的架构

分布式对象存储_第2张图片

  1. 接口实现对象的存取

  2. 接口通过 RabbitMQ 消息队列进行通讯

    1. 向某个 exchange 进行一对多的消息群发

      1. apiServices exchange 每一台接口服务节点都会接收到任意一台数据服务节点的心跳

      2. dataServices exchange 所有数据服务节点绑定该 exchange 并接收来着接口服务的定位消息,拥有对象的数据服务节点会使用消息单发通知该接口服务节点

        当发送一条信息给 dataServices exchange 时,定位成功后,将会创建一个反馈信息的临时队列,临时队列将在一定时间后关闭

    2. 向某个消息队列进行一对一的消息单发

REST接口

  • GET 提供一个 locate接口 在这里插入图片描述

    客户端通过GET方法发送对象定位请求,接口服务节点收到请求后会向数据服务层群发一个定位信息,然后等待反馈。如果存在则返回该数据服务节点的地址

RabbitMQ 消息设计

数据服务心跳信息

分布式对象存储_第3张图片

接口服务的定位信息及反馈

分布式对象存储_第4张图片

对象PUT流程

分布式对象存储_第5张图片

分布式对象存储_第6张图片

对象GET流程

分布式对象存储_第7张图片

元数据服务

散列值与散列函数

分布式对象存储_第8张图片

分布式对象存储_第9张图片

计算散列值的算法推荐

书上的例子为 SHA-256 更高级别的有SHA-512

加入元数据服务的框架

书中建议是使用ElasticSearch

我们项目选择的是MySQL对元数据进行存储

REST接口

  • GET新增一个参数version

在这里插入图片描述

表示对象数据的版本默认状态下是最新版本

  • PUT需提供一个名为 Digest 的 HTTP 请求头,和一个名为 Content-Length 请求头

分布式对象存储_第10张图片

  • DELETE只需要删除元数据而数据节点继续保存数据,知道所有元数据都被删除

在这里插入图片描述

  • 查询指定对象的所有版本

在这里插入图片描述

分布式对象存储_第11张图片

在这里插入图片描述

在这里插入图片描述

ES接口(MySQL)

对象PUT流程

分布式对象存储_第12张图片

对象GET流程

分布式对象存储_第13张图片

数据校验与去重

需要数据校验的原因

分布式对象存储_第14张图片

给数据加入缓存功能

在数据服务层再加入一个缓存服务

数据服务的REST接口

  • 以POST方法访问数据服务temp接口在URL中指定数据对象的散列值,并提供一个名为size的HTTP请求头,用于指定对象的大小。这会在数据服务中创建一个临时对象,该接口返回一个随机生成的uuid用于标记临时对象

分布式对象存储_第15张图片

  • 将对象内容发到数据服务temp接口,并写入临时对象

分布式对象存储_第16张图片

  • 根据对比散列值的结果进行操作

分布式对象存储_第17张图片

对象PUT流程

分布式对象存储_第18张图片

数据冗余与即使修复

对象存储的数据冗余策略

分布式对象存储_第19张图片

断点续传

数据压缩

数据维护

你可能感兴趣的:(分布式,对象存储,学习,分布式,架构)