在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → ambry:分布式对象存储(源码下载)

ambry:分布式对象存储(源码下载)

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:4.11M
  • 下载次数:1
  • 浏览次数:9
  • 发布时间:2024-02-21
  • 实例类别:一般编程问题
  • 发 布 人:chenxiaolan
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 对象存储 分布式 AM 对象 存储

实例介绍

【实例简介】
linkedin:分布式对象存储
Ambry是一个分布式对象存储系统,支持存储数万亿个小型不可变对象(50K-100K)和数十亿个大型对象。它专门设计用于在网络公司中存储和提供媒体对象,但也可以用作通用存储系统,存储数据库备份、搜索索引或业务报告。该系统具有以下特点:高可用性和横向扩展性、低延迟和高吞吐量、针对小型和大型对象进行优化、成本效益高、易于使用。


快速开始:
步骤1:下载代码,构建并准备部署。
要获取最新的代码并进行构建,请执行以下操作:
$ git clone https://github.com/linkedin/ambry.git
$ cd ambry
$ ./gradlew allJar
$ cd target
$ mkdir logs

Ambry使用提供有关集群信息的文件来路由来自前端到服务器的请求以及服务器之间的复制。我们将使用一个简单的clustermap,其中包含一个具有一个分区的单个服务器。该分区将使用/tmp作为挂载点。
步骤2:部署服务器。
$ nohup java -Dlog4j2.configurationFile=file:../config/log4j2.xml -jar ambry.jar --serverPropsFilePath ../config/server.properties --hardwareLayoutFilePath ../config/HardwareLayout.json --partitionLayoutFilePath ../config/PartitionLayout.json > logs/server.log &

通过此命令,我们配置了log4j属性,为服务器提供了配置选项和集群定义,并将输出重定向到日志文件。请记下返回的进程ID(serverProcessID),因为关闭时需要用到。
日志将位于logs/server.log中。或者,您可以更改log4j属性,将日志消息写入文件而不是标准输出。
步骤3:部署前端。
$ nohup java -Dlog4j2.configurationFile=file:../config/log4j2.xml -cp "*" com.github.ambry.frontend.AmbryFrontendMain --serverPropsFilePath ../config/frontend.properties --hardwareLayoutFilePath ../config/HardwareLayout.json --partitionLayoutFilePath ../config/PartitionLayout.json > logs/frontend.log &

请记下返回的进程ID(frontendProcessID),因为关闭时需要用到。确保前端已准备好接收请求。
$ curl http://localhost:1174/healthCheck
GOOD

日志将位于logs/frontend.log中。或者,您可以更改log4j属性,将日志消息写入文件而不是标准输出。
步骤4:与Ambry交互!
现在我们已经准备好将数据存储到Ambry并从中检索数据。让我们从存储一个简单的图像开始。为了演示目的,我们将使用已复制到目标文件夹中的图像demo.gif。
POST
$ curl -i -H "x-ambry-service-id:CUrlUpload" -H "x-ambry-owner-id:`whoami`" -H "x-ambry-content-type:image/gif" -H "x-ambry-um-description:Demonstration Image" http://localhost:1174/ --data-binary @demo.gif
HTTP/1.1 201 Created
Location: AmbryID
Content-Length: 0

CUrl命令创建了一个包含demo.gif中二进制数据的POST请求。除了文件数据外,我们还提供了作为blob属性的标头,包括blob的大小、服务ID、所有者ID和内容类型。
除了这些属性之外,Ambry还支持任意用户定义元数据。我们提供x-ambry-um-description作为用户元数据。Ambry不解释此数据,纯粹是用户注释。
响应中的Location标头是刚刚上传的blob的blob ID。
GET - Blob Info
既然我们存储了一个blob,让我们验证一下我们上传的blob的一些属性。
$ curl -i http://localhost:1174/AmbryID/BlobInfo
HTTP/1.1 200 OK
x-ambry-blob-size: {Blob size}
x-ambry-service-id: CUrlUpload
x-ambry-creation-time: {Creation time}
x-ambry-private: false
x-ambry-content-type: image/gif
x-ambry-owner-id: {username}
x-ambry-um-desc: Demonstration Image
Content-Length: 0

GET - Blob
既然我们已经验证了Ambry正确返回属性,让我们获取实际的blob。
$ curl http://localhost:1174/AmbryID > demo-downloaded.gif
$ diff demo.gif demo-downloaded.gif
$

这证实了POST请求中发送的数据与GET请求中接收到的数据相匹配。如果您想查看图像,请直接将浏览器指向 http://localhost:1174/AmbryID ,您应该能够看到上传的图像!
DELETE
Ambry是一个不可变存储系统,无法更新blob,但可以删除以使其无法检索。让我们继续删除刚刚创建的blob。
$ curl -i -X DELETE http://localhost:1174/AmbryID
HTTP/1.1 202 Accepted
Content-Length: 0

您将无法再检索blob属性或数据。
$ curl -i http://localhost:1174/AmbryID/BlobInfo
HTTP/1.1 410 Gone
Content-Type: text/plain; charset=UTF-8
Content-Length: 17
Connection: close

Failure: 410 Gone

步骤5:停止前端和服务器。
$ kill -15 frontendProcessID
$ kill -15 serverProcessID

通过查看日志,可以确认服务已关闭。
其他信息:
除了上面演示的简单API之外,Ambry还支持仅获取用户元数据和HEAD。除了演示的二进制数据POST之外,Ambry还支持通过CUrl或Web表单进行multipart/form-data的POST。
其他有趣的功能包括:
存活时间(TTL):在POST期间,可以通过添加名为x-ambry-ttl的标头来提供以秒为单位的TTL。这意味着TTL过期后,Ambry将停止提供blob。在GET中,过期的blob与已删除的blob行为相同。
私有:在POST期间,如果提供了一个名为x-ambry-private且值为true的标头,将会将blob标记为私有。可以基于blob是公共还是私有来配置API行为。
【实例截图】
【核心代码】

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警