Skip to content

Releases: JIeJaitt/goDistributed-Object-storage

v1.2.0

07 Jul 08:03
18190e5
Compare
Choose a tag to compare

可扩展的分布式系统

分布式系统的好处在于可扩展性,只需要加入新的节点就可以自由扩展集群的性能。

本章主要是实现了分布式,从整体上来看,就是接口服务节点和数据服务节点

  • 接口服务结点主要的作用是:转发PUTGET请求到数据服务节点
  • 数据服务节点才是真正处理PUTGET请求

另外为了验证系统,还加入了locate接口服务,用来定位对象资源。具体实现如下:

首先接口服务收到"/locate/文件名"的请求,会通过Locate方法获取数据服务的监听地址,先将文件名通过交换机 dataServers 发送到消息队列,数据节点收到之后(Consume)通过Send方法将自身的监听地址发送给自己的消息队列,然后接口服务通过Consume方法收到这个监听地址。

数据服务节点和接口服务节点主要通过消息队列RabbitMQ进行通信,具体使用在于

  • object包:接口服务节点转发对象

    • 首先是GET请求,先通过locate方法获得对象保存的数据节点位置(监听地址),然后通过Http.Get(url)获得响应即对象内容,此时的URL的服务器是数据服务节点
    • 其次是PUT请求,先随机选择一个数据服务节点(可以通过遍历哈希表找到随机的一个),然后通过Http.NewRequest("PUT", "URL", reader)转发该请求,再通过Client.Do(request)获取响应内容(状态码)

    数据服务节点的object包和上一章的一样

  • heartbeat包:数据服务节点每隔五秒发送心跳消息(该节点的监听地址),通过Publish发送到apiServers(交换机),交换机绑定(Bind)一个消息队列,接口服务节点则通过该消息队列接收数据服务节点的心跳消息,并将监听地址保存到哈希表,每10秒清除没有发送心跳消息的数据服务节点(可能出问题了)

  • locate包:接口服务节点通过Publish将定位消息(对象)发送到dataServers(交换机),同样绑定一个消息队列,数据服务节点收到定位消息,会在服务器寻找该对象是否存在,发送反馈消息(Send),存在就会发送该对象保存在哪一个数据节点(监听地址)。

另外是测试的环境

  • 通过在一台虚拟机绑定多个IP地址实现多个节点。
  • 安装RabbitMQ-server,创建两个交换机

v1.0.0

03 Jul 15:07
Compare
Choose a tag to compare

单机版的对象存储系统以及简单的 REST 风格接口

实现了单机分布式存储系统简单的 REST 风格接口基本实现,并且在一定程度上完善了项目文档,方便展望整体的分布式云存储项目框架的具体实现目标

对象存储是以对象的方式来管理数据的(对象数据+元数据+ID),通过REST网络服务来访问对象。提升了储存系统的扩展性

首先是处理路由,这一章主要是实现了两个REST网络接口:

  • 一个是PUT请求,将数据保存到服务器中,通过 io.Copy()将想要储存的内容复制到文件即可
  • 另一个是GET请求用来下载对象。在服务器中寻找对象,同样通过io.Copy()将服务器该对象的数据写入到HTTP响应体中