参考《分布式对象存储----原理、架构以及Go语言实现》(作者:胡世杰)
以对象的方式管理数据,一个对象包括:对象的数据、对象的元数据、对象的全局唯一标识符
接口实现对象的存取
接口通过 RabbitMQ 消息队列进行通讯
向某个 exchange 进行一对多的消息群发
apiServices exchange 每一台接口服务节点都会接收到任意一台数据服务节点的心跳
dataServices exchange 所有数据服务节点绑定该 exchange 并接收来着接口服务的定位消息,拥有对象的数据服务节点会使用消息单发通知该接口服务节点
当发送一条信息给 dataServices exchange 时,定位成功后,将会创建一个反馈信息的临时队列,临时队列将在一定时间后关闭
向某个消息队列进行一对一的消息单发
GET 提供一个 locate接口
客户端通过GET方法发送对象定位请求,接口服务节点收到请求后会向数据服务层群发一个定位信息,然后等待反馈。如果存在则返回该数据服务节点的地址
数据服务心跳信息
接口服务的定位信息及反馈
书上的例子为 SHA-256 更高级别的有SHA-512
书中建议是使用ElasticSearch
我们项目选择的是MySQL对元数据进行存储
表示对象数据的版本默认状态下是最新版本
在数据服务层再加入一个缓存服务